WordPress开发,文章自定义查询可以说是必备技能。WordPress提供了WP_Query类足以满足各种自定义查询需求。
其基础用法如下:
// The Query
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
注意:在循环中使用了 the_post, the_post使用了全局变量$post,所以循环结束,必须使用 wp_reset_postdata 重置$post,否则会发生数据混乱。
如果,我们只需要查询出数据,而不是直接在主题开发的循环中使用,该怎么办呢?
那就需要使用 WP_Query 的 query 方法。
$query = new WP_Query();
$post_list = $query->query($args);
$post_list 就是 WP_Post 对象数组。
另外,也可以使用 get_posts 函数。get_posts 函数源码如下:
function get_posts( $args = null ) {
$defaults = array(
'numberposts' => 5,
'category' => 0,
'orderby' => 'date',
'order' => 'DESC',
'include' => array(),
'exclude' => array(),
'meta_key' => '',
'meta_value' => '',
'post_type' => 'post',
'suppress_filters' => true,
);
$parsed_args = wp_parse_args( $args, $defaults );
if ( empty( $parsed_args['post_status'] ) ) {
$parsed_args['post_status'] = ( 'attachment' === $parsed_args['post_type'] ) ? 'inherit' : 'publish';
}
if ( ! empty( $parsed_args['numberposts'] ) && empty( $parsed_args['posts_per_page'] ) ) {
$parsed_args['posts_per_page'] = $parsed_args['numberposts'];
}
if ( ! empty( $parsed_args['category'] ) ) {
$parsed_args['cat'] = $parsed_args['category'];
}
if ( ! empty( $parsed_args['include'] ) ) {
$incposts = wp_parse_id_list( $parsed_args['include'] );
$parsed_args['posts_per_page'] = count( $incposts ); // Only the number of posts included.
$parsed_args['post__in'] = $incposts;
} elseif ( ! empty( $parsed_args['exclude'] ) ) {
$parsed_args['post__not_in'] = wp_parse_id_list( $parsed_args['exclude'] );
}
$parsed_args['ignore_sticky_posts'] = true;
$parsed_args['no_found_rows'] = true;
$get_posts = new WP_Query;
return $get_posts->query( $parsed_args );
}
可以看出 get_posts 就是对 WP_Query 的封装调用。
-
WordPress函数:comment_excerpt 显示当前评论的摘要WordPress如何显示当前评论的摘要
-
WordPress函数:comment_form_title 根据评论回复状态显示文本WordPress 如何 根据评论回复状态显示文本
-
WordPress函数:comment_form 输出一个完整的评论表单WordPress如何输出一个完整的评论表单
-
WordPress函数:comment_ID 显示当前评论的ID。WordPress 如何显示当前评论的ID。
-
WordPress函数:comment_id_fields 输出用于回复评论的隐藏输入HTMLWordPress 如何输出用于回复评论的隐藏输入HTML
-
WordPress函数:wp_list_comments 显示评论列表WordPress如何显示评论列表
暂无评论,抢个沙发...