Я использую Yoast SEO, среди прочих функций, карту сайта и основную категорию.
Этот код изменяет% category% на основную категорию (Yoast), и он отлично работает:
function wpa_category_post_link( $post_link, $id = 0 ){
$post = get_post($id);
if ( is_object( $post ) ){
$terms = wp_get_object_terms( $post->ID, 'otw_pm_portfolio_category' );
if( $terms ){
$the_term = $terms[0];
foreach($terms as $term) {
if( get_post_meta($post->ID, '_yoast_wpseo_primary_otw_pm_portfolio_category',true) == $term->term_id ) {
$the_term = $term;
}
}
if ($the_term->slug) {
$post_link = str_replace( '%category%' , $the_term->slug , $post_link );
}
}
}
return $post_link;
}
add_filter( 'post_type_link', 'wpa_category_post_link', 1, 3 );
Но на карте сайта, созданной Yoast, первая запись для типа сообщения - это URL-адрес с% category%, которого не существует. введите описание изображения здесь Я потратил часы на поиск ответа, но без решения. Я пробовал использовать фильтры как wpseo_sitemap_url, но безуспешно.