web-dev-qa-db-fra.com

pre_get_posts La requête fiscale ne fonctionne pas pour la page d'auteur personnalisée

J'utilise le thème TwentyTwelve et j'ai modifié la requête standard dans le fichier author.php avec le code suivant:

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' );

Cependant, tax_query ne fonctionne pas pour la page auteur. Il n’est toujours pas possible de récupérer les articles dans la taxonomie de l’écrivain.

J'ai essayé d'appliquer ce code pour d'autres pages telles que is_home () is_archive () et cela fonctionne.

Donc, il doit y avoir un conflit entre wordpress et la page de modèle d'auteur qui ne me permet pas d'utiliser tax_query pour récupérer les publications dans la taxonomie de l'écrivain.

1
Gixty

Ne lancez pas une nouvelle requête dans le modèle, modifiez la requête principale avant via le pre_get_posts dans le fichier functions.php du thème.

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' );

Vous pouvez ensuite exécuter la boucle Vanilla dans le modèle d'auteur par défaut et enregistrer une requête supplémentaire dans le processus.

3
Milo