web-dev-qa-db-ja.com

カスタム作成者ページに対して税務クエリが機能しない

私はテーマTwentyTwelveを使用しており、ファイルauthor.php内の標準的なpostクエリを以下のコードで修正しました:

function wpd_author_query( $query ) {
//CODE to set $current_user_name here
//This gets the author from the URL
$author = get_user_by('slug',get_query_var('author_name'));
$current_user_name = $author->user_nicename;

    if ( $query->is_author() && $query->is_main_query()) {
            // your code to set $current_user_name here
            $query->set( 'meta_key', '_writer_relation_added_date_'.$current_user_name );
            $query->set( 'orderby', 'meta_value_num' );
            $query->set( 'post_status', $post_status );

            $tax_query = array(  
                array(
                    'taxonomy' => 'writer',
                    'field' => 'name',
                    'terms' => $current_user_name
                )
            );
            $query->set( 'tax_query', $tax_query );
    }               
}
add_action( 'pre_get_posts', 'wpd_author_query' );

ただし、tax_queryは作成者ページには機能しません。それはまだ作家の分類法でポストを検索していません。

私はis_home()やis_archive()のような他のページにそのコードを適用しようとしました、そしてそれはうまくいきます。

そのため、wordpressと作家のテンプレートページとの間に矛盾があり、作家の分類法で投稿を取得するためにtax_queryを使用することができません。

1
Gixty

テンプレートで新しいクエリを実行しないでください。メインのクエリをテーマのpre_get_postsファイルの functions.php アクションで実行する前に変更してください。

function wpd_author_query( $query ) {
    if ( $query->is_author()
        && $query->is_main_query() ) {
            // your code to set $current_user_name here
            $query->set( 'meta_key', '_writer_relation_added_date_' . $current_user_name );
            $query->set( 'orderby', 'meta_value_num' );
            $tax_query = array(  
                array(
                    'taxonomy' => 'writer',
                    'field' => 'name',
                    'terms' => $current_user_name
                )
            )
            $query->set( 'tax_query', $tax_query );

            // EDIT
            // unset the requested author
            unset( $query->query_vars['author_name'] );
    }
}
add_action( 'pre_get_posts', 'wpd_author_query' );

その後、デフォルトの作成者テンプレートでVanillaループを実行し、その過程で追加のクエリを保存できます。

3
Milo