我正在开发一个插件,需要对自定义帖子类型进行查询,并从这些帖子中检索数据和元数据。但是,每当我在插件中运行该查询时,无论我打开哪个管理新帖子页面(在任何帖子、自定义帖子类型或页面中),都会有预先填充的数据,并且是来自我在插件中查询的第一个自定义帖子类型。例如,在我的插件中,我有:
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();
}
如果以上内容在我的插件中,任何帖子都是新的。在admin中打开的php页面将预先填充该自定义帖子类型(mcpt)的第一篇帖子,而不是给我一个空白的新帖子页面来填写。
知道是什么原因吗?
最合适的回答,由SO网友:Stephen 整理而成
以下是解决问题的方法(尽管我不知道为什么,因为下面的任何一项单独行动都没有解决问题):
我去掉了这个操作,从WP Query改为get\\u posts,并将reset移到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;
}