2016-04-22 70 views
0

我试图修改后置类型“产品”的所有查询,以便只显示产品/帖子是否具有meta_value需要更大的“wholesale_price”的某个meta_key大于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'); 

} 

}

出于某种原因,这仍然返回的一切。这是做事的正确方式吗?

+1

我想你只是缺少'return $ query;'在最后。 –

+0

我刚刚添加了这个,但一切仍然返回。 – danyo

+0

那么试试这个:'$ 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');' –

回答

0

问题是你设置你的方法meta_query。你应该阅读WP_Query的功能,因为meta查询不是那么简单。

你需要做更多的东西,像这样:

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') { 
     //Get original meta query 
     $meta_query = $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); 
} 

而且没有必要在这个函数返回任何东西。