标题以特定字母开头的WP查询

时间:2018-03-26 作者:Mark

我想用WP\\u Query()搜索帖子,并只选择以特定字母开头的帖子。我发现了一堆4.4之前的带有过滤器的旧帖子,但从4.4开始,在WP\\u查询函数中添加了一个标题搜索。

 $q = new WP_Query( array(\'post_type\'=>\'post\',\'title\'=>\'This Song Title\') );
这将只返回标题为“This Song title”的帖子的精确匹配。

我想做的是返回所有以字母“T”开头的帖子,在本例中

我还发现了这篇帖子,但一直没有得到回复。这是公认的答案,但我看不出它是如何回答这个问题的。How to limit search to first letter of title?

其他查询功能(如注释和元搜索)有一个“比较”,可以向查询中添加like%,但标题似乎没有。

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

这是不可能的WP_Query 直接开箱即用,但使用posts_where 用于查找自定义参数的筛选器WP_Query, 可以添加此功能。

假设starts_with 是要使用的参数的名称,可以筛选posts_where 添加WHERE 子句将结果限制为以给定值开头的结果,如果starts_with 已在查询上设置:

function wpse_298888_posts_where( $where, $query ) {
    global $wpdb;

    $starts_with = esc_sql( $query->get( \'starts_with\' ) );

    if ( $starts_with ) {
        $where .= " AND $wpdb->posts.post_title LIKE \'$starts_with%\'";
    }

    return $where;
}
add_filter( \'posts_where\', \'wpse_298888_posts_where\', 10, 2 );
添加此过滤器后,我们可以查询如下帖子:

$query = new WP_Query( array(
    \'starts_with\' => \'M\',
) );
将返回以“开始”开头的所有帖子;M";。

如果希望能够筛选主查询,也可以在中使用此参数pre_get_posts:

function wpse_298888_pre_get_posts( $query ) {
    if ( $query->is_main_query() ) {
        $query->set( \'starts_with\', \'M\' );
    }
}
add_action( \'pre_get_posts\', \'wpse_298888_pre_get_posts\' );

结束

相关推荐

Search Media by taxonomy

如何根据前端的分类法搜索媒体?以下查询显示我希望通过搜索返回的内容:$args = array( \'post_type\' => \'attachment\', \'post_status\' => \'inherit\', // for PDFs \'post_mime_type\' => \'application/pdf\', // if you need PDFs from a specific media c