Bagaimana cara menampilkan 3 posting terakhir (posting terbaru) di halaman statis?

Jawaban:

24

Saya biasanya menggunakan pendekatan ini:

pendekatan yang salah

<?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; ?>

Dengan bantuan @swissspidy cara yang benar adalah ini:

<?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; ?>

Lihat @ codex untuk info lebih lanjut.

omong kosong
sumber
2
Saya suka merujuk ke wordpress.stackexchange.com/a/1755/12404 untuk menunjukkan mengapa menggunakan query_posts()hampir selalu merupakan ide yang buruk.
swissspidy
4

Ini tergantung pada apa yang Anda inginkan. Jika Anda ingin melakukan "halaman posting" - dengan kata lain, buat file template halaman baru - Anda dapat membuat loop sekunder pada halaman itu.

Kodeks ini memiliki contohnya dan ini contoh lain yang sangat sederhana.

<?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 */ ?>

Jika Anda mencari sesuatu yang dapat Anda masukkan ke halaman mana pun, solusi terbaik adalah kode pendek . Anda perlu membuat kode pendek yang mengambil beberapa posting dan mengembalikannya dalam daftar (atau apa pun yang Anda inginkan). Sebuah contoh:

<?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
sumber
Bisakah saya meletakkan ini di header.php atau haruskah saya letakkan di tempat lain?
user385917
Contoh pertama dapat digunakan di mana saja dalam tema Anda. Contoh kedua, shortcode, harus masukfunctions.php
chrisguitarguy
blok kode pertama tidak memiliki untuk mengulang lebih dari 3 posting
Murhaf Sousli
3

Ada panduan untuk kasus ini di codex wordpress. Lihat di sini : Saya rekatkan kode di sini karena cukup pendek, untuk informasi lebih lanjut, kunjungi situs 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
sumber
1

Wordpress menyediakan fungsi untuk permintaan semacam itu: query_posts () .

query_posts () adalah cara termudah untuk mengubah kueri default yang digunakan WordPress untuk menampilkan posting. Gunakan query_posts () untuk menampilkan posting yang berbeda dari yang biasanya muncul di URL tertentu.

Misalnya, di beranda, Anda biasanya melihat 10 posting terbaru. Jika Anda hanya ingin menampilkan 5 posting (dan tidak peduli tentang pagination), Anda dapat menggunakan query_posts () seperti:

query_posts ('posts_per_page = 5');

Setelah melakukan kueri, Anda dapat menampilkan posting seperti yang Anda inginkan.

Anto
sumber
-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
sumber
kode yang menjawab pertanyaan - Bagaimana menampilkan 3 posting terakhir (posting terbaru) di halaman statis? Apakah akan membantu Anda jika saya berkata - "Saya biasanya menggunakan pendekatan ini:"?
Jon