Làm cách nào để hiển thị 3 bài đăng cuối cùng (bài đăng gần đây) trong một trang tĩnh?


Câu trả lời:


23

Tôi thường sử dụng phương pháp này:

tiếp cận sai

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

Với sự giúp đỡ của @swissspidy , cách chính xáccách này:

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

Xem @codex để biết thêm.


2
Tôi muốn tham khảo wordpress.stackexchange.com/a/1755/12404 để cho thấy tại sao sử dụng query_posts()hầu như luôn luôn là một ý tưởng tồi.
swissspidy

4

Nó phụ thuộc vào những gì bạn sẽ làm. Nếu bạn muốn thực hiện "trang bài viết" - nói cách khác, hãy tạo tệp mẫu trang mới - bạn có thể tạo một vòng lặp phụ trên trang đó.

Codex có một ví dụ về điều này và đây là một ví dụ khác, rất đơn giản.

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

Nếu bạn đang tìm kiếm thứ gì đó mà bạn có thể thả vào bất kỳ trang nào, giải pháp tốt nhất sẽ là một shortcode . Bạn sẽ cần phải tạo một shortcode tìm nạp một số bài đăng và trả lại chúng trong một danh sách (hoặc bất cứ điều gì bạn muốn). Một ví dụ:

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

Tôi có thể đặt cái này vào header.php không hay tôi nên đặt nó ở nơi khác?
dùng385917

Ví dụ đầu tiên có thể đi bất cứ nơi nào trong chủ đề của bạn. Ví dụ thứ hai, shortcode, nên vàofunctions.php
chrisguitarguy

khối mã đầu tiên không có vòng lặp trên 3 bài đăng
Murhaf Sousli

3

Có một hướng dẫn cho trường hợp chính xác này tại codex wordpress. Xem nó ở đây : Tôi dán mã ở đây vì nó khá ngắn, để biết thêm thông tin hãy truy cập trang web 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; ?>

1

Wordpress cung cấp một hàm cho loại yêu cầu đó: query_posts () .

query_posts () là cách dễ nhất để thay đổi truy vấn mặc định mà WordPress sử dụng để hiển thị các bài đăng. Sử dụng query_posts () để hiển thị các bài đăng khác với những bài viết thường hiển thị tại một URL cụ thể.

Ví dụ: trên trang chủ, thông thường bạn sẽ thấy 10 bài đăng mới nhất. Nếu bạn muốn chỉ hiển thị 5 bài đăng (và không quan tâm đến phân trang), bạn có thể sử dụng query_posts () như vậy:

query_posts ('Post_per_page = 5');

Khi bạn đã thực hiện truy vấn, bạn có thể hiển thị các bài đăng theo cách bạn muốn.


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

mã của nó trả lời câu hỏi - Làm thế nào để hiển thị 3 bài đăng cuối cùng (bài đăng gần đây) trong một trang tĩnh? Nó sẽ giúp bạn nếu tôi nói - "Tôi thường sử dụng phương pháp này:"?
Jon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.