Поддержка Проблемы и решения Заменить дефис в ЧПУ на нижнее подчеркивание

  • Всем привет!)
    Собираюсь переносить блог на WordPress и надо привести ссылки к такому же виду, как они были на предыдущем движке.
    Собственно, уже привел их к этому виду, благо Worpress позволяет очень тонко это дело настроить, но не удалось одного — поменять дефис в ЧПУ на нижнее подчеркивание (_).
    Т. е. хочу вместо privet-mir иметь privet_mir. Знаю, что можно при добавлении/редактировании материала вручную заменить, но постов больше 180 и руками не хотелось бы это делать, да еще и каждый раз при добавлении нового поста.
    Как такое реализовать, где что заменить надо?)

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Никто не знает?))
    Ну хорошо, может быть получится сделать mod_rewrite’ом это? Например, делать редирект с — на _?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Можно добавить фрагмент в functions.php активной темы:

    function replace_dashes_with_underscores($link){
    	return str_replace('-', '_', $link);
    }
    add_filter('post_link', 'replace_dashes_with_underscores');
    add_filter('page_link', 'replace_dashes_with_underscores');
    
    function replace_underscores_with_dashes($query_vars) {
    	if ( !empty($query_vars['name']) )
    		$query_vars['name'] = str_replace('_', '-', $query_vars['name']);
    	if ( !empty($query_vars['pagename']) )
    		$query_vars['pagename'] = str_replace('_', '-', $query_vars['pagename']);
    	return $query_vars;
    }
    add_filter('request', 'replace_underscores_with_dashes');

    URL сейчас, в старом блоге, имеет такой вид:
    /blog/privet_mir/2010-11-20-189
    А в блоге на WP такой:
    /blog/privet-mir/2010-11-20-189
    То есть нужно заменить _ только в названии поста. А приведенная выше ф-ия заменит его во всем URL (но вообще она работает, я проверил).

    Вообще, я этим всем занимаюсь только потому, что не хочу терять индекс. Все посты давно проиндексированы по этим ссылкам. Конечно, мне не нравится такой вид URL, но…

    А может быть есть способ с помощью 301 редиректа перенаправлять всех, пришедших по адресу сайт.ру/blog/privet_mir/2010-11-20-189 на страницу сайт.ру/privet-mir? Тогда и ПС поймут, и ЧПУ нормальные будут.

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    У меня при структуре /blog/%postname%/%year%-%monthnum%-%day%-%post_id% перенаправления происходят автоматически. Если у вас не происходят, можно добавить в functions.php темы такой фрагмент:

    function redirect_old_links() {
    	if ( preg_match('/blog\/.*_+.*\/[0-9-]*/', $_SERVER['REQUEST_URI']) ) {
    		$request_uri = str_replace('_', '-', $_SERVER['REQUEST_URI']);
    		wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] . $request_uri, 301 );
    		exit();
    	}
    }
    add_action('init', 'redirect_old_links');

Просмотр 4 ответов — с 1 по 4 (всего 4)
  • Тема «Заменить дефис в ЧПУ на нижнее подчеркивание» закрыта для новых ответов.