Изменяла вид url по туториалу отсюда
https://misha.blog/wordpress/taksonomii-v-url-tipo...
Сейчас у меня url имеет вид сайт.ру/имя-типа-записи/имя-первого-в-списке-термина-таксономии/имя-товара
Теперь мне нужно, чтобы url был вида сайт.ру/имя-типа-записи/имя-термина-таксономии/имена-тэгов-которые-относятся-к-товару/имя-товара
Добавляю новый код с тэгами
function true_post_type_permalink( $permalink, $post_id, $leavename ) {
$post_type_name = 'products'; // название типа записи, вы можете найти его в админке или в функции register_post_type()
$post_type_slug = 'products'; // часть URL товаров, не всегда совпадает с названием типа записи!
$tax_name = 'catalog'; // ну это понятно, название таксономии - категории товаров
$post = get_post( $post_id ); // получаем объект поста по его ID
if ( strpos( $permalink, $post_type_slug ) === FALSE || $post->post_type != $post_type_name ) // не делаем никаких изменений, если тип записи не соответствует или если URL не содержит ярлык tovar
return $permalink;
$termini = wp_get_object_terms( $post->ID, $tax_name ); // получаем все категории, к которым принадлежит данный товар
//новый код, получает все тэги, записывает в строку
$tags = get_the_tags( $post_id );
$tag_string = '';
$count_tags = 0;
foreach ($tags as $key => $tag) {
$count_tags++;
if ($tag->count == $count_tags-1) {
$tag_string .= $tag->slug;
} else{
$tag_string .= $tag->slug.'/';
}
}
if ( !is_wp_error( $termini ) && !empty( $termini ) && is_object( $termini[0] ) )
$permalink = str_replace( $post_type_slug, $post_type_slug.'/'.$termini[0]->slug.'/'.$tag_string, $permalink ); //новый код, дописывает к url существующие тэги
return $permalink;
}
add_filter('request', 'true_post_type_request', 1, 1 );
function true_post_type_request( $query ){
global $wpdb; // нам немного придётся поработать с БД
$post_type_name = 'products'; // указываем тут название типа записей товара
$tax_name = 'catalog'; // а также название таксономии - категории товаров
$yarlik = $query['attachment']; // после того, как мы изменили ссылки товаров в предыдущей функции, WordPress начал принимать их за страницы вложений
// а теперь давайте получим ID товара, ярлык которого соответствует запросу на странице
$post_id = $wpdb->get_var(
"
SELECT ID
FROM $wpdb->posts
WHERE post_name = '$yarlik'
AND post_type = '$post_type_name'
"
);
$termini = wp_get_object_terms( $post_id, $tax_name ); // товар должен находиться в категории (одной или нескольких)
if( isset( $yarlik ) && $post_id && !is_wp_error( $termini ) && !empty( $termini ) ) : // изменяем запрос, если всё ок
unset( $query['attachment'] );
$query[$post_type_name] = $yarlik;
$query['post_type'] = $post_type_name;
$query['name'] = $yarlik;
endif;
return $query; // возвращаем результат
}
Но с добавлением к url тэгов получается 404 страница, так же получается, если дописывать туда не один термин, а все. Как это можно решить?