从插件内部运行wp_Query的正确方法

时间:2014-05-20 作者:Stephen

我正在开发一个插件,需要对自定义帖子类型进行查询,并从这些帖子中检索数据和元数据。但是,每当我在插件中运行该查询时,无论我打开哪个管理新帖子页面(在任何帖子、自定义帖子类型或页面中),都会有预先填充的数据,并且是来自我在插件中查询的第一个自定义帖子类型。例如,在我的插件中,我有:

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)的第一篇帖子,而不是给我一个空白的新帖子页面来填写。

知道是什么原因吗?

1 个回复
最合适的回答,由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;
}    

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post