要实现这一点,您可以从实现以下解决方案开始this question. 这将允许您按帖子的第一个字母过滤帖子(无需自定义元):
假设starts_with
是要使用的参数的名称,可以筛选posts_where
添加WHERE
子句将结果限制为以给定值开头的结果,如果starts_with
已在查询上设置:
function wpse_298888_posts_where( $where, $query ) {
global $wpdb;
$starts_with = $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”开头的帖子。
要支持通过URL以这种方式过滤post类型存档,只需注册starts_with
作为查询变量:
function wpse_346729_query_vars( $query_vars ) {
$query_vars[] = \'starts_with\';
return $query_vars;
}
add_filter( \'query_vars\', \'wpse_346729_query_vars\' );
这样做意味着如果
starts_with
参数通过URL传递,它将在主查询上设置,这将导致
posts_where
要应用于当前主查询的筛选器。
http://example.com/?post_type=staff&starts_with=A