如何在WordPress中使用WP_Query类?
已发表: 2024-08-09什么是 WP_Query?
WP_Query
是 WordPress 中功能强大的 PHP 类,它允许您构建对数据集的自定义查询,以检索帖子和其他内容并将其呈现在页面上。它提供了一种灵活有效的方式来与数据库交互并根据各种标准获取内容。
关于 WP_Query 的简短说明
您可能知道 WordPress 将所有网站数据(例如帖子、页面、评论或设置)存储在 MySQL 数据库中。
因此,对于访问您网站的任何人,请求都会立即发送到此数据库,检索所请求的数据,无论是要在屏幕上显示的帖子还是页面。
但您一定会惊讶地发现,在 WP_Query 的帮助下,您可以创建可以帮助您从数据库中检索特定信息的查询。因此,每当有人搜索您的内容时,WordPress 都会使用这个内置类。
毫无疑问,您仍然可以使用 SQL 来编写所有这些查询,但这相当困难,而且不是最简单的方法。另一方面,WP_Query 更容易。
WP_Query 非常有用,您可以创建自定义查询来在您的网站上显示特定内容,而无需访问者进行搜索。
简而言之,WP_Query 是一个工具,可以让开发人员更轻松地控制 WordPress 网站上显示的内容及其外观,而无需编写复杂的代码。
假设您在 WordPress 中创建了一种特殊类型的内容,称为“博客”。要在您的网站上显示这些“博客”帖子,您可以使用 WP_Query 编写特殊查询。
// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);
现在为了显示请求的查询,WP_Query 提供了快捷方式和内置函数来帮助您自定义循环。 Loop 是 WordPress 用来在页面上显示帖子的一段 PHP 代码。
WordPress 根据您在 WP_Query 中设置的条件(例如帖子类型、帖子数量和类别)处理每个帖子并设置其格式。
这个强大的工具可以帮助开发人员轻松自定义 WordPress 主题显示内容的方式,而无需编写复杂的数据库查询
如何利用 WP_Query?
现在您知道什么是 WP_Query 以及它到底做什么。让我们看看您可以利用这个强大工具的不同案例场景。
1.在WP_Query中创建循环
首先,你应该了解什么是循环。它是 WordPress 的一部分,能够高度响应从数据中获取帖子数据并将其显示在您的网站上。它主要侧重于根据主题模板决定内容的外观。
循环可以在网站上显示什么?
根据您选择的设置,循环可以显示:
- 自定义帖子类型和自定义字段
- 在主页上发布标题和简短描述
- 单个帖子的内容和评论
- 使用模板标签的各个页面的内容
为了让您更好地理解,下面是 Loop 的简单结构。
基本循环示例
<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>
- 这里,
have_posts()
函数检查是否有可用的帖子。 -
while ( have_posts() ) : the_post();
:如果有帖子,此循环将为每个帖子运行并显示其内容。
使用 WP_Query 自定义循环
有时,您不想显示所有帖子。您可以使用 WP_Query 自定义显示的内容:
<?php
// 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_query = new WP_Query( $args );
根据您设置的参数(如帖子类型、类别等)创建自定义查询。 - 运行循环:
if ( $the_query->have_posts() ) { ... }
检查是否有与您的查询匹配的帖子。如果有,它会在列表中显示每个帖子的标题。 - 重置帖子数据:
wp_reset_postdata();
确保在自定义循环运行后恢复原始发布数据。
定制选项
使用 WP_Query,您可以:
- 显示特定类别、作者或日期范围的帖子
- 显示带有某些标签或自定义字段的帖子
2. WP_Query 参数
当您想从 WordPress 网站获取特定帖子时,您需要创建 WP_Query,为此,您需要包括四个基本部分:
- 查询参数:告诉 WordPress 要检索哪些数据。
- 查询:使用参数来获取数据。
- 循环:处理并显示每个帖子。
- 数据重置后:循环运行后重置数据。
但 WP_Query 最基本的组件之一是参数(通常称为 WP_Query args),它负责提取您想要从数据库中获取的特定帖子。
非常重要的是,参数设置条件以仅显示某些帖子,而不是显示所有帖子。
论证的例子
$args
行:这是包含查询参数的位置。- 结构:将某些参数放入数组中。这是一个基本示例,
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);
具体例子
如果您想显示带有“WordPress 错误”标签的帖子,您可以像这样设置查询参数:
$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );
为什么论证很重要
- 无参数,无内容:如果您不包含 WP_Query 参数,WordPress 将不知道要显示哪些帖子。您的查询不会从数据库中获取任何内容。
3.设置WP_query参数
参数使 WP_Query 变得有用且强大。由于可用的数据库种类繁多,任何人都可以轻松过滤掉数据库搜索。
例如,当您想在 WordPress 网站上显示特定帖子时,您可以使用 WP_Query 并确保获得正确的帖子,您可以设置参数。您可能还有一个问题:什么是参数?
嗯,参数就像指令一样,告诉 WordPress 从数据库获取什么样的帖子。
常用参数示例
以下是您可以使用的一些常用参数:
- cat :显示特定类别的帖子。
- 作者:显示一位或多位特定作者的帖子。
- post_status :显示正在进行、计划、发布或删除的帖子。
- orderby :按作者、帖子类型、日期等对帖子进行排序。
- posts_per_page :设置要显示的帖子数。
- tag :显示带有特定标签的帖子。
- order :按升序或降序对帖子进行排序。
- post_type :定义是否显示帖子、页面或自定义帖子类型。
如何使用参数
如果你想显示某个类别的帖子,可以使用category_name
参数。这是一个例子:
$query = new WP_Query( array( 'category_name' => 'WordPress' ) );
这将显示“员工”类别和任何子类别中的所有帖子。
更复杂的例子
在此示例中,我们演示了如何利用不同参数中的多个值来创建复杂的自定义查询来获取您想要的确切帖子。
我们将检索属于特定类别、具有特定标签、由特定作者撰写并按日期降序排列的帖子。
$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);
$query = new WP_Query($args);
// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}
// Restore original Post Data
wp_reset_postdata();
- category__in :帮助指定我们想要来自 ID 为 5 和 10 的类别的帖子。
- tag__in :指定我们希望帖子标记为“特色”或“热门”。
- author__in :指定我们想要 ID 为 1 和 2 的作者发布的帖子。
- orderby :指定我们要按帖子的发布日期对帖子进行排序。
- order :指定我们希望帖子按降序排列(最新的在前)。
- posts_per_page :将检索到的帖子数量限制为 10。
4. 使用方法和类属性修改对象
在 WordPress 中, WP_Query
是一个特殊的 PHP 类,用于从数据库检索帖子。将其视为一种工具,可以帮助您获取想要在网站上显示的确切帖子。
什么是类属性和方法?
在 PHP 中,类可以具有属性(如变量)和方法(如函数)。这是理解它们的简单方法:
- 属性:它们就像保存信息的容器。在
WP_Query
的上下文中,属性可能包括帖子列表或找到的帖子数量等内容。 - 方法:这些就像您可以执行的工具或操作。在
WP_Query
中,方法可以帮助您检查是否有帖子、获取帖子的标题或重置查询。
可以直接更改属性吗?
不,您不能直接更改属性,即使开发人员也强烈反对这样做,但您可以选择使用方法。
方法就像官方工具或命令一样,可以帮助您遵循正确的方法。这些正是像函数一样工作的,当您对 WP_Query 的方法进行某些更改时,您还可以自定义获取的数据。
在 WP_Query 中使用方法的示例
在此示例中,reset_postdata() 函数可能是编写 WP_Query 的关键步骤。此方法将重置 $current_post 和 $post 的属性。
<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>
<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
分解:
- 创建查询:
-
$the_query = new WP_Query($args);
:它使用您提供的参数创建一个新的WP_Query
对象。
-
- 检查帖子:
-
if ($the_query->have_posts())
:它检查是否有任何基于您的查询要显示的帖子。
-
- 循环浏览帖子:
-
while ($the_query->have_posts()) : $the_query->the_post();
:它设置发布数据,以便您可以显示它。
-
- 显示帖子:
-
the_title();
和the_excerpt();
:显示当前帖子的标题和摘录。
-
- 重置帖子数据:
-
wp_reset_postdata();
:它将全局帖子数据重置为主查询的帖子。这对于避免弄乱页面的其他部分很重要。
-
您可以使用的常用方法
以下是WP_Query
中可用于处理查询的一些常用方法:
-
get_posts
:- 它的作用:检索帖子列表。
- 示例:php复制代码
$posts = get_posts(array('category' => 'news'));
-
have_posts
:- 它的作用:检查是否有任何要显示的帖子。
- 示例:php复制代码
if ($the_query->have_posts()) { // There are posts to show }
-
the_post
:- 它的作用:设置当前的发布数据。
- 示例:php复制代码
$the_query->the_post();
-
fill_query_vars
:- 它的作用:完成缺失的查询详细信息。
- 示例:php复制代码
$the_query->fill_query_vars($args);
通过向 WP_Query 提供正确的信息,您可以对其进行自定义以执行不同的任务。该方法是一种灵活且安全的调整类属性的方法。
WP_Query 与 query_posts():哪一个更可取?
下面是 WordPress 中WP_Query
与query_posts()
的详细比较表,其中包括一些要点,可以帮助您理解为什么WP_Query
通常优于query_posts()
:
特征 | WP_查询 | 查询帖子() |
---|---|---|
目的 | 创建自定义查询以从数据库检索帖子。 | 修改页面主查询(不建议一般使用)。 |
主要用途 | 非常适合创建新查询和以自定义方式显示帖子。 | 通常用于更改主查询,但不推荐。 |
推荐用途 | 是的,这是获取和显示帖子的推荐方式。 | 不,最好避免在主循环、插件和主题中使用此函数。 |
对主查询的影响 | 不影响主查询。您可以运行自定义查询而无需更改主循环。 | 完全覆盖主查询,这可能会导致冲突或意外结果。 |
重置发布数据 | 运行自定义查询后,使用wp_reset_postdata() 恢复原始查询。 | 没有等效的功能,这意味着您可能必须手动恢复主查询的发布数据。 |
处理多个查询 | 可以处理多个查询,专为复杂场景而设计。 | 仅处理一个查询并更改主查询,这对于多个查询可能会出现问题。 |
性能影响 | 通常性能更好,因为它不会改变主查询。 | 效率可能较低,并且可能由于对主查询的影响而导致问题。 |
自定义查询示例 | $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); | query_posts(array('post_type' => 'post', 'posts_per_page' => 5)); |
重置数据示例 | <?php wp_reset_postdata(); ?> | 无复位功能,如果主查询发生变化,需要手动复位。 |
使用方便 | 易于使用内置方法和函数来查询帖子和页面。 | 不太简单,如果使用不小心可能会导致问题。 |
WP_Query 用法的一些示例
为了更好地理解 WP_Query 及其实际用法,请查看下面给出的一些示例:
1.显示本周发布的最新帖子
如果您拥有良好的用户群或相当数量的网络流量,这意味着您的访问者喜欢您的内容并且希望阅读您网站上发布的最新文章。
在设计网站时,您可以在网页的专门部分中展示最近的帖子。值得庆幸的是,使用 WP_Query,您可以轻松地根据日期参数查找帖子。让我们看看如何。
<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>
在此示例中,我们创建一个 WP_Query 来查找本周发布的帖子。我们使用 WP_Query 的一个名为date_query
的特殊部分来指定我们的搜索条件。
查询的主要目的是查找本周发布的帖子。为此,我们使用 date_query 参数根据日期搜索帖子。它需要一组与日期相关的参数。
因此,当您自定义date_query
参数时,您可以获取并显示最近发布的帖子。但是,您也可以自由指定自定义值,以使查询更有效并突出显示过去一周撰写的最新文章。
2. 显示特定类别的最新帖子
您的网站访问者可能经常寻找最新信息,为了提高参与度和页面浏览量,推荐一些他们可能喜欢的更多相关帖子是一个很好的做法。
尽管如此,您可以通过多种方法在 WordPress 中链接相关帖子,WP_Query 是实现此目的的有效方法之一。对于始终发布最新内容的网站来说,这尤其是一个好方法。
例如,如果有人阅读了一篇有关 WordPress 错误的文章,WP_Query 可以帮助显示其他类似的和最近的文章。
因此,如果您想获取特定类别中的最新帖子,请使用此 WP_query,并进行一些包含您的站点信息的编辑:
<?php
// Get the current post id.
$current_post_id = get_the_ID();
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
// Setup arguments.
$args = array(
// Get category's posts.
'cat' => $current_post_first_cat_id,
// Exclude current post.
'post__not_in' => array( $current_post_id )
);
// Instantiate new query instance.
$my_query = new WP_Query( $args );
?>
3. 显示同一作者、同一类别的帖子
如果访问者喜欢您的内容,他们很可能会喜欢作者的观点、写作风格和看法。
为此,您可以使用 WP_Query 向读者推荐同一作者撰写的类似帖子。该查询将搜索由同一作者撰写的与当前帖子相同类别的帖子。
为此,我们必须创建一个特定的 WP_Query 字符串,它将查找具有相似作者和相同类别的帖子。
这是代码:
<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>
在上面的代码中,您需要将“Rahul”替换为作者姓名,将“WordPress”替换为类别名称。
4. 显示您最受欢迎的帖子
就像您为读者显示的最新或最近的帖子一样。您可能还想展示有关读者喜欢并经常参与的主题的帖子。为此,您可以使用orderby参数并将其传递给comment_count参数。
<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>
上面的 WP_Query 将查找“WordPress 错误”类别中的帖子,并根据每个帖子的评论数量过滤结果。
输出将显示评论最多的 5 个帖子,按从左到右降序排列,从参与度最高的帖子开始,到参与度最低的帖子结束。
结论
现在您已经见证了 WP_Query 的强大功能以及它如何让您轻松地在 WordPress 中执行数据库请求。此外,您还可以灵活地自定义网站并为访问者提供独特的体验。
要使用 WP_Query,您可以:
- 创建循环:显示您的帖子。
- 使用查询参数:自定义您的搜索。
- 设置特定参数:过滤结果。
- 修改类属性:用方法调整查询结果。
如果您掌握了所有这些技术,您将能够根据受欢迎程度和日期等各种因素轻松推荐特定的帖子。
这种技术有助于提高用户的参与度,增强用户体验,还可以帮助您的忠实访问者找到更多相关的内容。
如果您对 WP_Query 仍然有疑问或想添加更多我们可能错过的内容。请在下面的评论部分告诉我们。
Rahul Kumar 是一位网络爱好者和内容策略师,专门从事 WordPress 和网络托管。凭借多年的经验和对了解最新行业趋势的承诺,他制定了有效的在线策略来增加流量、提高参与度并提高转化率。拉胡尔对细节的关注以及制作引人入胜的内容的能力使他成为任何希望提高其在线形象的品牌的宝贵资产。