WordPress WP_Query() 教程
像素鱼丸
11-22
126
0

WP_Query 是 WordPress 中一个非常强大的类,用于自定义查询和获取来自数据库的内容,如文章、页面、附件等。通过使用 WP_Query 类,你可以灵活地控制查询参数,以展示特定条件下的内容,比如特定分类、标签、日期范围内的文章等。下面是一个基础的 WP_Query 教程,帮助你入门并掌握其基本用法。

1. 基本使用

在开始之前,请确保你已经对 PHP 和 WordPress 主题开发有一定的了解。

创建一个新的查询

<?php
$args = array(
    'post_type' => 'post', // 查询的文章类型,默认为 'post',也可以是 'page' 或自定义文章类型
    'category_name' => 'news', // 按分类名称查询,这里查询分类为 'news' 的文章
    'posts_per_page' => 5, // 每页显示的文章数量
);

$the_query = new WP_Query( $args );

if ( $the_query->have_posts() ) :
    while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
        <?php the_excerpt(); ?>
    <?php endwhile;
    wp_reset_postdata(); // 重置查询,恢复全局 `$wp_query` 对象
else :
    echo '没有找到相关文章。';
endif;
?>

2. 参数详解

  • post_type:指定查询的帖子类型,可以是 ‘post’, ‘page’, 或自定义文章类型。
  • category_name 或 cat:按分类查询,category_name 使用分类的别名,cat 使用分类ID。
  • tag:按标签查询,使用标签的slug。
  • posts_per_page:每页显示的文章数量。
  • paged:用于分页查询,例如 $paged = get_query_var(‘paged’) ? get_query_var(‘paged’) : 1; 然后在 $args 中加入 ‘paged’ => $paged。
  • order:排序顺序,可选值为 ‘ASC’(升序)或 ‘DESC’(降序),默认为 ‘DESC’。
  • orderby:排序依据,常见的有 ‘date’, ‘title’, ‘modified’, ‘ID’ 等。

3. 分页

当你的查询结果需要分页时,需要在查询参数中加入 ‘paged’,并在模板中使用WordPress的分页函数,如 paginate_links()。

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args['paged'] = $paged;

// ...执行查询...

// 分页链接
echo paginate_links(array(
    'prev_text' => __('上一页'),
    'next_text' => __('下一页'),
    'total' => $the_query->max_num_pages
));

4. 重置查询

使用 WP_Query 后,记得使用 wp_reset_postdata() 来重置全局 $wp_query 对象和相关的循环变量,特别是当你在主循环之外使用 WP_Query 时,这一步非常重要。

5. 高级用法

WP_Query 支持更多高级查询参数,如自定义字段查询(meta_query)、日期查询(date_query)、作者查询等。深入学习可以通过查阅WordPress官方文档的Class Reference/WP_Query部分。

通过掌握 WP_Query 的基本和高级用法,你可以更灵活地管理和展示WordPress中的内容,提升网站的定制性和用户体验。

WP_Query 的高级用法允许你进行更复杂和精细的内容查询,包括但不限于基于自定义字段的查询、多条件组合查询、日期范围查询等。下面是一些进阶特性的示例:

5.1. 自定义字段查询(Meta Query)

如果你的内容使用了自定义字段(Custom Fields),可以通过 meta_query 参数来过滤查询结果。meta_query 接受一个数组,数组中的每个元素代表一个查询条件。

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => 'color', // 自定义字段键名
            'value' => 'red', // 要匹配的值
            'compare' => '=', // 比较运算符,默认 '=',也可用 '!='、'>'、'<=' 等
            'type' => 'CHAR' // 字段类型,默认为 'NUMERIC',对于文本使用 'CHAR' 或 'BINARY'
        ),
        // 可以添加更多条件,通过 'relation' 参数设置这些条件之间的关系,如 'AND' 或 'OR'
    ),
);
$the_query = new WP_Query( $args );

5.2. 多条件组合查询

