Wie werden die letzten 3 Beiträge (letzte Beiträge) auf einer statischen Seite angezeigt?

Antworten:

23

Normalerweise verwende ich diesen Ansatz:

falscher Ansatz

<?php query_posts( array(
   'category_name' => 'news',
   'posts_per_page' => 3,
)); ?>

<?php if( have_posts() ): while ( have_posts() ) : the_post(); ?>

   <?php the_excerpt(); ?>
   <?php endwhile; ?>

<?php else : ?>

   <p><?php __('No News'); ?></p>

<?php endif; ?>

Mit Hilfe von @swissspidy ist dies der richtige Weg :

<?php 
   // the query
   $the_query = new WP_Query( array(
     'category_name' => 'news',
      'posts_per_page' => 3,
   )); 
?>

<?php if ( $the_query->have_posts() ) : ?>
  <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

    <?php the_title(); ?>
    <?php the_excerpt(); ?>

  <?php endwhile; ?>
  <?php wp_reset_postdata(); ?>

<?php else : ?>
  <p><?php __('No News'); ?></p>
<?php endif; ?>

Weitere Informationen finden Sie unter @codex .

Huckbit
quelle
2
Ich verweise gerne auf wordpress.stackexchange.com/a/1755/12404, um zu zeigen, warum die Verwendung query_posts()fast immer eine schlechte Idee ist.
swissspidy
4

Es hängt davon ab, was Sie wollen. Wenn Sie eine "Seite mit Beiträgen" erstellen möchten, dh eine neue Seitenvorlagendatei erstellen möchten, können Sie auf dieser Seite eine sekundäre Schleife erstellen.

Der Kodex hat ein Beispiel dafür und hier ist ein weiteres, sehr reduziertes Beispiel.

<?php
/*
Template Name: Page of Posts
*/
get_header(); 
?>

<?php while( have_posts() ): the_post(); /* start main loop */ ?>

    <h1><?php the_title(); ?></h1>

    <?php
        /* Start Secondary Loop */
        $other_posts = new WP_Query( /*maybe some args here? */ );
        while( $others_posts->have_posts() ): $other_posts->the_post(); 
    ?>
        You can do anything you would in the main loop here and it will
        apply to the secondary loop's posts
    <?php 
        endwhile; /* end secondary loop */ 
        wp_reset_postdata(); /* Restore the original queried page to the $post variable */
    ?>

<?php endwhile; /* End the main loop */ ?>

Wenn Sie nach etwas suchen, das Sie auf einer beliebigen Seite ablegen können, ist ein Shortcode die beste Lösung . Sie müssten einen Shortcode erstellen, der mehrere Beiträge abruft und sie in einer Liste zurückgibt (oder was auch immer Sie wollen). Ein Beispiel:

<?php
add_action( 'init', 'wpse36453_register_shortcode' );
/**
 * Registers the shortcode with add_shortcode so WP knows about it.
 */
function wpse36453_register_shortcode()
{
    add_shortcode( 'wpse36453_posts', 'wpse36453_shortcode_cb' );
}

/**
 * The call back function for the shortcode. Returns our list of posts.
 */
function wpse36453_shortcode_cb( $args )
{
    // get the posts
    $posts = get_posts(
        array(
            'numberposts'   => 3
        )
    );

    // No posts? run away!
    if( empty( $posts ) ) return '';

    /**
     * Loop through each post, getting what we need and appending it to 
     * the variable we'll send out
     */ 
    $out = '<ul>';
    foreach( $posts as $post )
    {
        $out .= sprintf( 
            '<li><a href="%s" title="%s">%s</a></li>',
            get_permalink( $post ),
            esc_attr( $post->post_title ),
            esc_html( $post->post_title )
        );
    }
    $out .= '</ul>';
    return $out;
}
chrisguitarguy
quelle
Kann ich das in header.php einfügen oder soll ich es woanders ablegen?
user385917
Das erste Beispiel kann an eine beliebige Stelle in Ihrem Thema gehen. Das zweite Beispiel, Shortcode, sollte functions.php
eingehen
Der erste Codeblock hat keine Schleife über 3 Beiträge
Murhaf Sousli
3

Eine Anleitung für diesen genauen Fall finden Sie im WordPress-Codex. Sehen Sie es hier : Ich füge den Code hier ein, weil er ziemlich kurz ist. Weitere Informationen finden Sie auf der Website wordpress.org.

<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post); ?> 
    <div>
        <?php the_date(); ?>
        <br />
        <?php the_title(); ?>   
        <?php the_excerpt(); ?>
    </div>
<?php endforeach; ?>
aseques
quelle
1

Wordpress bietet eine Funktion für diese Art von Anfrage: query_posts () .

query_posts () ist der einfachste Weg, die Standardabfrage zu ändern, die WordPress zum Anzeigen von Posts verwendet. Verwenden Sie query_posts (), um andere Beiträge anzuzeigen als diejenigen, die normalerweise unter einer bestimmten URL angezeigt werden.

Auf der Startseite werden beispielsweise normalerweise die letzten 10 Beiträge angezeigt. Wenn Sie nur 5 Beiträge anzeigen möchten (und sich nicht für die Paginierung interessieren), können Sie query_posts () wie folgt verwenden:

query_posts ('posts_per_page = 5');

Sobald Sie die Abfrage durchgeführt haben, können Sie die Beiträge nach Ihren Wünschen anzeigen.

Anto
quelle
-1
<?php $the_query = new WP_Query( 'posts_per_page=3' ); 
while ($the_query -> have_posts()) : $the_query -> the_post();?>
<?php /*html in here etc*/ the_title(); ?>
<?php endwhile;wp_reset_postdata();?>
Jon
quelle
sein Code, der die Frage beantwortet - Wie werden die letzten 3 Beiträge (letzte Beiträge) auf einer statischen Seite angezeigt? Würde es Ihnen helfen, wenn ich sagen würde: "Ich verwende normalerweise diesen Ansatz:"?
Jon