我正在用meta\\u键过滤器为多个帖子类型编写一个循环。过滤器是访问者的输入。当访问者单击链接(过滤器)时,提交的表单和我得到的过滤器。现在,我应该使用$query->set()
要更改查询参数,还是应该提交新查询?目前,我正在使用此函数从输入中获取参数,并将参数传递给wp\\U查询:
function get_args($args){
$defaults= array(
// some standard query args
)
$args = wp_parse_args ( $args, $defaults );
extract ( $args );
if(!empty($args[\'filter\'])){
switch ($args[\'type\']){
case \'top_voted\':
$args[\'post_type\'] = \'docs\';
$args[\'meta_key\'] = \'_vote_total\';
$args[\'order\'] = \'DESC\';
$args[\'orderby\']=\'meta_value_num\';
break;
case \'unanswered_questions\':
$args[\'post_type] = \'topics\';
$args[\'blabla\'] = \'blabla;
break;
default:
blabla;
break;
}
return $args;
}
在模板中,我使用以下内容:
$key = isset( $_POST[\'filter\'] ) ? array_keys($_POST[\'filter\']) : null;
$query_args = get_args(array(\'user_id\'=>$user_id, \'filter\'=$key));
$r = new WP_Query( $query_args);
在上面的示例中,我想每次过滤器更改时都会使用新查询。如果查询->集()或其他过滤器可以提高性能,请帮助我了解如何操作。谢谢
最合适的回答,由SO网友:s_ha_dum 整理而成
如果可以在查询运行之前对其进行更改,那么就这样做,并为数据库保存一些工作。您可以使用query->set()
如果没有,您可以使用posts_where
, posts_fields
, etc filters. 如果没有更多的信息,很难说这些是否对你最有利。
Edit:
另一个问题,这个加载是什么类型的“页面”?以下是我的猜测:您从wp\\u admin->页面创建了一个“页面”,并可能分配了一个自定义构建
page template. 如果是这种情况,您可能无法处理主查询,因为它的任务是加载您创建的“页面”,这意味着您似乎在正确的轨道上创建了新查询。