自定义发布自定义分类数据未保存在编辑屏幕中

时间:2012-04-05 作者:Joshua Nelson

我有一个自定义的post类型“projects”,其中有一个自定义的分类法“project\\u type”如果在post editor屏幕中选择项目类型分类法并点击update,则分类法不会更新。更糟糕的是,它会清除与该项目关联的所有分类法值。奇怪的是,我在管理屏幕中添加了一列以显示自定义分类法值,并且我能够通过WP的内置快速编辑功能更新分类法值。

以下是大部分自定义帖子类型和分类代码:http://pastebin.com/2TdmVEAE

因此,我想我需要一些函数来修改save post函数,以包含自定义分类数据。现在,save\\u post函数不能在自定义post类型中包含自定义分类法,这就是它清除数据的原因。(旁白:为什么与quick post配合使用?)

我只是不知道如何准确地处理自定义分类法中的数据,以便将所选分类法与特定帖子进行比较/写入。我刚刚发现codex on save_post... 以下是我迄今为止在另一篇类似帖子的基础上所做的:

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

// Save data from meta box
function dcg_taxonomy_save($post_id) {
global $post;

// verify nonce
if (!wp_verify_nonce($_POST[\'project_type\'], basename(__FILE__))) {
    return $post_id;
}

// check autosave
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
    return $post_id;
}

// check permissions
if (\'page\' == $_POST[\'project\']) {
    if (!current_user_can(\'edit_page\', $post_id)) {
        return $post_id;
    }
} elseif (!current_user_can(\'edit_post\', $post_id)) {
    return $post_id;
}

$old = wp_get_post_terms($post_id, \'project_type\', array("fields" => "all") ); // grabs all terms for this post in the taxonomy
$new = $_POST[ ...?... ]; // <-- how do I grab the custom taxonomy values

// probably need to run a foreach through the array of taxonomy values, yea?
if ($new != $old) {
    wp_set_post_terms($post_id, $new, \'project_type\', false ) // sets new taxonomy terms
}
}

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

如果您有一个自定义的帖子类型和一个自定义的分类法,您不需要自己处理这些术语的保存,WordPress已经为您完成了这项工作。因此,您可以删除分类法保存代码。

此外,您应该将register\\u post\\u类型和自定义分类法注册代码放在函数中,并将其附加到init 钩直接申报是不安全的。

结束

相关推荐