我正在使用此代码显示我在 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
号码,但没有任何反应。怎么了?
有什么建议吗?
答案 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;
}
只需用我的代码替换你的代码,并确保添加循环元素。
还有一件事,请记住,如果您在页面上运行任何自定义查询,并且您没有重置该查询,它将影响该页面上的任何其他查询,即使是此短代码,因此请始终确保重置所有完成后自定义查询