想在 Bricks 里显示所有以某个字母(比如 A)开头的文章?这篇教程给你方案。
实现步骤
第 1 步:放大查询范围
在查询循环(Query Loop)或 Posts 元素的设置里,把 Posts per page 设为一个大于文章总数的数字。例如:站点共有 100 篇已发布文章,就把 Posts per page 设为 200(一个合理的、未来文章数量上限的估计值)。这样查询循环才会一次性取出全部文章,再由后面的代码过滤出「以指定字母开头」的那部分。
第 2 步:加入过滤代码
把下面代码加到子主题的 functions.php,或通过代码片段插件添加:
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 );
add_filter( 'bricks/posts/query_vars', function( $query_vars, $settings, $element_id ) {
if ( $element_id === 'lgbeyi' ) {
$query_vars['starts_with'] = 'A';
}
return $query_vars;
}, 10, 3 );
代码做了什么:
wpse_298888_posts_where挂在 WordPress 的posts_where过滤器上,往 SQL 查询追加一条post_title LIKE 'A%'条件——只匹配标题以指定字母开头的文章;bricks/posts/query_vars过滤器把自定义查询变量starts_with注入到指定的 Bricks 查询中,并设为'A'。
第 3 步:替换元素 ID
把代码里的 lgbeyi 替换成你自己的查询循环/Posts 元素的 Bricks ID(选中元素后,在结构面板的 ID 字段里可以看到)。
改完保存,前端就能看到标题以 A 开头的文章列表了。想匹配其他字母,把 'A' 换成对应字母即可。