跳至正文

深入了解:创建自定义 WordPress 查询

深入了解:创建自定义 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的工具可以使它变得更容易。

我希望你会发现这个技巧有用,如果你想进一步深入这个话题,下面是一些参考资料:

标签: