Структура постоянных ссылок по Мета-значению поста
У меня следующая проблема:
Два пользовательских типа сообщений, давайте назовем их cpt1 и cpt2.
В cpt2 У меня есть пользовательское мета-поле, в котором вы можете выбрать сообщение из cpt1, его post ID
хранится в мета-значении, называемом postid
.
Структура постоянной ссылки cpt2 является /%post_type%/%post_name%/
.
Чего я пытаюсь добиться, так это:
- Когда
postid
имеетpost ID
из cpt1 (который так будет всегда, поскольку это обязательное поле), структура постоянных ссылок для этой конкретной записи станет/selected_post_slug/%post_type%/%post_name%/
. - Страница архива cpt2 должна быть доступна по
/selected_post_slug/cpt2/
, поэтому похоже, что каждая страница cpt1 имеет свой собственный архив cpt2.
Мне удалось заставить пункт 1 работать, добавив следующий код в мой файл functions.php
:
$wp_rewrite->add_rewrite_tag( '%selected_meta%', '([^&]+)', '?meta=' );
function extra_post_link( $permalink, $post, $leavename ) {
if ( stripos( $permalink, '%selected_meta%' ) == false )
return $permalink;
if ( is_object( $post ) && $post->post_type == 'ervaring' ) {
$_selected_post_slug = '';
$_selected_post_id = get_post_meta( $post->ID, 'rating-post', true );
if ( $_selected_post_id )
$_selected_post_slug = get_page_uri( $_selected_post_id );
if ( ! $_selected_post_slug )
return str_replace( '%selected_meta%', '', $permalink );
return str_replace( '%selected_meta%', "$_selected_post_slug/", $permalink );
}
return $permalink;
}
add_filter( 'post_type_link', 'extra_post_link', 10, 3 );
Я следовал краткому руководству по добавлению тегов перезаписи в структуру постоянных ссылок, которые показал мне, как понять первое, что нужно сделать.
Но, к сожалению, я все еще работаю над решением для пункта 2.
Могу ли я немного подумать об этой проблеме, чтобы помочь мне немного продвинуться по пути? Помощь была бы очень признательна.
1 answers
Я изменил эту строку:
$wp_rewrite->add_rewrite_tag( '%selected_meta%', '([^&]+)', '?meta=' );
В:
$wp_rewrite->add_rewrite_tag( '%selected_meta%', '([^&]+)', 'post_type=ervaring&meta=' );
С которым было достаточно работать как для выпуска 1, так и для выпуска 2.