web-dev-qa-db-fra.com

Comment interroger les publications (en type de publication personnalisée hiérarchique) ayant des enfants?

J'essaie de comprendre comment interroger des publications dans mon type de publication personnalisé hiérarchique, en utilisant vraisemblablement WP_Query avec des publications enfants. Je peux obtenir toutes les pages sans enfants en définissant 'post_parent' => 0 dans mes arguments WP_Query, mais cela renvoie tous les articles qui ne sont pas des enfants. Je n'ai besoin que de publications qui ont des publications enfants.

1
JPollock

Vous pouvez utiliser le paramètre post_parent__not_in:

$args = array( 
           'post_type'           => 'cpt',
           'post_parent__not_in' => array( 0 ) 
);
$query = new WP_Query( $args );

récupérer enfant publications de type cpt .

Le SQL généré inclura alors cette partie:

wp_posts.post_parent NOT IN (0)
1
birgire

Pour autant que j'ai compris votre exigence, je suppose que c'est ce dont vous avez besoin.

J'ai documenté le code, veuillez le parcourir.

<?php
/*
Idea:   Collecting all the posts child posts by --->'post_parent__not_in' => array( 0 )<--- 
        in wp_query. Then find their parent posts by eliminating duplicates.
*/

    $query_array = array(
            //Change this post type to your Custom-Post-Type.
        'post_type' => 'news',
            //Showing all posts
        'posts_per_page' => -1, 
            //Giving all child posts only
        'post_parent__not_in' => array( 0 ) 
        );

    $the_query = new WP_Query($query_array);
        //Array to collect all parent posts
    $collect_parents = array();
    while($the_query->have_posts()):
        $the_query->the_post();
            //if condition is used to eliminate duplicates, generated by same child post of parent.
        if(!in_array($post->post_parent, $collect_parents)){
            //$collect_parents contains all the parent post id's
            $collect_parents[] = $post->post_parent;
        }

    endwhile;
        //Printing all the parent posts
    foreach($collect_parents as $parent){
        ?>
        <!-- Printing parent post title -->
        <h2><a href="<?php echo get_permalink($parent ); ?>"> <?php echo get_the_title($parent); ?></a></h2>
        <!-- Printing parent post content -->
        <p><?php echo get_post_field( 'post_content', $parent); ?></p>
        <?php
    }
?>
0
Sudeep K Rana