Как убрать слаг таксономии из URL кастомной таксономии, категории или тега
Задача такая:
Есть у нас кастомные категории для стандартных типов записи (post), называется она Product Category — то есть помимо категории записи, у нас есть еще кастомная категория Product Category. Проблема в том, что при создании категорий в Product Category, например Bosh, то выводиться эта категория будет в таком формате:
site.ua/product_cat/bosh/
Наша задача избавиться от слага /product_cat/.
Стандартными плагинами это сделать не получилось, много нерабочих решений было найдено в Сети. Одно из решений здесь делало рабочей ссылку без слага, но все же при переходе из админки перекидывало на урл со слагом.
Самое идеальное и рабочее решение было найдено на сайте rudrastyh.com. Далее сделаю копипаст с вольным переводом.
В этом посте я покажу вам, как удалить «category» из URL категорий WordPress,

как удалить «tag» из URL тегов публикации

и как удалить слаг кастомных категорий («product_cat») из URL-адресов:

Вот основная часть Кода, вы можете вставить его в свою текущую тему functions.php, только не забудьте изменить названия таксономий/слагов в каждой функции на свои собственные значения.
add_filter('request', 'rudr_change_term_request', 1, 1 );
function rudr_change_term_request($query){
$tax_name = 'product_cat'; // specify you taxonomy name here, it can be also 'category' or 'post_tag'
// Request for child terms differs, we should make an additional check
if( $query['attachment'] ) :
$include_children = true;
$name = $query['attachment'];
else:
$include_children = false;
$name = $query['name'];
endif;
$term = get_term_by('slug', $name, $tax_name); // get the current term to make sure it exists
if (isset($name) && $term && !is_wp_error($term)): // check it here
if( $include_children ) {
unset($query['attachment']);
$parent = $term->parent;
while( $parent ) {
$parent_term = get_term( $parent, $tax_name);
$name = $parent_term->slug . '/' . $name;
$parent = $parent_term->parent;
}
} else {
unset($query['name']);
}
switch( $tax_name ):
case 'category':{
$query['category_name'] = $name; // for categories
break;
}
case 'post_tag':{
$query['tag'] = $name; // for post tags
break;
}
default:{
$query[$tax_name] = $name; // for another taxonomies
break;
}
endswitch;
endif;
return $query;
}
add_filter( 'term_link', 'rudr_term_permalink', 10, 3 );
function rudr_term_permalink( $url, $term, $taxonomy ){
$taxonomy_name = 'product_cat'; // your taxonomy name here
$taxonomy_slug = 'product_cat'; // the taxonomy slug can be different with the taxonomy name (like 'post_tag' and 'tag' )
// exit the function if taxonomy slug is not in URL
if ( strpos($url, $taxonomy_slug) === FALSE || $taxonomy != $taxonomy_name ) return $url;
$url = str_replace('/' . $taxonomy_slug, '', $url);
return $url;
}
И не забывайте о 301 редиректе со старых URL-адресов, это необходимо для SEO вашего сайта. (Я этот код не добавлял, потому как он вызывает небольшой конфликт, если слово-слаг, на который ставится редирект, встречается в названии таксономии, например new-product_cat-1, то оно удаляется и идет редирект на new--1).
//301 redirect
add_action('template_redirect', 'rudr_old_term_redirect');
function rudr_old_term_redirect() {
$taxonomy_name = 'product_cat';
$taxonomy_slug = 'product_cat';
// exit the redirect function if taxonomy slug is not in URL
if( strpos( $_SERVER['REQUEST_URI'], $taxonomy_slug ) === FALSE)
return;
if( ( is_category() && $taxonomy_name=='category' ) || ( is_tag() && $taxonomy_name=='post_tag' ) || is_tax( $taxonomy_name ) ) :
wp_redirect( site_url( str_replace($taxonomy_slug, '', $_SERVER['REQUEST_URI']) ), 301 );
exit();
endif;
}
Код был протестирован с различными иерархическими и неиерархическими таксономиями и прекрасно работает с этими настройками постоянных ссылок (Permalink Settings) /%postname%/

В формате /%category%/%postname%/ код не работает и мы получаем 404 ошибку при переходе на таксономию.
Очень часто в последнее время задают вопрос: Как оптимизировать сайт на CMS WordPress для Google…
Создаем кастомный тип записи (Custom Post Type) Articles с кастомными категориями (Custom Taxonomy) Articles Category….
Решение нашел на сайте byheart.ru wp-admin/upgrade.php ?_wp_http_referer= %2Fwp-admin%2F Ошибка wp-admin/upgrade.php ?_wp_http_referer=wp-admin появилась, когда произвел обновление…
Суть задачи — у нас есть записи с дополнительными полями, в которых указан рейтинг записи,…
4 комментария
Ответить
Переход на третью категорию показывает 404 ((
ссылка типо название_сайта/restoran-i-bar/menu/zavtraki/
Лучше этот код не использовать, он подходит только для единичных конкретных случаев, я по итогу в проекте решил задачу по другому, этот код оставил для примера, но с ним много нюансов.
А тогда как Вы решили проблему с устранением в url product_cat ? ))
Я задал для таксономии слаг «blog»
