深入了解:创建自定义 WordPress 查询
今天,我们来看看WordPress 查询。尽管WordPress 已经记录了它的查询功能,但深入了解每个部分是非常令人生畏的,而且可能不切实际。这是您需要的捷径。
在这篇文章中,我们将讨论一些关于应用 WordPress 查询的实用技巧,您可能需要在主题中经常使用这些技巧。
基本 WP_Query
简而言之,WP_Query
是一个请求 WordPress 帖子和页面的类。我们可以WP_Query
在 WordPress 主题中创建一个新类来查询自定义规范中的帖子(或页面)。
首先,让我们看一下index.php
主题目录中的 ;您应该找到以下代码。
1个
2个
3个
4个
|
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <?php endwhile ; else : ?> <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p> <?php endif ; ?> |
它叫做循环。默认情况下,它显示所有已发布的帖子。
让我们看看如何使用WP_Query
. 在此示例中,我们将排除特定类别的帖子。
首先,我们WP_Query
在变量中设置一个新的。
1个
|
$my_query = new WP_Query(); |
在其中,我们可以分配要排除的类别 ID。例如:
1个
|
$my_query = new WP_Query( 'cat=-1,-5' ); //exclude category 1 and 5 |
然后,我们在循环中引用变量,如下所示。
1个
2个
3个
4个
5个
6个
7
8个
9
|
<?php if ( $my_custom_query ->have_posts() ) : while ( $my_custom_query ->have_posts() ) : $my_custom_query ->the_post(); ?> <div class = "title" > <a href= "<?php the_permalink() ;?>" ><?php the_title() ;?></a> </div> <?php endwhile ; else : ?> <p> <?php _e( 'Sorry, no posts matched your criteria.' ); ?> </p> <?php endif ; ?> |
请注意,当您有多个自定义查询时,尤其是在单个页面中,您必须将其用wp_reset_postdata()
.
使用 WP-PageNavi 分配查询
WP-PageNavi可能是在 WordPress 中添加编号分页的最受欢迎的插件。然而,大多数人在将它与 custom 一起使用时会遇到错误WP_Query
。分页根本行不通。
从 2.74 版开始,WP-PageNavi 提供了一个选项,您可以在其中分配自定义查询。以上面的自定义查询为例,我们可以进行如下操作:
1个
|
wp_pagenavi( array ( 'query' => $my_query ) ); |
…这应该可以解决错误。
缓存查询
应该注意的是,当您有多个查询时,尤其是在单个页面上,您最终会遇到多个服务器负载,这可能会影响您的网站负载性能。
优化它的方法之一是使用 Transient API。在这种情况下,我们使用它来缓存从中查询到的对象WP_Query
,并在一定时间段内存储它。
这样,我们可以通过检索和处理缓存数据来加快查询加载时间,而不是每次加载页面时都查询它。
这是一个代码示例,其中缓存存储 24 小时。
1个
2个
3个
4个
|
if ( ! ( $my_query = get_transient( 'my_query_cache' ) ) ) { $my_query = new WP_Query( 'cat=-1,-5' ); set_transient( 'my_query_cache' , $my_query , DAY_IN_SECONDS ); } |
包起来
使用WP_Query
,我们可以创建简单或更复杂的查询。如果编写自定义项WP_Query
对您来说似乎很复杂,那么有一个名为WP_Query Generator的工具可以使它变得更容易。
我希望你会发现这个技巧有用,如果你想进一步深入这个话题,下面是一些参考资料:
- WordPress 循环— WordPress Codex
- WordPress 查询— WordPress Codex
- 使用 WordPress 循环的 4 种方法— DigWP
- 使用 WordPress 自己动手缓存方法