我创建了一个主题,其自定义帖子类型为报告
。我安装了一个与此帖子类型交互的评级插件,允许用户对报告进行评级。它将帖子评分存储在两个字段中:sum
和 count
,其中 sum 是所有评分的总和,count 是单个评分的数量。
示例:如果 5 个人对某个帖子的评分为 1、2、3、4 和 5,则 sum
将为 15
,count
将是 5
。
当用户访问报告
存档页面时,他们会看到报告
帖子类型的所有帖子的列表。但是,我想添加一个查询参数来过滤平均评分为 4 或更高的帖子。我目前正在尝试使用 pre_get_posts
Hook ,如下所示:
add_filter( 'pre_get_posts', 'filterReports' );
function filterReports( $query ) {
if( is_post_type_archive( 'reports' ) && $_GET['top'] ) {
global $wpdb;
$query = $wpdb->prepare(
"SELECT *
FROM
wp_postmeta AS sum
wp_postmeta AS count
WHERE
sum.meta_key = 'sum' AND
count.meta_key = 'count' AND
sum.meta_value / count.meta_value >= 4"
);
}
}
我不完全确定如何在上面构建我的自定义查询。任何建议将不胜感激。
最佳答案
使用下面的代码将根据您的情况工作。
add_filter( 'pre_get_posts', 'filterReports' );
function filterReports( $query ) {
if( is_post_type_archive( 'reports' ) && $_GET['top'] ) {
$reports_meta_query = $query->get('meta_query');
//Add our meta query to the original meta queries
$reports_meta_query[] = array(
'key'=>'count',
'value'=> 4,
'compare'=>'>=',
);
$query->set('meta_query',$reports_meta_query);
// somehow construct a query that checks if sum / count >= 4
}
}
关于WordPress 元查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59538099/