发布元数据在保存时被删除

时间:2016-07-25 作者:Eric Strom

我在保存所有帖子类型(默认和自定义)的帖子元时遇到了一个问题。我想加入save_post 要运行我的函数,所发生的事情是添加了post meta,但随后立即删除了它。这就是我现在所拥有的:

function saveSidebarMeta($postId) {
    $toAdd = $_POST[\'collection-topics\'];
    foreach ($toAdd as $topic) {
        add_post_meta($postId, \'collection-topic\', $topic);
    }
}

add_action(\'save_post\', \'saveSidebarMeta\', 100);
现在,我将优先级设置为100,这确实会保存帖子元,但是如果页面再次保存,帖子元会被删除,除非添加了正确的信息,我不希望每次有人保存帖子时都删除和添加数据。

如果将优先级设置为默认值10,则会保存数据,但随后会立即删除。我之所以知道这一点,是因为1。)add_post_meta() 返回meta\\u键,然后数据库中不存在该键,2。)如果我把die() 之后的声明add_post_meta(), 元数据如表所示。

我有其他功能保存后元刚刚好。我是否错过了一些非常简单的事情?我研究这个问题已经有一段时间了,没有地方可以看,也没有方向可以找到解决方案。任何帮助都将不胜感激。谢谢

2 个回复
SO网友:stoi2m1

您是否在保存帖子之前将保存的数据输出到编辑帖子页面?如果没有,您可能会得到一个空的$\\u POST[\'collection-topics\']数据,然后保存空的或空的数据。

我会在做之前检查一下add_post_meta()

if ( empty($_POST[\'collection-topics\']) ) return;

SO网友:Andy Macaulay-Brook

这是一个开始,但我们还需要查看生成表单的代码。

一种可能性是自动保存会把您搞砸,所以请在代码上尝试这种变体。

add_action(\'save_post\', \'saveSidebarMeta\', 100);

function saveSidebarMeta( $postId ) {

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

        $toAdd = $_POST[\'collection-topics\'];
        foreach ($toAdd as $topic) {
            add_post_meta($postId, \'collection-topic\', $topic);
        }
    }

}
但如果我们也能看到您的表单生成代码,我可能可以进一步扩展它。

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在