Switch_to_Blog()中的_post()更改了我的摘录

时间:2014-12-28 作者:Adrian

在我正在编写的插件中使用WP\\u Query和multisite时,我遇到了一个奇怪的问题,该插件挂钩到add\\u meta\\u框中。我想在元框中的下拉列表中显示所有帖子标题。

在第2个博客中添加或编辑一篇文章(可以是任何博客编号)时,我会在第1个博客中循环,并从自定义的文章类型中获取文章标题,以填充到select下拉列表中。这是应该的,但在此过程中,我的摘录中的文本被替换为循环最后一篇文章中的摘录。

我已禁用所有插件。我已在所有网站上启用2015主题。我正在使用wordpress 4.1。我试过只发帖子而不是自定义帖子,但问题仍然存在。下面是我正在使用的代码:

switch_to_blog( 1 ); 
$qry_args = array(
    \'post_status\' => \'publish\',     
    \'post_type\' => $typenow,        
    \'posts_per_page\' => -1,         
    );

$blog_query = new WP_Query( $qry_args );

if ( $blog_query->have_posts() ) {  
    while ( $blog_query->have_posts() ) {
        $blog_query->the_post();

        // get_the_ID(); and put in in an <option></option>                 
    }
} 
wp_reset_postdata();
restore_current_blog();     
我已经将问题的根源缩小到了$blog\\u query->the\\u post()这一行;

有人能指出为什么我在博客2中的一篇文章的摘录在循环浏览博客1时被替换为博客1中的一篇文章的摘录吗?我对编写插件相当陌生,所以也许我做错了什么,我对此一无所知。

感谢您的帮助,

阿德里安

EDIT:

我刚刚又做了一些测试,发现插件查询监视器出现了以下php警告:

PHP error:
正在尝试获取非对象的属性

Count:
6

Location:

Call Stack:
map\\u meta\\u cap()
WP\\u User->has\\u cap()
current\\u User\\u can()meta\\u form()
post\\u custom\\u meta\\u box()
do\\u meta\\u box()

当我把上面的代码放在admin\\u footer而不是add\\u meta\\u框中时,问题就解决了。所以这可能是个时间问题??如果是,我如何在add\\u meta\\u框中查询我的帖子?

2 个回复
SO网友:Caleb Lewis

查看您得到了什么。这个new WP_Query() 因为某种原因不起作用。执行var_dump在上面。我怀疑您没有从查询中获得任何结果,导致Trying to get property of non-object 当您尝试访问这些方法时。

SO网友:Mark Kaplun

在将日志切换回原始日志之前,请重置日志数据。这意味着全局post相关变量将设置为blog 1上意外的内容,因为您仍处于其上下文中。

正确的顺序应该是

restore_current_blog();
wp_reset_postdata();

结束