2016-04-07 7 views
0

Ich habe 2 benutzerdefinierte Beitragstypen über Thema, rt_book und rt_chapter erstellt. Jede rt_book hat mehrere rt_chapter Beiträge. Wenn ich single-rt_book.php (was sollte den Inhalt einer bestimmten rt_book Post zeigen), wie kann ich nur die rt_chapter gehört zu diesem spezifischen rt_book wird geladen werden?WP_Query zum Filtern bestimmter übergeordneter benutzerdefinierter Beitragstyp?

Mein aktueller WP_Query ist wie folgt (die gibt alle 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; 
    } 
} 

ich diese zwei benutzerdefinierte Post-Typen beziehen sich durch den Beitrag Meta von rt_book mit einer Reihe von rt_chapter Post IDs Einstellung über Funktion add_post_meta({post ID of rt_book}, 'chapter_orders', {post ID of rt_chapter}) und update_post_meta().

Versucht child_of Option von WP_Query, hat aber keinen Einfluss auf die Ergebnisse.

+3

Sie benötigen weitere Informationen: Wie geht es dir 'rt_chapter' gehört' rt_books' beim Erstellen 'rt_chapter'. –

+0

Versuchen Sie, die Taxonomieparameter in der Abfrage zu verwenden. [Mehr hier] (https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters) – zipkundan

Antwort

1

versuchen, wie diese

$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

Ich habe es auch gleich versucht. Es werden jedoch keine Posts zurückgegeben. Wenn ich jedoch '$ post_ids = explode (',', get_post_meta (get_the_ID(), 'chapter_orders', true) verwende); wp_reset_query(); 'und benutze' 'post__in' => $ post_ids, 'in' WP_Query() 'werden korrekte Posts angezeigt. Warum ? – Raptor

+0

Ich bin mir nicht sicher, aber ich denke, Wordpress Standard 'WP_Query()' wird ausgeführt, Sohn neue Instanz von 'WP_Query()' können einander in Konflikt geraten. Wie auch immer Sie Ihre Lösung haben, Sie können den Test mit 'get_posts()' anstelle von 'WP_Query()' überprüfen, der in Ihrem Fall funktioniert. –

+0

Ausgezeichnet. Die endgültige Lösung lautet: '$ post_ids = explode (',', get_post_meta (get_the_ID(), 'chapter_orders', true)); $ Beiträge = get_posts (Array ('post__in' => $ post_ids, 'post_type' => 'rt_chapter')); '. Nur 2 Zeilen. Danke für deinen Hinweis und Hilfe. – Raptor

0

Versuchen Sie dies. Hoffentlich sollte das funktionieren.

$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

Funktioniert das sogar ich speichere die Informationen in Post Meta von 'rt_book'? – Raptor

+0

In diesem Fall müssen Sie den Parameter 'meta_query' verwenden. – zipkundan

+0

netter Hinweis. Ich habe gerade versucht, 'meta_query' Parameter zu verwenden, es gibt nichts zurück. Ich habe jedoch versucht, 'get_post_meta (get_the_ID(), 'chapter_orders', true)' zu verwenden, um die 'rt_chapter'-IDs zu erhalten. Es wird eine ID-Liste zurückgegeben. – Raptor