it-swarm.com.de

Wie verwende ich geschachtelte Schleifen benutzerdefinierter Beitragstypen für MultiSite-Blogs mit WP_Query ()?

Ich verwende den Code von miguelpeixes 'WordPress Query Multisite' , um eine benutzerdefinierte Schleife für meine WP Multi-Sites zu erstellen "Child Sites." In dieser Schleife möchte ich eine weitere Schleife verschachteln, die benutzerdefinierte Beitragstypen von dieser untergeordneten Site abruft, z.

Site 1
    CPT 1
    CPT 2
Site 2
    CPT 3
    CPT 4

Ich bin tatsächlich in der Lage, die Schleife zum Laufen zu bringen und die Child Custom Post Types zu ziehen. Die Schleife wiederholt jedoch eine untergeordnete Site. Ich bin mir nicht sicher, ob mir ein offensichtlicher Fehler fehlt oder was, hier ist der Code, den ich verwende:

<?php
    $args_outer = array(
        'multisite' => 1,
        'sites__not_in' => array(1),
    );
    $child_site_query = new WP_Query( $args_outer );
    while($child_site_query->have_posts()) : $child_site_query->the_post(); global $blog_id; // START: Outer Loop
    // --------------------------------------------------
        switch_to_blog($blog_id);

        $args_inner = array(
            'post_type' => 'my_cpt'
        );

        $child_cpts_query = new WP_Query( $args_inner );
        while($child_cpts_query->have_posts()) : $child_cpts_query->the_post(); // START: Inner Loop

        // Variables
        $child_cpt_id =  get_the_ID ();
        $child_cpt_thumbnail = get_post_meta( $child_cpt_id, '_thumbnail_id', true );
        $child_cpt_permalink = get_the_permalink();
        ?>
        <!-- START: HTML -->
        <div class="col-md-3">
            <h3>
                <a href="<?php echo($child_cpt_permalink);?>">
                    <?php echo $blog_id; ?><br>
                    <?php echo $child_cpt_id; ?> - 
                    <?php echo get_the_title(); ?>
                </a>
            </h3>
        </div>
        <!-- END: HTML -->
        <?php
        endwhile;  // END: Inner Loop
        wp_reset_postdata();
        restore_current_blog();


    // --------------------------------------------------
    endwhile;  // END: Outer Loop
    wp_reset_postdata();
?>

Vermassle ich wp_reset_postdata () oder restore_current_blog () in der inneren Schleife? (Welches ist mein Verdacht).

Vielen Dank im Voraus für eventuelle Einblicke!

2
Ryan Dorn

Dieses Plugin gibt Ihnen bereits eine Liste von Posts für jede Site, aber es macht nicht genau das, was Sie wollen.

Grundsätzlich erhalten Sie eine Liste aller Beiträge in Ihrem Netzwerk. Anschließend müssen Sie sie nach site_id sortieren und eine Ausgabe dafür erstellen.

Ich weiß nicht, ob dies die beste Version ist - aber da WP_Query ein eindimensionales Array zurückgibt, benötigen Sie etwas anderes, um es zu gruppieren und nach site_id zu sortieren.

$args_outer = array(
    'multisite' => 1,
    'sites__not_in' => array(1),
    'post_type' => 'my_cpt',
    'numberposts' => -1,
    'posts_per_page' => -1
);
$child_site_query = new WP_Query_Multisite( $args_outer );

while($child_site_query->have_posts()) : $child_site_query->the_post();
    global $blog_id, $post;
    $blogs[$blog_id][] = $post; // create array with first parameter blogid, and the posts inside
    // --------------------------------------------------
endwhile;  // END: Outer Loop
wp_reset_postdata();     

// loop through all blogs
foreach( $blogs as $thisblog => $posts ) {
    // switch to this blog and create output
    switch_to_blog( $thisblog );
    echo 'Site ' . $thisblog . '<br /><ul>';
    // loop through all posts on this blog
    foreach( $posts as $thispost ) {
        echo '<li><a href="' . get_permalink( $thispost->ID ) . '">' . $thispost->post_title . '</a></li>';
    }
    echo '</ul>';
}
restore_current_blog();
2
fischi