【问题标题】:wordpress $query->set by meta key valuewordpress $query->由元键值设置
【发布时间】:2016-04-22 14:08:45
【问题描述】:

我正在尝试修改帖子类型“产品”的所有查询,以仅显示产品/帖子是否具有“wholesale_price”的某个元键,元值需要大于 0。

这是我所拥有的:

add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );
function rc_modify_query_get_design_projects( $query ) {

    if($query->is_main_query() && $query->query_vars['post_type'] == 'product' ) {

    $query->set('meta_key', 'wholesale_price');
    $query->set('meta_compare', '>');
    $query->set('meta_value', '0');

}

}

由于某种原因,这仍然返回所有内容。这是正确的做事方式吗?

【问题讨论】:

  • 我认为你最后只是缺少return $query;
  • 我刚刚添加了这个,但仍然返回所有内容。
  • 好吧,那就试试这个:$query->set( 'meta_query', array( array( 'key' => 'wholesale_price', 'value' => 0, 'compare' => '>', 'type' => 'numeric' ) )); 而不是你的:$query->set('meta_key', 'wholesale_price'); $query->set('meta_compare', '>'); $query->set('meta_value', '0');

标签: wordpress


【解决方案1】:

问题在于您设置meta_query 的方法。您应该阅读WP_Query 功能,因为元查询并不那么简单。

你需要做一些更像这样的事情:

add_action( 'pre_get_posts', 'rc_modify_query_get_design_projects' );

function rc_modify_query_get_design_projects( $query ) {
    // Do not add meta arguments in admin pages
    if (is_admin()) {
        return;
    }

    if($query->is_main_query() && $query->query_vars['post_type'] == 'product' ) {
        //Get original meta query
        $meta_query = (array)$query->get('meta_query');

        // Add your criteria
        $meta_query[] = array(
                'key'     => 'wholesale_price',
                'value'   => 0,
                'compare' => '>',
        );    

        // Set the meta query to the complete, altered query
        $query->set('meta_query',$meta_query);
}

并且不需要在这个函数中返回任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多