2014-08-28 66 views
0

我正在使用此代码显示最近的帖子,我在smashingmagazine网站发现的短代码。这不是正确的方式,我的意思是当我指定要显示的帖子数量时,它只显示一个帖子和我指定的每个数字。WordPress的短代码显示不正确的帖子数

下面的代码:

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数量,但没有任何反应。怎么了?

有什么建议吗?

+0

'$ return_string'在每次迭代循环时都会被覆盖,所以它只会从最后一行获取结果。将其更改为'$ return_string。='连续串联字符串,生成一长串链接。 – Ohgodwhy 2014-08-28 03:26:34

+0

好的,我修复了这部分,但现在帖子的数量仍然是错误的,当我把'showposts'=> 1,它显示6个职位,当我把2显示7职位,当我把3显示8职位! !这里发生了什么? – Komeyl94 2014-08-28 03:49:57

回答

0

就在我开始之前,从不使用query_posts来构造或修改任何类型的查询。它在许多情况下彻底失败,特别是分页,并打破主查询,这是你永远不应该做的。

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

此外,showposts已经很久以前deprerciated并已替换为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;  

} 

只需更换您的与我的代码,并确保您添加您的循环元素。

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