วิธีการแสดง 3 กระทู้ล่าสุด (โพสต์ล่าสุด) ในหน้าคงที่?


คำตอบ:


25

ฉันมักจะใช้วิธีนี้:

วิธีการที่ผิด

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

ด้วยความช่วยเหลือของ @swissspidy วิธีที่ถูกต้องคือวิธีนี้:

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

ดู@codexสำหรับข้อมูลเพิ่มเติม


2
ฉันชอบที่จะอ้างอิงถึงwordpress.stackexchange.com/a/1755/12404เพื่อแสดงว่าทำไมการใช้query_posts()จึงเป็นแนวคิดที่ไม่ดี
swissspidy

4

มันขึ้นอยู่กับว่าคุณจะทำอะไร หากคุณต้องการทำ "หน้าโพสต์" - คำอื่น ๆ ให้สร้างไฟล์เทมเพลตหน้าใหม่ - คุณสามารถสร้างลูปรองในหน้านั้นได้

Codexมีตัวอย่างของสิ่งนี้และนี่เป็นอีกตัวอย่างที่ถูกถอดออกมามาก

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

หากคุณกำลังมองหาบางสิ่งบางอย่างที่คุณสามารถวางลงในหน้าเว็บใด ๆ ทางออกที่ดีที่สุดจะเป็นรหัส คุณจะต้องสร้างรหัสย่อที่ดึงข้อความจากหลาย ๆ โพสต์และส่งกลับไปยังรายการ (หรืออะไรก็ตามที่คุณต้องการ) ตัวอย่าง:

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

ฉันสามารถใส่ลงใน header.php หรือฉันควรใส่ที่อื่นได้ไหม
user385917

ตัวอย่างแรกสามารถไปได้ทุกที่ในธีมของคุณ รหัสfunctions.php
ย่อ

บล็อกแรกของรหัสไม่ได้ห่วงมากกว่า 3 โพสต์
Murhaf Sousli

3

มีคำแนะนำสำหรับกรณีที่แม่นยำนี้ที่ wordpress codex ดูที่นี่ : ฉันวางรหัสที่นี่เพราะค่อนข้างสั้นสำหรับข้อมูลเพิ่มเติมไปที่เว็บไซต์ 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 ให้ฟังก์ชั่นสำหรับชนิดของการร้องขอว่าquery_posts ()

query_posts () เป็นวิธีที่ง่ายที่สุดในการแก้ไขคิวรีเริ่มต้นที่ WordPress ใช้เพื่อแสดงโพสต์ ใช้ query_posts () เพื่อแสดงโพสต์ที่แตกต่างจากที่ปกติจะปรากฏที่ URL ที่ระบุ

ตัวอย่างเช่นในหน้าแรกคุณจะเห็น 10 โพสต์ล่าสุด หากคุณต้องการแสดงเพียง 5 โพสต์ (และไม่สนใจเรื่องการแบ่งหน้า) คุณสามารถใช้ query_posts () ดังนี้:

query_posts ('posts_per_page = 5');

เมื่อคุณทำแบบสอบถามแล้วคุณสามารถแสดงบทความตามที่คุณต้องการ


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

รหัสที่ตอบคำถาม - วิธีการแสดง 3 โพสต์ล่าสุด (โพสต์ล่าสุด) ในหน้าคงที่? มันจะช่วยคุณได้ไหมถ้าฉันพูดว่า - "ฉันมักจะใช้วิธีนี้:"
Jon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.