我正在尝试使用WP_Queryobject 编写新的查询函数.
我创建了一个新的模板文件并放入以下内容:
$query_args = array(
'post_type' => 'page',
'post_parent=41',
);
// The Featured Posts query.
$results = new WP_Query($query_args);
Run Code Online (Sandbox Code Playgroud)
但无论我使用什么参数,查询都不会改变.看起来好像查询已经初始化并且创建新WP_Query查询对现有查询没有任何影响.
在我的代码之前调用的唯一的wordpress函数get_header()不包括对WP_Queryor的任何调用query_posts.
我把以下行找出实际的sql查询是什么:
echo $GLOBALS['wp_query']->request;
Run Code Online (Sandbox Code Playgroud)
实际的sql查询是:
SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND (wp_posts.ID = '14') AND wp_posts.post_type = 'page' ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)
当我改变我的时候,这个查询不会改变$query_args.
我想知道全局变量何时$wp_query被初始化,我应该怎么做才能使用我自己的查询?
s_h*_*dum 17
您正在创建一个新 WP_Query对象并将其保存到$results.这是您的查询结果的位置,而不是$GLOBALS['wp_query'].当然它不会覆盖$wp_query.他们是不同的东西.试试吧var_dump($results).
您可以$wp_query通过创建一个新WP_Query对象来覆盖:$wp_query = new WP_Query($query_args);.但那效率不高.只需要一个查询就可以运行两个查询.更好的方法是加入pre_get_posts.就像是:
function alter_query_so_15250127($qry) {
if ( $qry->is_main_query() && is_page('featured-posts-page') ) {
$qry->set('post_type','page');
$qry->set('post_parent',41);
}
}
add_action('pre_get_posts','alter_query_so_15250127');
Run Code Online (Sandbox Code Playgroud)
该if条件是非常重要的.您需要使用该行来确保过滤器仅在您要触发的页面上触发.你的问题没有足够的细节让我弄清楚确切的条件.
| 归档时间: |
|
| 查看次数: |
14445 次 |
| 最近记录: |