Как вернуть запрос var author_name после его отмены?

Я author_name запрос var author_name для запроса сообщений на странице шаблона автора. Я использую pre_get_posts для фильтрации основного запроса.

После выполнения запроса мне нужно author_name запрос author_name var.

Вот где я его отключил.

 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 запроса я должен установить author_name

Solutions Collecting From Web of "Как вернуть запрос var author_name после его отмены?"

Легкий способ – использовать статическую переменную для хранения имени автора, а затем снова запустить ту же функцию на более позднем крючке, возможно, «posts_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 );