在自动保存时发布元数据清除

时间:2011-03-10 作者:William

对于初学者,我正在使用这个很好的答案来实现自定义帖子类型以及将这些帖子类型插入其他页面的自定义方式,您可以在此处查看该答案:Custom field/meta populated by dropdown of existing posts?

我遇到了一个问题,但是当wordpress自动保存自己时,它会清除我放入表单中的任何元数据。

示例:

我从metabox中选择我想要的3个下拉列表,然后点击update。

页面将重新加载,3个选项仍处于选中状态。在phpMyAdmin中,我可以查找元数据,并按原样查看阵列。

我现在等待wordpress自动保存。

一旦发生这种情况,我可以刷新页面(不更新,只刷新)并且元数据丢失,或者我可以在phpMyAdmin中查找元数据,但它不会显示任何内容(即:它已消失)。

我猜这与需要绑定到另一个钩子(某种自动更新钩子)或其他什么东西有关,但即使这样,它实际上会删除元数据(而不是不自动更新元数据)也没有意义。

最后注意:如果将Mikes代码复制并粘贴到函数中。php,您应该能够很容易地重新创建我的错误(在wordpress 3.1中)。

2 个回复
最合适的回答,由SO网友:William 整理而成

嗯,就像往常一样,我觉得自己像个傻瓜,但在互联网上搜索了几个小时后,发现似乎很多人都在问这个问题,而我似乎在任何地方都找不到答案,我想我并没有那么慢!

重要的代码如下:

add_filter(\'wp_insert_post_data\',array(__CLASS__,\'filter_wp_insert_post_data\'),10,2);
static function filter_wp_insert_post_data($data, $postarr) {
     update_post_meta($postarr[\'ID\'],\'_offices\',$postarr[\'offices\']);
     return $data;
}
所发生的是,这段代码得到了运行,但没有$postarr[\'offices],所以它会插入空白数据!因此,快速解决方案是:

if(isset($postarr[\'offices\']))
update_post_meta($postarr[\'ID\'],\'_offices\',$postarr[\'offices\']);
如果要插入的数据未设置,则不会更新!

我不知道wordpress为什么不在自动保存时传递这些变量,但在真正保存时传递,但无论哪种方式都有效,所以我很高兴!

SO网友:Marcin

使用save post action I check状态:

<?php

add_action(\'save_post\' ,\'my_save_postdata\');

function my_save_postdata ( $post_id )
{
    if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) {
        return $post_id;
    }

    // logic

}

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s