it-swarm.com.de

Schleife innerhalb einer Schleife?

Ich verwende ein paar benutzerdefinierte wp_query-Schleifen auf meiner Seite. Die erste ruft Nachrichten aus einer bestimmten Kategorie ab und zeigt dann einen kleinen Auszug mit dem Permalink an.

Die zweite ist eine weitere wp_query, die einen benutzerdefinierten Beitragstyp mit einigen erweiterten benutzerdefinierten Feldern erhält.

Das Problem ist, ich hätte gerne eine weitere Schleife innerhalb der zweiten, die 3 Beiträge aus dem Nachrichtenbereich mit einem Vorschaubild erhält (im Grunde das Gegenteil der ersten Schleife, alle anderen Kategorien). Nachdem ich unzählige Artikel in der Schleife gelesen habe, kann ich nicht herausfinden, wie ich eine 'verschachtelte' Schleife in meiner zweiten Schleife erstellen kann. Ich bin mir sicher, dass es einfach sein muss, es scheint, als wäre es einfach zu tun.

Hier ist mein Code mit viel entferntem HTML.

<?php 


/*
    Template Name: Homepage
*/

?>

<?php get_header(); ?>


    <div class="thenews">
        <div class="newsinner">


            <div class="grid-1">
                <h6 class="nsix">latest news</h6>
            </div> <!-- end div grid-1 -->




            <div class="grid-2">

            <?php
                        $recentPosts = new WP_Query();
                        $recentPosts->query('cat=5&showposts=1');
                    ?>
            <?php while ($recentPosts->have_posts()) : $recentPosts->the_post(); ?>

            <p><?php echo ''.get_the_Twitter_excerpt(); ?>...</p>

                </div> <!-- end div grid-2 -->   

                <div class="grid-3">

                <a href="<?php the_permalink() ?>">Read it</a>


                <?php endwhile; wp_reset_query(); ?>
                </div> <!-- end div grid-3 -->

        </div> <!-- end div newsinner -->
    </div> <!-- end div thenews -->

<div id="main-content">
    <div class="typograhpy">



            <div class="home-grid-1">
                <div class="home-grid-1-inner">
                     <?php
$portfolio_query = new WP_Query(array(
        'post_type' => 'headerhome',
        'showposts' => 1
        ) );
?>


      <?php while ($portfolio_query->have_posts()) : $portfolio_query->the_post(); ?>
                <h2><?php the_title(); ?></h2>  
                    <?php the_content(); ?>


                        <div class="anyres">


                             <p> <?php the_field('anyresolution'); ?></p>

                        </div> <!-- end div anyres -->


                </div> <!-- end home-gird-1-inner -->
            </div> <!-- end home-grid-1 -->

            <div class="home-grid-2">


                <div class="inner-home-1">
                    <div class="inside-home-1-1">




                         <h2><?php the_field('services_'); ?></h2>
                         <p> <?php the_field('services_text'); ?></p>





                    </div> <!-- end div inside-home-1-1 -->


                    <div class="inside-home-1-2">

                    <p> <?php the_field('services_text_right'); ?></p>




                    </div> <!-- end div inside-home-1-2 -->
                </div> <!-- end div inner-home-1 -->
                <div class="margindiv"></div>

                <div class="inner-home-2">

                <div class="brushpic"></div> <!-- end div brushpic -->




                         <h3><?php the_field('services_1_header') ?></h3>       
                         <p><?php the_field('services_1_content'); ?></p>



                </div><!-- end div inner-home-2 -->

                <div class="inner-home-3">

                    <div class="cloudpic"></div> <!-- end div cloudpic -->

                     <h3><?php the_field('services_2_header') ?></h3>       
                         <p><?php the_field('services_2_content'); ?></p>



                </div> <!-- end div inner-home-3 -->

                <div class="inner-home-4">
                    <div class="onetwoone"></div> <!-- end div onetwoone -->

                        <h3><?php the_field('services_3_header') ?></h3>       
                         <p><?php the_field('services_3_content'); ?></p>




                </div> <!-- end div inner-home-4 -->


            </div> <!-- end div home-grid-2 -->


            <div style="clear:both"></div>









    </div> <!-- end div typograhpy -->

        <div class="graphgrid">





        </div> <!-- end div graphgrid -->

    <div class="sizesdes">




     <blockquote><?php the_field('gallery_blockquote_') ?></blockquote>     
    <p><?php the_field('gallery_content'); ?></p>

    <?php endwhile; wp_reset_query(); ?>






</div> <!-- end div main-content -->











<?php get_footer(); ?>

Arbeitscode, der jedoch das_post_thumbnail nicht abruft

<?php
                            global $post;$backup=$post;
                            $inner_query = new WP_Query();
                            $inner_query->query('showposts=3');
                        ?>

                        <?php while ($inner_query->have_posts()) : $inner_query->the_post(); $post=$backup; ?>




                        <?php the_post_thumbnail(); ?>

                    <p><?php echo ''.get_the_custom_excerpt(); ?>...</p>

                    <a href="<?php the_permalink() ?>">Read it</a>



                    <?php endwhile; ?>
6
andy

Sie können beliebig viele Schleifen erstellen, indem Sie weitere WP_Query-Objekte erstellen

$query = new WP_Query($args);

while ($query->have_posts()) :

    // initialization for $inner_args & backup the current global $post
    $inner_query = new WP_Query($inner_args);

    while ($inner_query->have_posts()) :
        // do something
    endwhile;
    // restore the global $post from the previously created backup

endwhile;

ERKLÄRUNG WIE ERSUCHT

Wann immer Sie ein Template-Tag wie the_title(); aufrufen, zeigt es etwas über den aktuellen Beitrag in der Schleife an. Aber woher weiß es, welcher Beitrag der aktuelle Beitrag ist? Dies geschieht durch Lesen der Informationen aus den globalen Postdaten (gespeichert in einer globalen Variablen $post).

Wenn Sie eine Schleife verwenden, verwenden Sie immer eine $query->the_post() als erste Anweisung. Mit dieser Funktion können Sie festlegen, dass globale Daten vom WP_Query-Objekt an den nächsten Beitrag gesendet werden (der vorherige Inhalt geht verloren).

Wenn Sie hier die innere Schleife aufgerufen haben, gingen die mit der äußeren Schleife verbundenen Postdaten verloren, als die innere Schleife zu funktionieren begann. Unabhängig davon, welche Funktion Sie nach dem Ende der inneren Schleife verwenden, werden immer noch nur die Daten der inneren Schleife gefunden.

In der Lösung haben Sie zuerst die Daten der äußeren Schleife in einer anderen Variablen gespeichert, bevor der Inhalt verloren geht. Dann funktioniert die Schleife wie sie sein soll (Löschen aller äußeren Schleifendaten).

Wenn die Arbeit der inneren Schleife abgeschlossen ist, müssen Sie jetzt die Daten der äußeren Schleife verwenden, diese gehen jedoch aufgrund der inneren Schleife verloren. Hier nehmen Sie die zuvor gespeicherten Daten auf und ersetzen sie. Jetzt sind Sie wieder an der Position, an der Sie die innere Schleife gestartet haben

12
Mridul Aggarwal

Sie können WP_Query :: reset_postdata () auch dafür verwenden.

$query = new WP_Query($args);

while ($query->have_posts()) :

    // initialization for $inner_args & backup the current global $post
    $inner_query = new WP_Query($inner_args);

    while ($inner_query->have_posts()) :
        // do something
    endwhile;

    // restore the global $post from the previously created backup
    $query->reset_postdata();

endwhile;
6
Dan Smart