it-swarm.com.ru

Удалить категорию и теговую базу из URL WordPress - без плагина

Я хотел бы удалить базу категорий и тегов из WordPress URL. Я встречал другие посты и решения, которые использовали плагины. Я хотел бы держаться подальше от плагинов и иметь решение изнутри functions.php. Это предотвратит любые будущие обновления плагинов или файлы WordPress по умолчанию. 

Любая помощь будет оценена. Спасибо!

Я пробовал эти решения до сих пор:

38
cosmoonot

Мне понравилось это решение:

Если вы хотите удалить /category/ из URL, выполните следующие два шага:

  1. Перейдите в Настройки >> Постоянные ссылки и выберите Пользовательский и введите: /%category%/%postname%/
  2. Затем установите базу категорий в .

Сохраните его, и вы увидите, что ваш URL-адрес изменился на этот формат: Http: /yourblog.com/quotes/

(Источник: http://premium.wpmudev.org/blog/daily-tip-quick-trick-to-remove-category-from-wordpress-url/

47
optimiertes
  1. Установить пользовательскую структуру: /% postname% /
  2. Установить категорию базы:. (точка не /)

  3. Сохранить. 100% работают правильно.

17
user4414801

Пока вы отклоняете это как решение, плагин является безусловно самым простым и наиболее последовательным методом, и они не изменяют никакие файлы WordPress по умолчанию. 

http://wordpress.org/plugins/wp-no-category-base/

Его не нужно было обновлять в течение года, поэтому он не создает никаких проблем с обновлениями.

Не существует простого ручного решения, которое бы делало все это, а не просто копировало бы то, что делает плагин из ваших собственных functions.php

  • Лучшие и логичные постоянные ссылки, такие как myblog.com/my-category/ и myblog.com/my-category/my-post/. 
  • Простой плагин - едва добавляет накладные расходы. 
  • Работает из коробки - никаких настроек не требуется. Нет необходимости изменять WordPress файлы. 
  • Не требует других плагинов для работы. 
  • Совместим с плагинами Sitemap. 
  • Работает с несколькими подкатегориями. 
  • Работает с WordPress Multisite. 
  • Перенаправляет старые категории постоянных ссылок на новые (301 редирект, хорошо для SEO).

Кроме того, вы получаете преимущество, которое заключается в том, что если WordPress действительно изменится, то плагин будет обновлен, чтобы работать, в то время как вам придется выяснить, как исправить свой собственный код самостоятельно.

15
Anigel

Если вы используете плагин Yoast SEO, просто перейдите по ссылке:

Advanced > Permalinks > Change URLs

И выберите remove из Strip the category base (usually /category/) from the category URL.

По поводу удаления тега я пока не нашел никакого решения.

10
paulalexandru

вместо этого поместите это в ваши functions.php работает нормально, никаких проблем с перенаправлением.

function fix_slash( $string, $type )
{
global $wp_rewrite;
if ( $wp_rewrite->use_trailing_slashes == false )
{
    if ( $type != 'single' && $type != 'category' )
        return trailingslashit( $string );

    if ( $type == 'single' && ( strpos( $string, '.html/' ) !== false ) )
        return trailingslashit( $string );

    if ( $type == 'category' && ( strpos( $string, 'category' ) !== false ) )
    {
        $aa_g = str_replace( "/category/", "/", $string );
        return trailingslashit( $aa_g );
    }
    if ( $type == 'category' )
        return trailingslashit( $string );
}
return $string;
}

add_filter( 'user_trailingslashit', 'fix_slash', 55, 2 );
4
Robbert

Точечный трюк, скорее всего, испортит ваши RSS-каналы и/или нумерацию страниц. Эти работы, хотя:

add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
function no_category_base_rewrite_rules($category_rewrite) {
    $category_rewrite=array();
    $categories=get_categories(array('hide_empty'=>false));
    foreach($categories as $category) {
        $category_nicename = $category->slug;
        if ( $category->parent == $category->cat_ID )
            $category->parent = 0;
        elseif ($category->parent != 0 )
            $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
        $category_rewrite['('.$category_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $category_rewrite['('.$category_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $category_rewrite['('.$category_nicename.')/?$'] = 'index.php?category_name=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_category_permastruct();
    $old_base = str_replace( '%category%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $category_rewrite[$old_base.'$'] = 'index.php?category_redirect=$matches[1]';
    return $category_rewrite;
}

// remove tag base
add_filter('tag_rewrite_rules', 'no_tag_base_rewrite_rules');
function no_tag_base_rewrite_rules($tag_rewrite) {
    $tag_rewrite=array();
    $tags=get_tags(array('hide_empty'=>false));
    foreach($tags as $tag) {
        $tag_nicename = $tag->slug;
        if ( $tag->parent == $tag->tag_ID )
            $tag->parent = 0;
        elseif ($tag->parent != 0 )
            $tag_nicename = get_tag_parents( $tag->parent, false, '/', true ) . $tag_nicename;
        $tag_rewrite['('.$tag_nicename.')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?tag=$matches[1]&feed=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/page/?([0-9]{1,})/?$'] = 'index.php?tag=$matches[1]&paged=$matches[2]';
        $tag_rewrite['('.$tag_nicename.')/?$'] = 'index.php?tag=$matches[1]';
    }
    global $wp_rewrite;
    $old_base = $wp_rewrite->get_tag_permastruct();
    $old_base = str_replace( '%tag%', '(.+)', $old_base );
    $old_base = trim($old_base, '/');
    $tag_rewrite[$old_base.'$'] = 'index.php?tag_redirect=$matches[1]';
    return $tag_rewrite;
}

// remove author base
add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;    
    $author_rewrite = array();    
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$"] = 'index.php?author_name=$matches[1]&feed=$matches[2]';
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }      
    return $author_rewrite;}
add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}
3
Lucian Davidescu

Плагин без категории не работал для меня.

Для мультисайта WordPress работают следующие:

  1. Зайдите на сайты администраторов сети;
  2. Откройте сайт под \;
  3. Перейдите в настройки;
  4. Под структурой постоянных ссылок введите /%category%/%postname%/. Это отобразит ваш URL как www.domainname.com/categoryname/postname;
  5. Теперь перейдите на панель мониторинга вашего сайта (не на панель мониторинга сети);
  6. Открыть настройки;
  7. Открыть постоянную ссылку. Не сохранять (постоянная ссылка будет отображать не редактируемое поле как yourdoamainname/blog/. Игнорировать его. Если вы сохраните сейчас работу, которую вы проделали в шаге 4, будут перезаписаны. Этот шаг открытия страницы постоянной ссылки, но без сохранения, необходим для обновления базы данных.
2
Goutham

Если вы все еще ищете комбинацию (теги, категории и страницы в базе URL), вы можете сделать это, как я.

Протестировано с использованием Wordpress 3.9.1

Если у вас есть страницы, категории или теги с одинаковыми именами, система примет:

  1. тег
  2. страница
  3. категория
2
SimonSimCity
add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
    unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}
0
fdrv

WordPress 5.0.2:

Чтобы удалить слаг категории из существующих постов, сделайте это:

  1. Перейдите в «Настройки»> «Постоянные ссылки» и измените пользовательскую структуру с /%category%/%postname%/ на: /%postname%/ 
  2. Держите базы категорий и тегов пустыми (что также используется по умолчанию)
  3. Сохранить

Все сообщения теперь могут быть напрямую доступны через domain.com/%postname%/, а все категории могут быть доступны через domain.com/category/xyz/. WordPress автоматически добавит все 301 перенаправления для старых URL. Таким образом, если кто-то получит доступ к domain.com/%category%/%postname%/, он будет автоматически перенаправлен на domain.com/%postname%/.

0
Nadeem Khan

https://wordpress.org/plugins/remove-category-url/ Используйте этот плагин, он отлично справляется с сокрытием базы категорийНе требуется никаких настроек, просто установите и активируйте ,.

0
Girish

Выберите пользовательскую структуру в постоянных ссылках и добавьте /% category% /% postname%/после вашего домена. Добавление "/" к базе категорий не работает, вы должны добавить точку/точку. Я написал учебник для этого здесь: удалить категорию из учебника URL

0
Jonny Jordan