当前位置:

WordPress网站实现query_posts查询结果分页

WordPress网站query_posts是用于从网站按照条件查询得到需要的结果。query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为如此,query_posts函数仅用于修改主页循环(Loop),而不是在页面上生成次级循环。

如果你希望在主循环外另外生 成循环,应该新建独立的WP_Query对象,用这些对象生成循环。在主循环外的循环上使用query_posts会导致主循环运行偏差,并可能在页面上 显示出你不希望看到的内容。

当我们使用query_posts查询得到的结果很多的情况下就需要进行分页。实现query_posts查询结果分页的代码如下:


<?php
$args = array(
'post_type' => 'post',
'post_status'=>'publish',
'meta_query' => $metaArray,
'cat' =>$cat_name,
'paged'=>get_query_var('paged'),
'order' => 'date',
'orderby' =>'DESC'
);
}
//查询文章
$query = new WP_Query( $args );?>
<?php while ($query->have_posts()) : $query->the_post(); ?>
<li class="clearfix"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>

在循环参数里添加'paged'=>get_query_var('paged'),可以调用网站后台设置的每页显示条数进行显示并分页。

除了使用之外,还可以使用WP_Query函数查询。代码如下:


<?php $myqueryargss = array(
'post_type' => 'post',
'posts_per_page' => 9(每页的条数),
'orderby'=> 'date',
'category_name'=>'promotion',(分类名称)
'order' => 'ASC',
); ?>
<?php $myquerys= new WP_Query( $myqueryargss );?>
<?php if ( $myquerys->have_posts() ): ?>
<?php while ( $myquerys->have_posts() ) : $myquerys->the_post(); ?>
<?php if ( $myquerys->current_post < 9) : ?>
<li> <b>·</b><a href="<?php the_permalink(); ?>" target="_blank"> <?php echo mb_strimwidth(get_the_title(), 0, 26, '...'); ?></a></li>
<?php endif; ?>
<?php endwhile; ?>
<?php endif; ?>
<?php wp_reset_postdata();?>

wp_query是一个wordpress用于复杂请求的的一个类,看到query懂开发的人就会反应这个是数据库查询的一个类,这个类可谓是非常有用的,可以帮助我们做很多复杂的查询。

wp_query的使用方法也很简单:

查询单个作者的文章


$query = new WP_Query( 'author=123' );

根据用户名查找


$query = new WP_Query( 'author_name=rami' );

查询多个人的文章


$query = new WP_Query( 'author=2,6,17,38' );

查询不属于某个人的文章 可以通过减号“-”来排除某位作者。


$query = new WP_Query( 'author=-12' );

按分类ID


$query = new WP_Query( 'cat=4' );

查询某个分类下的文章(包含它的子分类)


$query = new WP_Query( 'category_name=staff' );

查询某个分类下的文章(不包含它的子分类)


$query = new WP_Query( 'category__in=4' );

ID 类似的,查询多个分类下的文章


$query = new WP_Query( 'cat=2,6,17,38' );

slug 类似的,查询多个分类下的文章


$query = new WP_Query( 'category_name=staff,news' );

不包含某个分类


$query = new WP_Query( 'cat=-12,-34,-56' );

查询同时属于多个分类的文章


$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) ); // 2 and 6
$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) ); // 2 or 6

通过标签查询

可通过标签查询的条件包括:tag, tag_id, tag__and, tag__in, tag__not_in, tag_slug__and, tag_slug__in。

对应到上面分类的查询方法,不难理解每个条件如何使用,我不一一举例了。(注意:名字中没有slug的,用tag的id查询)。

简单使用示例:


<?php
// 调用的分类4,可以修改分类id 显示的前两篇文章,可以修改显示篇数
$where = array('cat' =>'4','posts_per_page' =>'2',);
$the_query = new WP_Query($where);
// 开始循环
if ( $the_query->have_posts() ) {//如果找到了结果,便输出以下内容
echo '<ul>';
while ( $the_query->have_posts() ) {//再次判断是否有结果
$the_query->the_post();//不用问为什么,每次都要写这个;

?>

<li><a href="<?php the_permalink();?>"><?php the_title();?></a></li>

<?php
}
echo '</ul>';
} else {
// 如果没有找到任何结果,就输出这个
}
wp_reset_postdata();//不用问为什么,每次都记得写就好
?>

简单示例:


<?php
$args = array(
// 用于查询的参数或者参数集合
);

// 自定义查询
$the_query = new WP_Query( $args );

// 判断查询的结果,检查是否有文章
if ( $the_query->have_posts() ) :

// 通过查询的结果,开始主循环
while ( $the_query->have_posts() ) :
$the_query->the_post(); //获取到特定的文章

// 要输出的内容,如标题、日期等

endwhile;
endif;

// 重置请求数据
wp_reset_postdata();
?>

wp_query常用的一些参数:

作者参数


'author' => '1,2,3,', //(int) - use author id [use minus (-) to exclude authors by ID ex. 'author' => '-1,-2,-3,']
'author_name' => 'luetkemj', //(string) - use 'user_nicename' (NOT name)
'author__in' => array( 2, 6 ), //(array) - use author id (available with Version 3.7).
'author__not_in' => array( 2, 6 ), //(array)' - use author id (available with Version 3.7).

分类参数


'cat' => 5,//(int) - use category id.
'category_name' => 'staff, news', //(string) - Display posts that have these categories, using category slug.
'category_name' => 'staff+news', //(string) - Display posts that have "all" of these categories, using category slug.
'category__and' => array( 2, 6 ), //(array) - use category id.
'category__in' => array( 2, 6 ), //(array) - use category id.
'category__not_in' => array( 2, 6 ), //(array) - use category id.

