Answer the question
In order to leave comments, you need to log in
Arbitrary url in wp?
I changed the url according to the tutorial from here https://misha.blog/wordpress/taksonomii-v-url-tipo...
Now my url looks like site.ru/record-type-name/first-in-the-list-name- taxonomy-term/product-name
Now I need the url to be like site.ru/post-type-name/taxonomy-term-name/tag-names-related-to-product/product-name
Add new code with tags
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; // возвращаем результат
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question