前言
当筛选源未知或由第三方 provider 处理时,筛选为文章生成的索引行。钩子名称中的 {$source} 部分对应于筛选源(例如 wcField 或自定义源)。每行必须包含 filter_id、object_id、object_type、filter_value、filter_value_display、filter_value_id 和 filter_value_parent。
用法
将代码加入子主题的 functions.php:
add_filter( 'bricks/query_filters/index_post/my_custom_source', function( $rows, $post_id, $elements ) {
foreach ( $elements as $element ) {
// Calculate filter value for this post
$value = get_post_meta( $post_id, 'my_custom_field', true );
if ( $value ) {
$rows[] = [
'filter_id' => $element['filter_id'],
'object_id' => $post_id,
'object_type' => 'post',
'filter_value' => $value,
'filter_value_display' => $value,
'filter_value_id' => 0,
'filter_value_parent' => 0,
];
}
}
return $rows;
}, 10, 3 );
参数
$rows(array):将被插入数据库的索引行数组。默认为 []。$post_id(int):正在被索引的文章 ID。$elements(array):以该文章为目标的筛选元素数组。
示例代码
筛选返回值
add_filter( 'bricks/query_filters/index_post/my_custom_source', function( $rows, $post_id, $elements ) {
foreach ( $elements as $element ) {
// Calculate filter value for this post
$value = get_post_meta( $post_id, 'my_custom_field', true );
if ( $value ) {
$rows[] = [
'filter_id' => $element['filter_id'],
'object_id' => $post_id,
'object_type' => 'post',
'filter_value' => $value,
'filter_value_display' => $value,
'filter_value_id' => 0,
'filter_value_parent' => 0,
];
}
}
return $rows;
}, 10, 3 );
根据条件短路返回原值
根据条件跳过或修改返回值:
add_filter( 'bricks/query_filters/index_post/{source}', function( $value, $rows ) {
if ( is_admin() ) { return $value; }
// TODO: custom logic here
return $value;
} );
补充说明
更多细节可参考 官方文档。