标签参数


'tag' => 'cooking', //(string) - use tag slug.
'tag_id' => 5, //(int) - use tag id.
'tag__and' => array( 2, 6), //(array) - use tag ids.
'tag__in' => array( 2, 6), //(array) - use tag ids.
'tag__not_in' => array( 2, 6), //(array) - use tag ids.
'tag_slug__and' => array( 'red', 'blue'), //(array) - use tag slugs.
'tag_slug__in' => array( 'red', 'blue'), //(array) - use tag slugs.

分类参数(自定义分类法)


'tax_query' => array( //(array) - use taxonomy parameters (available with Version 3.1).
'relation' => 'AND', //(string) - Possible values are 'AND' or 'OR' and is the equivalent of running a JOIN for each taxonomy
array(
'taxonomy' => 'color', //(string) - Taxonomy.
'field' => 'slug', //(string) - Select taxonomy term by ('id' or 'slug')
'terms' => array( 'red', 'blue' ), //(int/string/array) - Taxonomy term(s).
'include_children' => true, //(bool) - Whether or not to include children for hierarchical taxonomies. Defaults to true.
'operator' => 'IN' //(string) - Operator to test. Possible values are 'IN', 'NOT IN', 'AND'.
),
array(
'taxonomy' => 'actor',
'field' => 'id',
'terms' => array( 103, 115, 206 ),
'include_children' => false,
'operator' => 'NOT IN'
)
),

文章和页面参数


'name' => 'hello-world', //(string) - use post slug.
'page_id' => 1, //(int) - use page id.
'pagename' => 'sample-page', //(string) - use page slug.
'pagename' => 'contact_us/canada', //(string) - Display child page using the slug of the parent and the child page, separated ba slash
'post_parent' => 1, //(int) - use page id. Return just the child Pages. (Only works with heirachical post types.)
'post_parent__in' => array(1,2,3) //(array) - use post ids. Specify posts whose parent is in an array. NOTE: Introduced in 3.6
'post_parent__not_in' => array(1,2,3), //(array) - use post ids. Specify posts whose parent is not in an array.
'post__in' => array(1,2,3), //(array) - use post ids. Specify posts to retrieve. ATTENTION If you use sticky posts, they will be included (prepended!) in the posts you retrieve whether you want it or not. To suppress this behaviour use ignore_sticky_posts
'post__not_in' => array(1,2,3), //(array) - use post ids. Specify post NOT to retrieve.

查询设置了密码的文章


'has_password' => true, //(bool) - available with Version 3.9
'post_password' => 'multi-pass', //(string) - show posts with a particular password (available with Version 3.9)

类型状态参数


'post_type' => array( //(string / array) - use post types. Retrieves posts by Post Types, default value is 'post';
'post', // - a post.
'page', // - a page.
'revision', // - a revision.
'attachment', // - an attachment. The default WP_Query sets 'post_status'=>'published', but atchments default to 'post_status'=>'inherit' so you'll need to set the status to 'inherit' or 'any'.
'my-post-type', // - Custom Post Types (e.g. movies)
),

'post_type' => 'any', // - retrieves any type except revisions and types with 'exclude_from_search' set to true.
'post_status' => array( //(string / array) - use post status. Retrieves posts by Post Status, default value i'publish'.
'publish', // - a published post or page.
'pending', // - post is pending review.
'draft', // - a post in draft status.
'auto-draft', // - a newly created post, with no content.
'future', // - a post to publish in the future.
'private', // - not visible to users who are not logged in.
'inherit', // - a revision. see get_children.
'trash' // - post is in trashbin (available with Version 2.9).
),

'post_status' => 'any', // - retrieves any status except those from post types with 'exclude_from_search' set to true.

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关教程

  • 在自己做网站论 坛的公司模板制作的课程中,跟大家讲了一个分页插件,那就是wordpress分页插件wp-page-numbers,这个插件非常的棒,如果我们网站的内容很
  • 在使用谷歌管理员工具时发现wordpress博客列表文章分页重复56页,肯定是对seo十 分不利。我们都知道,wordpress分页调用title标签在wordpress头部模
  • 如果一篇长文章的文字和图片都在一个页面显示,加载起来会很慢,于是想分成几个页面,我用的插件是Pagebar这个wordpress必备插件!网上很多都是关于
  • WordPress网站query_posts是用于从网站按照条件查询得到需要的结果。query_posts()查询函数决定了哪些文章出现在WordPress 主 循环(loop)中,正因为
  • 使用wordpress程序做网站时,WordPress文章如果太长的话,一个是影响阅读,再一个是影响网页载入速度,特别是对使用了很多图片的文章,更有分页的必要
  • 随着自己做网站的内容越来越多,分类目录就需分页,每一页显示10篇内容,100篇文章就可以分10个页面。分类分页就需要安装wordpress分页插件wp-page-nu
  • 我们使用WordPress建网站,每个分类每页的文章数量是固定的,全部受后台的控制。但在实际做网站时,往往需要不同的分类下每页显示不同的文章,然后进
  • 使用wordpress建站,同一个分类目录下有多个模块,需要设置多个分页器,请问如何能做到各个分页器能够不互相干扰?下面介绍一下操作步骤。步骤如下:
  • 对于分页,大多情况下我们在用在列表页面的,当一个列表分类下的文章数量过多的时候,我们需要通过wordpress分页插件来实现让用户在多个页面来查看。
  • 很多学做网站论坛的VIP学员在学习企业网站制作教程时,按照课程制作出了企业网站,但在发布自己的产品图片时,分类页的分页却现了错误,第一页正常,