2016-04-07 7 views
0

У меня есть 2 пользовательских типа сообщений, созданных с помощью темы, rt_book и rt_chapter. Каждый rt_book имеет несколько сообщений rt_chapter. Когда я использую single-rt_book.php (который должен показывать содержимое конкретного сообщения rt_book), как я могу фильтровать только rt_chapter принадлежит к этому конкретному rt_book, загружаемому?WP_Query для фильтрации определенного родительского настраиваемого типа сообщений?

Мой текущий WP_Query выглядит следующим образом (который возвращает все rt_chapter):

$args = array(
    'post_type'   => 'rt_chapter', // TODO: Filter specific book. 
    'post_status'  => 'publish', 
    'posts_per_page' => -1, 
    'caller_get_posts' => 1, 
    'orderby'   => 'date', 
    'order'    => 'ASC' 
); 
$query = new WP_Query($args); 
if($query->have_posts()) { 
    while($query->have_posts()) { 
     $query->the_post(); 
     $posts[] = $query->post; 
    } 
} 

Я связать эти два типа пользовательских почтовых, установив Post Meta из rt_book с массивом rt_chapter идентификаторов почтовых, через функция add_post_meta({post ID of rt_book}, 'chapter_orders', {post ID of rt_chapter}) и update_post_meta().

Пробовал child_of вариант WP_Query, но не влияет на результаты.

+3

Вам нужно больше информации: Как вы 'rt_chapter' принадлежит' rt_books' при создании 'rt_chapter'. –

+0

Попробуйте использовать параметры таксономии в запросе. [Подробнее здесь] (https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters) – zipkundan

ответ

1

Попробуйте Как это

$args = array(
'post_type'   => 'rt_chapter', 
'post_status'  => 'publish', 
'posts_per_page' => -1, 
'caller_get_posts' => 1, 
'orderby'   => 'date', 
'order'    => 'ASC', 
'meta_query' => array(
    array(
     'key' => 'rt_book', 
     'value' => get_post_meta(get_the_ID(), 'chapter_orders', true), 
     'compare'=> 'IN' 
    ), 
) 
); 

$query = new WP_Query($args); 
if($query->have_posts()) { 
while($query->have_posts()) { 
    $query->the_post(); 
    $posts[] = $query->post; 
} 
} 
+0

Я просто пытался тоже. Однако сообщения не возвращаются. Однако, когда я использую '$ post_ids = explode (',', get_post_meta (get_the_ID(), 'chapter_orders', true)); wp_reset_query(); 'и использовать' 'post__in '=> $ post_ids,' в 'WP_Query()', появляются правильные сообщения. Зачем ? – Raptor

+0

Я не уверен, но я думаю, что Wordpress по умолчанию 'WP_Query()' выполняет сыну новый экземпляр 'WP_Query()' может конфликтовать друг с другом. Однако вы получили свое решение, вы можете проверить тест с помощью 'get_posts()' вместо 'WP_Query()', который может работать в вашем случае. –

+0

Отлично. Окончательное решение: '$ post_ids = explode (',', get_post_meta (get_the_ID(), 'chapter_orders', true)); $ posts = get_posts (array ('post__in' => $ post_ids, 'post_type' => 'rt_chapter')); '. Всего 2 линии. Спасибо за подсказку и помощь. – Raptor

0

Попробуйте это. Надеюсь, это сработает.

$tax_slug = get_query_var('taxonomy'); 
$args = array(
    'post_type'   => 'rt_chapter', // TODO: Filter specific book. 
    'post_status'  => 'publish', 
    'posts_per_page' => -1, 
    'caller_get_posts' => 1, 
    'orderby'   => 'date', 
    'order'    => 'ASC', 
    'tax_query' => array(
     array(
      'taxonomy' => 'rt_book', 
      'field' => 'slug', 
      'terms' => $tax_slug 
     ), 
    ) 
); 
+0

Выполняет ли это работу даже сохранение информации в Post Meta из 'rt_book'? – Raptor

+0

В этом случае вам нужно будет использовать параметр 'meta_query'. – zipkundan

+0

красивый намек. Я просто пытался использовать параметр 'meta_query', он ничего не возвращает. Однако я пытался использовать 'get_post_meta (get_the_ID(), 'chapter_orders', true)' для получения идентификаторов 'rt_chapter', он возвращает список идентификаторов. – Raptor