Syntax, um das N-te Element in einer Liste mit benutzerdefinierten Post-Typen zu erhalten?

Wir haben einen benutzerdefinierten Beitragstyp testimonial und möchten den 1., 2. und 3. in verschiedenen maßgeschneiderten Standorten auf der Seite zeigen.

So würden wir es machen, wenn wir nur Testimonials durchlaufen und sie nacheinander zeigen möchten (das funktioniert):

  'testimonial'); $testimonials = new WP_Query( $args ); while( $testimonials->have_posts() ) { $testimonials->the_post(); ?> 
  • Aber nur das erste oder nur das dritte oder das Nth zu zeigen? Hier ist, was wir bisher haben (um den ersten zu bekommen), es ist offensichtlich falsch:

     $args = array('post_type' => 'testimonial'); $testimonials = new WP_Query( $args ); $testimonial1 =$testimonials[0]->the_post; echo $testimonial1->the_content; 

    Wir erhalten einen Fehler, der sagt:

    Schwerwiegender Fehler: Objekt des Typs WP_Query kann nicht als Array verwendet werden

    Solutions Collecting From Web of "Syntax, um das N-te Element in einer Liste mit benutzerdefinierten Post-Typen zu erhalten?"

    Verwenden Sie einen Offset, um die ersten posts_per_page Posts zu überspringen, wenn Sie nur den dritten Post benötigen, und legen Sie posts_per_page auf 1 , um nur diesen bestimmten Post zu erhalten

    Sie können so etwas in Ihren Argumenten versuchen

     $args = array( 'post_type' => 'testimonial', 'offset' => 2, 'posts_per_page' => 1 ); $testimonials = new WP_Query( $args ); while( $testimonials->have_posts() ) { $testimonials->the_post(); ?> 
  • < ?php the_content(); ?>
  • < ?php } wp_reset_postdata(); ?>

    BEARBEITEN

    Bevor ich anfange, ein paar Notizen zu Ihrem Code und meinem bearbeiteten Code. ( Ich habe meinen ursprünglichen Code bearbeitet, um eine normale Schleife anzuzeigen ).

    • Sie müssen das echo get_the_content() . Sie können einfach the_content() direkt verwenden

    • Denken Sie daran, Ihre Postdaten nach der Schleife mit wp_reset_postdata() .

    Wie in den Kommentaren gefordert, ist hier die alternative Syntax, wo Sie die Schleife nicht verwenden. Auch eine Anmerkung oder zwei zuerst:

    • Mit dieser alternativen Syntax können Sie die Vorlagen-Tags nicht verwenden, da sie nicht verfügbar sind

    Sie müssen direkt mit den WP_Post Objekten arbeiten und Filter wie im Link beschrieben verwenden

    • Sie müssen Postdata nicht zurücksetzen, da Sie die Globals nicht ändern

    Du kannst es versuchen

     $args = array( 'post_type' => 'testimonial', 'offset' => 2, 'posts_per_page' => 1 ); $testimonials = new WP_Query( $args ); //Displays the title echo apply_filters( 'the_title', $testimonials->posts[0]->post_title ); //Displays the content echo apply_filters( 'the_content', $testimonials->posts[0]->post_content ); 

    Sie könnten die current_post Eigenschaft und die rewind_posts() -Methode der WP_Query class verwenden, um auf die relevanten Post-Objekte zu WP_Query .

    Sie könnten versuchen, mit dem folgenden Beispiel zu spielen (ungetestet):

     if( $testimonials->post_count >= 3 ) { // First post: $nr = 1; if( isset( $testimonials->posts[$nr-1] ) ) { $testimonials->rewind_posts(); $testimonials->current_post = $nr - 2; $testimonials->the_post(); the_title(); } // Third post: $nr = 3; if( isset( $testimonials->posts[$nr-1] ) ) { $testimonials->rewind_posts(); $testimonials->current_post = $nr - 2; $testimonials->the_post(); the_title(); } // Second post: $nr = 2; if( isset( $testimonials->posts[$nr-1] ) ) { $testimonials->rewind_posts(); $testimonials->current_post = $nr - 2; $testimonials->the_post(); the_title(); } wp_reset_postdata(); } 

    Sie könnten es auch so verwenden, mit Ihren aktuellen while Schleifen:

     $testimonials = new WP_Query( $args ); // First post: $nr = 1; while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) { $testimonials->the_post(); // ... } // Third post: $nr = 3; $testimonials->rewind_posts(); while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) { $testimonials->the_post(); // ... } // Second post: $nr = 2; $testimonials->rewind_posts(); while( $testimonials->have_posts() && ( $nr - 2 ) === $testimonials->current_post ) { $testimonials->the_post(); // ... } wp_reset_postdata();