Я работаю с темой WordPress, которую я купил для стеклодувного бизнеса, и она предоставляет мне собственный тип поста, который называется «портфолио».
То, что я пытаюсь сделать, это переписать слаг этого пользовательского типа записи, чтобы он соответствовал типу продукта.
Если бы товар находился в категории «освещение», URL-адрес был бы domain.com/lighting/product-name
Если бы товар находился в категории "объект", URL был бы
domain.com/objects/product-name
Я могу получить желаемую структуру постоянных ссылок для своих сообщений, добавив следующий код в файл functions.php моей дочерней темы, но когда я это сделаю, все остальные мои страницы (за исключением домашней страницы) вернут 404.
add_filter( 'register_post_type_args', 'dynamic_keep_product_slug', 10, 2 );
function dynamic_keep_product_slug( $args, $post_type ) {
if ( 'portfolio' === $post_type ) {
$my_args = array(
'rewrite' => array( 'slug' => '%project-type%', 'with_front' => true ),
'hierarchical' => true,
'taxonomies' => array('category')
);
return array_merge( $args, $my_args );
}
return $args;
}
function keep_product_link( $post_link, $id = 0 ) {
$post = get_post($id);
$terms = wp_get_object_terms( $post->ID, 'project-type' );
if( $terms ){
return str_replace( '%project-type%' , $terms[0]->slug , $post_link );
} else {
return str_replace( '%project-type%' , 'products' , $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'keep_product_link', 10, 2 );
Я далеко не эксперт, так может кто-нибудь сказать мне, где я ошибся здесь? Есть ли лучший способ дать этому типу поста несколько вариантов слагов?