web-dev-qa-db-fra.com

Manière correcte d'exécuter wp_query à partir d'un plugin

Je développe un plugin qui doit interroger un type de message personnalisé et récupérer des données et métadonnées à partir de ces messages. Mais à chaque fois que j'exécute cette requête dans mon plug-in, peu importe la nouvelle page de publication que je tire (dans n'importe quel message, type de message personnalisé ou page), des données sont pré-remplies et il s'agit du premier message personnalisé. tapez je demande dans mon plugin. Ainsi, par exemple, dans mon plugin, j'ai:

add_action('wp','myfunction');
function myfunction(){
$mcpt_query = array();

$the_query = new WP_Query('post_type=mcpt');

if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post(); 
   $mcpt_query[] = array(
        'id'       => get_post_meta(get_the_ID(), 'idkey', true ),
        'field1'   => get_post_meta(get_the_ID(), 'field1key', true ),
        'title'    => get_the_title($post->ID)
    );
endwhile;
endif;
return $mcpt_query;
wp_reset_postdata();
}    

Et si ce qui précède se trouve dans mon plugin, toute page post-new.php extraite dans admin sera préremplie avec le premier message de ce type de message personnalisé (mcpt), au lieu de me donner une nouvelle page de message vierge à remplir.

Des idées ce qui cause ceci?

1
Stephen

Voici ce qui a résolu le problème (même si je ne suis pas sûr de savoir pourquoi aucune des actions ci-dessous ne l’a résolu):

Je me suis débarrassé de l'action, je suis passé de WP Query à get_posts et j'ai déplacé reset au-dessus de return.

function myfunction(){
$mcpt_query = array();

$the_query = get_posts('post_type=mcpt');

foreach ( $the_query as $post ) : setup_postdata( $post );
$mcpt_query[] = array(
    'id'       => get_post_meta(get_the_ID(), 'idkey', true ),
    'field1'   => get_post_meta(get_the_ID(), 'field1key', true ),
    'title'    => get_the_title($post->ID)
);
endforeach;
wp_reset_postdata();
return $mcpt_query;
}    
1
Stephen