Удалить категорию и базу тегов из URL-адреса WordPress - без плагина
Я хотел бы удалить базу категорий и тегов из WordPress URL. Я сталкивался с другими сообщениями и решениями, которые использовали плагины. Я хотел бы держаться подальше от плагинов и иметь решение изнутри functions.php. Это предотвратит любые будущие обновления плагинов или файлы WordPress по умолчанию.
Любая помощь будет оценена. Спасибо!
Я пробовал эти решения до сих пор:
Ответы
Ответ 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
Ответ 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:
Чтобы удалить слаг категории из существующих постов, сделайте это:
- Перейдите в "Настройки"> "Постоянные ссылки" и измените пользовательскую структуру с
/%category%/%postname%/
на: /%postname%/
- Держите базы категорий и тегов пустыми (это также по умолчанию)
- Сохранить
Все сообщения теперь могут быть доступны напрямую через 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.