web-dev-qa-db-fra.com

Pourquoi query_vars est modifié dans un objet WP_Query?

J'ai des problèmes lors de l'interrogation d'un objet WP_Query lorsqu'un utilisateur a un rôle différent de administrator

Mon WP_Query est ceci:

function remove_new_c_post($author_id,$value_id) {

        $query = new WP_Query( array(
            'post_type' => 'custom_post_type',
            'author' => $author_id,
            'meta_query' => array(
            'relation' => 'AND',
                array(
                    'key'     => 'value_id',
                    'value'   => $value_id,
                    'compare' => 'LIKE',
                ),
            ),
            'order' => 'ASC'

            ));

        if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post();
            wp_delete_post( get_the_ID() );
        endwhile;
        wp_reset_postdata();
        endif;

}

Pour une raison quelconque, lorsque la requête est exécutée par un utilisateur autre que l'administrateur, le résultat est le suivant:

WP_Query Object
(
    [query] => Array
        (
            [post_type] => custom_post_type
            [author] => 70
            [meta_query] => Array
                (
                    [relation] => AND
                    [0] => Array
                        (
                            [key] => value_id
                            [value] => 86
                            [compare] => LIKE
                        )

                )

            [order] => ASC
        )

    [query_vars] => Array
        (
            [post_type] => custom_post_type
            [author] => 86 //<--- THIS SHOULD BE 70
            [meta_query] => Array
                (
                    [relation] => AND
                    [0] => Array
                        (
                            [key] => value_id
                            [value] => 86
                            [compare] => LIKE
                        )

                ) 
            [order] => ASC
...

Veuillez noter que l'auteur dans query_vars il est 86 alors qu'il devrait être 70. Pourquoi cela est-il modifié?

EDIT:

Je viens d'essayer de définir le query_var $query->set( 'author', $author_id ); et il a gardé le author_id intact; cependant, le mysql ne cesse de se modifier:

  [request] => SELECT SQL_CALC_FOUND_ROWS  dlwp_posts.ID
               FROM dlwp_posts
               INNER JOIN dlwp_postmeta ON ( dlwp_posts.ID = dlwp_postmeta.post_id )   
               WHERE 1=1  AND dlwp_posts.post_author IN (86)
                 AND dlwp_posts.post_type = 'custom_post_type'
                 AND (dlwp_posts.post_status = 'publish'
                   OR dlwp_posts.post_status = 'future'
                   OR dlwp_posts.post_status = 'draft'
                   OR dlwp_posts.post_status = 'pending'
                   OR dlwp_posts.post_status = 'private')
                 AND (( dlwp_postmeta.meta_key = 'value_id'
                   AND CAST(dlwp_postmeta.meta_value AS CHAR) LIKE '%86%' )
2
Gixty

Le commentaire de Milo à propos de pre_get_posts m'a aidé à résoudre ce problème. Dans mon cas, le thème parent a utilisé l'action pre_get_posts pour définir explicitement le post_type pour toutes les pages auteur. Ce n'était pas dans functions.php, mais j'ai pu le trouver en cherchant dans le thème des instances de pre_get_posts. (J'ai utilisé grep -R "pre_get_posts" . -l à partir de la ligne de commande pour trouver le fichier.)

Si vous n'utilisez pas de thème enfant, vous pouvez éventuellement simplement supprimer la fonction problématique et sa add_action().

Si vous utilisez un thème enfant, vous pouvez utiliser la fonction remove_action pour maintenir le caractère évolutif ...

Action problématique existante dans le thème parent:

function problematic_parent_action( &$query ) {
  if ($query->is_author) {
    $query->set( 'post_type', array( 'problematic_parent_post_type' ) );
  }
}
add_action( 'pre_get_posts', 'problematic_parent_action' );

Résolution ajoutée au thème enfant:

function remove_problematic_parent_action() {
  remove_action( 'pre_get_posts', 'problematic_parent_action' );
}
add_action( 'init', 'remove_problematic_parent_action');
1
shawncampbell