如何在取消设置后恢复查询变量AUTHER_NAME?

时间:2014-04-20 作者:Gixty

我正在取消设置查询变量author_name 用于在作者模板页面中查询帖子。我正在使用pre_get_posts 筛选主查询。

运行查询后,我需要将author_name 查询变量。

这就是我取消设置的地方。

function wpquery( $query )
     if ( $query->is_author() && $query->is_main_query()) {
                $query->set( \'post_status\', $post_status );
                unset( $query->query_vars[\'author_name\'] ); 
                $tax_query = array(  
                    array(
                        \'taxonomy\' => \'tax\',
                        \'field\' => \'name\',
                        \'terms\' => $var
                    )
                );
                $query->set( \'tax_query\', $tax_query );
        }   
add_action( \'pre_get_posts\', \'wpquery\' );
查询运行后,我必须设置author_name

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

一种简单的方法是使用静态变量存储作者姓名,然后在以后的挂钩上再次运行相同的函数,可能是“posts\\u results”,然后设置回变量:

function wpquery( $query, $query_on_results = NULL ) {
  static $author_name = NULL;
  if ( current_filter() === \'pre_get_posts\' ) {
    if ( $query->is_author() && $query->is_main_query() ) {
      $query->set( \'post_status\', $post_status );
      $author_name =  $query->query_vars[\'author_name\'];
      unset( $query->query_vars[\'author_name\'] ); 
      $tax_query = array(  
        array(
         \'taxonomy\' => \'tax\',
         \'field\' => \'name\',
         \'terms\' => $var
        )
      );
      $query->set( \'tax_query\', $tax_query );
    } 
  } elseif ( current_filter() === \'posts_results\' ) {
    if ( $query_on_results->is_main_query() && ! empty( $author_name ) ) {
      $query_on_results->query_vars[\'author_name\'] = $author_name;
      $author_name = NULL;
      remove_filter( current_filter(), __FUNCTION__, 20, 2 );
    }
    // $query represent the 1st arg passed to function, that on posts_result hook
    // is the retrieved posts array. Always return it as is to do not alter results
    return $query;
  }
}   

add_action( \'pre_get_posts\', \'wpquery\' );

add_filter( \'posts_results\', \'wpquery\', 20, 2 );

结束

相关推荐

使用GLOBAL$POST;通过WP_QUERY获取定制帖子的特色图像

我正在使用一个站点范围的函数将css添加到<head> 的页面拉入各种特征图像作为响应页面背景。它在我的站点的其他部分都非常有效,但在我使用自定义帖子类型调用帖子的页面上失败WP_Query. 我想这是因为WP_Query 不使用标准循环,我的函数使用global $post;.有没有办法适应WP_Query 循环以使用函数?我需要的特色图像功能,也工作在我的网站,它使用标准的WP循环的其余部分。--以下是我如何称呼自定义帖子:<?php $port_query = new WP_Que