当需要根据多个条件组合查询时,可以使用 tax_query、date_query 等,并且可以在顶级参数中设置 ‘relation’ 来决定这些查询条件间的关系(默认为 ‘AND’)。

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR', // 设置内部条件间的关系为 'OR'
        array(
            'taxonomy' => 'category', // 税onomy名称
            'field' => 'slug', // 使用分类别名
            'terms' => array('news', 'reviews'), // 匹配的分类别名列表
        ),
        array(
            'taxonomy' => 'post_tag',
            'field' => 'id',
            'terms' => 123, // 根据标签ID查询
        ),
    ),
    'date_query' => array(
        array(
            'year' => 2023, // 只查询2023年的文章
        ),
    ),
);
$the_query = new WP_Query( $args );

5.3. 排序与限制

除了基本的 ‘orderby’ 和 ‘order’ 参数外,你还可以利用 ‘meta_value’, ‘meta_value_num’ 等进行更复杂的排序。

$args = array(
    'meta_key' => 'rating', // 指定用于排序的自定义字段
    'orderby' => 'meta_value_num', // 根据数值型自定义字段排序
    'order' => 'DESC', // 降序排列
);

5.4. 分页与偏移

在高级查询中处理分页和结果偏移(offset)同样重要,尤其是在创建自定义列表或无限滚动功能时。

$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$offset = 10; // 偏移量,跳过前10篇文章
$posts_per_page = 5; // 每页文章数

$args = array(
    'post_type' => 'post',
    'posts_per_page' => $posts_per_page,
    'paged' => $paged,
    'offset' => $offset,
);
$the_query = new WP_Query( $args );

5.5. 预加载(Preloading)

对于性能敏感的应用,考虑使用 WP_Query 的 no_found_rows 参数设为 true,以减少数据库查询的开销,但这会禁用分页功能。

$args = array(
    'no_found_rows' => true, // 减少查询开销,不计算总记录数,因此不能用于分页
    // 其他查询参数...
);

这些高级用法只是 WP_Query 功能的冰山一角。为了更全面地掌握其功能,建议深入阅读WordPress开发者文档,并结合实际项目需求进行实践。

收藏
打赏
WordPress 修改 RESTful API 的请求和响应
上一篇
WordPress WP_Query() 文章置顶的方法
下一篇

发表评论

像素鱼丸
147 文章
0 评论
4 喜欢
最新文章

详解 WordPress 的评论设置

好的,我们来详细梳理并总结 WordPress 中关于文章评论的两个核心控制层级:全局设置和单篇设置。理解这两者的关系(优先级)是管理网站评论的关键。 1. 全局设置 (Global Settings) —— 网站的“默认规则” 这是整个网站评论系统的总开关和默认行为准则。它决定了新发布的文章默认是什么样子的。 位置:WordPress 后台仪表盘 -> 设置 (Settings) -> […]

wp_handle_comment_submission 函数

wp_handle_comment_submission() 是 WordPress 中用于处理评论提交的核心函数之一。它通常在用户提交评论时被调用,负责验证和处理评论数据,并最终将评论插入到数据库中。 ✅ 函数作用 wp_handle_comment_submission() 的主要功能是: 验证用户提交的评论数据(如评论内容、用户名、邮箱等) 检查是否为垃圾评论(通过 Akismet 或其他过 […]

Mirage 主题 v2.89.0 发布

Mirage 主题 v2.89.0 发布 feat 懒加载图片增加灰色背景颜色 refactor 移除一些无用的js文件 fix 优化卡片列表样式 feat 如果设置里删除logo,就直接显示网站名称 fix 修复pc下拉菜单宽度的一个样式bug fix 修复未登录用户取消喜欢时产生的一个错误 fix 优化 wp_vt_star 表结构 下载地址:https://gitee.com/vthemec […]

WordPress set_transient()使用方法和实现

set_transient() 是 WordPress 中用于设置临时数据的函数,它允许你将数据存储在缓存中,这些数据会在指定的时间后自动过期。它是 WordPress 提供的 transient API 的一部分,常用于缓存数据库查询、API 响应或其他计算密集型操作的结果。 一、基本概念 1. 什么是 Transient? Transient 是 WordPress 中的一种缓存机制,类似于 […]
生成中...
扫描二维码
扫描二维码
用户登录