如何在静态页面中显示最近3个帖子(最近帖子)?

时间:2011-12-14 作者:user385917

我想在静态页面中实现类似“最近的帖子”的功能:

http://themes.codehunk.me/insignio/ (在页脚处)

如果没有小部件,我怎么能做到这一点?

5 个回复
最合适的回答,由SO网友:huckbit 整理而成

我通常使用这种方法:

wrong approach

<?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; ?>
借助@swissspidythe correct way 这是一个:

<?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 了解更多信息。

SO网友:chrisguitarguy

这有点取决于你想要什么。如果您想创建一个“帖子页面”——换句话说,创建一个新的页面模板文件——您可以在该页面上创建一个辅助循环。

The 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 */ ?>
如果您正在寻找可以放入任何页面的内容,最好的解决方案是shortcode. 您需要创建一个短代码,以获取多篇文章并将其返回到列表中(或任何您想要的内容)。例如:

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

SO网友:aseques

wordpress codex上有一个关于这个精确案例的指南。看到了吗here:我将代码粘贴在这里,因为它很短,有关更多信息,请访问wordpress。组织网站。

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

SO网友:Anto

Wordpress为此类请求提供了一个功能:query_posts().

query\\u posts()是更改WordPress用于显示帖子的默认查询的最简单方法。使用query\\u posts()显示不同于通常显示在特定URL上的帖子。

例如,在主页上,你通常会看到最近的10篇帖子。如果只想显示5篇文章(并且不关心分页),可以使用query\\u posts()如下所示:

query\\u posts(\'posts\\u per\\u page=5\');

执行查询后,可以按您想要的方式显示帖子。

SO网友:Jon
<?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();?>
结束