You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过WP_Query筛选用户已设置自定义摘要的文章?

仅展示已设置手动摘要的文章的最优方案

嘿,这个需求我之前在项目里也碰到过!确实WP_Query没有直接的参数来筛选有手动设置的摘要的文章,但不用直接上WPDB或者全量修改SQL,用WordPress的过滤器就能优雅解决,还能保留WP_Query的所有内置功能(比如分页、缓存、权限校验)。

核心思路

WordPress里手动设置的摘要存在wp_posts表的post_excerpt字段里,我们可以通过posts_where过滤器给WP_Query的SQL添加一个条件,只返回post_excerpt不为空且不是自动生成的摘要的文章(自动生成的摘要不会存在这个字段里,只有手动输入的才会存储)。

具体代码实现

// 添加过滤器,筛选有手动摘要的文章
add_filter( 'posts_where', 'filter_posts_with_manual_excerpt' );
function filter_posts_with_manual_excerpt( $where ) {
    global $wpdb;
    // 添加条件:post_excerpt 不为空字符串
    $where .= " AND {$wpdb->posts}.post_excerpt != '' ";
    return $where;
}

// 执行WP_Query查询
$query = new WP_Query( array(
    'post_type' => 'post', // 可以替换成你需要的文章类型
    'posts_per_page' => 10,
    // 其他WP_Query参数正常添加
) );

// 记得移除过滤器,避免影响后续的其他查询
remove_filter( 'posts_where', 'filter_posts_with_manual_excerpt' );

// 循环输出文章
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // 你的文章输出逻辑
        the_title();
        the_excerpt();
    }
    wp_reset_postdata();
}

为什么这个方案更优?

  • 完全基于WordPress的原生机制,不会破坏WP_Query的缓存和分页功能
  • 不需要直接操作WPDB,减少了手写SQL出错的风险
  • 可以灵活组合其他WP_Query参数(比如分类、标签、文章类型等),扩展性更强

如果你的场景里还需要排除某些特殊情况(比如摘要全是空格的情况),可以把条件改成:

$where .= " AND TRIM({$wpdb->posts}.post_excerpt) != '' ";

这样就能确保只返回真正有手动输入摘要的文章啦!

内容的提问来源于stack exchange,提问作者shramee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:24:24