Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

  • Перейдите в Настройки → Permalinks и выберите Custom и введите: /%category%/%postname%/
  • Затем установите для базы категорий .

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

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

Ответ 2

Пока вы отклоняете это как решение, плагин является безусловно самым простым и наиболее последовательным методом, и они не изменяют файлы 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 действительно изменится, то плагин будет обновлен для работы, в то время как вам придется выяснить, как исправить свой собственный код самостоятельно.

Ответ 3

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

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

Ответ 4

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

Search Appearance > Taxonomies > Category URLs.

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

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

Ответ 5

вместо этого поместите это в свои функции. 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 );

Ответ 6

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

Для Multisite WordPress следующие работы:

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

Ответ 7

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

Протестировано с помощью Wordpress 3.9.1

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

  • тег
  • страница
  • категория

Ответ 8

Точечный трюк, скорее всего, испортит ваши 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;
}

Ответ 9

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

Ответ 10

обновленный ответ:

другое решение:
В файле wp-includes/rewrite.php вы увидите код:
$this->category_structure = $this->front . 'category/'; просто скопируйте всю функцию, поместите в свои функции .php и зацепите ее. просто измените приведенную выше строку следующим образом:
$this->category_structure = $this->front . '/';

Ответ 11

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

Ответ 12

add_action( 'init', 'remove_category_perma' );
function remove_category_perma() {
    unset($GLOBALS['wp_rewrite']->extra_permastructs['category']);
}

Ответ 13

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%/.

Ответ 14

Я не знаю, как сделать это с помощью кода, но для тех, кто не против использовать плагин. Это отличный, который работает для меня:

https://es.wordpress.org/plugins/permalink-manager/

Ответ 15

Добавление "." или "/" не будет работать, если вы хотите консолидированный просмотр блога. Кроме того, я знаю, что это будет делать для RSS или XML-каналов. Я чувствую себя лучше, придерживаясь конвенции WP. Тем не менее, я придумал более элегантный подход.

Во-первых, я называю URL-адрес главной страницы "blog"

Затем я создал категорию под названием "все". Наконец, я, но все мои подкатегории под "все". Поэтому я получаю структуру url, как это.

/blog - 404 - recommend 301 redirect to /blog/all/    
/blog/all/ -  all posts combined.
/blog/all/category1/ - posts filtered by category1
/blog/all/category2/ - posts filterer by category2

Я помещаю пользовательскую метку в пункт меню, называемый "Блог", но он идет в блог/все. Было бы неплохо добавить 301 redirect/blog to/blog/all в файл .htaccess, чтобы избежать включения/записи в 404.