Структура постоянных ссылок по Мета-значению поста


У меня следующая проблема:

Два пользовательских типа сообщений, давайте назовем их cpt1 и cpt2.

В cpt2 У меня есть пользовательское мета-поле, в котором вы можете выбрать сообщение из cpt1, его post ID хранится в мета-значении, называемом postid.

Структура постоянной ссылки cpt2 является /%post_type%/%post_name%/.

Чего я пытаюсь добиться, так это:

  1. Когда postid имеет post ID из cpt1 (который так будет всегда, поскольку это обязательное поле), структура постоянных ссылок для этой конкретной записи станет /selected_post_slug/%post_type%/%post_name%/.
  2. Страница архива 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.

Могу ли я немного подумать об этой проблеме, чтобы помочь мне немного продвинуться по пути? Помощь была бы очень признательна.

Author: Mike Madern, 2013-01-25

1 answers

Я изменил эту строку:

$wp_rewrite->add_rewrite_tag( '%selected_meta%', '([^&]+)', '?meta=' );

В:

$wp_rewrite->add_rewrite_tag( '%selected_meta%', '([^&]+)', 'post_type=ervaring&meta=' );

С которым было достаточно работать как для выпуска 1, так и для выпуска 2.

 1
Author: Mike Madern, 2013-01-25 11:01:15