WordPress 元查询

标签 wordpress meta-query

我创建了一个主题,其自定义帖子类型为报告。我安装了一个与此帖子类型交互的评级插件,允许用户对报告进行评级。它将帖子评分存储在两个字段中:sumcount,其中 sum 是所有评分的总和,count 是单个评分的数量。

示例:如果 5 个人对某个帖子的评分为 1、2、3、4 和 5,则 sum 将为 15count 将是 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/

相关文章:

php - 为自定义 Woocommerce 插件存储动态值

php - 如何为 WP 多站点管理员删除 "Add Existing User"选项?

php - 我怎么说 IF class #1 on left, if class #2 on right in loop

php - 元查询比较日期

wordpress - 如何通过比较 acf 自定义字段日期值来过滤过去一年的自定义帖子

html - 使用动态内容使段落保持在底部

javascript - 在 WordPress 主题中插入 google map api key 的位置

wordpress - wp_query 和 meta_query 用于转发器字段值

mysql - meta_query,如何同时使用OR和AND关系进行搜索?