Wordpress短代码显示错误的帖子数量

时间:2014-08-28 03:11:25

标签: php wordpress shortcode

我正在使用此代码显示我在 smashingmagazine 网站上找到的短代码的最新帖子。它的工作方式不正确,我的意思是当我指定要显示的帖子数量时,它只显示一个帖子,其中包含我指定的每个号码。

以下是代码:

function recent_posts_function() {
query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));
  if (have_posts()) :
    while (have_posts()) : the_post();
       $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
    endwhile;
  endif;
wp_reset_query();
return $return_string;
}

function register_shortcodes(){
   add_shortcode('recent-posts', 'recent_posts_function');
}

add_action( 'init', 'register_shortcodes');

我已经更改了showposts号码,但没有任何反应。怎么了?

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

在我开始之前,永远不要使用query_posts来构造或修改任何类型的查询。它在许多场景中完全失败,特别是分页,并打破了主要的查询,你永远不应该这样做。

如果您需要构建自定义查询,请使用WP_Query

此外,showposts很久以前已经被解雇,并已被posts_per_page取代

您应该阅读Shortcode API,这应该会概述正在发生的事情以及应该如何使用和创建短代码。这里需要记住的一件重要事情是,应该返回短代码内容,而不是回复内容。这也是一个tutorial,对我有很大的帮助。

这里只是一个快速提示,短代码应该总是插入插件。如果您还没有创建一个,请阅读MU-Plugin (must-use-plugin)

构建短代码的正确方法如下:(您的短代码将为[my-shortcode])这是未经测试的

add_shortcode( 'my-shortcode', 'my_custom_query_shortcode' );
function my_custom_query_shortcode( $atts ) {
    ob_start();

$query = new WP_Query(array('orderby' => 'date', 'order' => 'DESC' , 'posts_per_page' => 1));

 if ( $query->have_posts() ) : 
   while($query->have_posts()) : $query->the_post();

        //YOUR LOOP ELEMENTS

      <?php 
      endwhile;

     $myvariable = ob_get_clean();

     return $myvariable;

 endif;    

}

只需用我的代码替换你的代码,并确保添加循环元素。

还有一件事,请记住,如果您在页面上运行任何自定义查询,并且您没有重置该查询,它将影响该页面上的任何其他查询,即使是此短代码,因此请始终确保重置所有完成后自定义查询