我为每篇文章启用了两个自定义元字段,scottb\\u customHeader和scottb\\u customTitle
只要我使用完整的编辑功能来编辑帖子,这些就可以了。但是,当我单击“快速编辑”,然后单击“更新”时,我为帖子定制的元数据将被清除。我需要做什么来解决?
代码如下。。。
add_action(\'save_post\', \'custom_add_save\');
function custom_add_save($postID){
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) {
return $postID;
}
else
{
// called after a post or page is saved
if($parent_id = wp_is_post_revision($postID))
{
$postID = $parent_id;
}
if ($_POST[\'scottb_customHeader\'])
{
update_custom_meta($postID, $_POST[\'scottb_customHeader\'], \'_scottb_customHeader\');
}
else
{
update_custom_meta($postID, \'\', \'_scottb_customHeader\');
}
if ($_POST[\'scottb_customTitle\'])
{
update_custom_meta($postID, $_POST[\'scottb_customTitle\'], \'_scottb_customTitle\');
}
else
{
update_custom_meta($postID, \'\', \'_scottb_customTitle\');
}
}
}
function update_custom_meta($postID, $newvalue, $field_name) {
// To create new meta
if(!get_post_meta($postID, $field_name)){
add_post_meta($postID, $field_name, $newvalue);
}else{
// or to update existing meta
update_post_meta($postID, $field_name, $newvalue);
}
}
最合适的回答,由SO网友:MathSmath 整理而成
将隐藏标志与自定义字段一起添加到后期编辑表单。类似于
<input type="hidden" name="my_hidden_flag" value="true" />
然后,将所有自定义的save\\u post内容包装在该标志的检查中。然后,您也不必再检查autosave常量——如果该标志不存在,则它是快速编辑或autosave。
function custom_add_save($postID){
// Only do this if our custom flag is present
if (isset($_POST[\'my_hidden_flag\'])) {
// called after a post or page is saved
if($parent_id = wp_is_post_revision($postID)) {
$postID = $parent_id;
}
if ($_POST[\'scottb_customHeader\']) {
update_custom_meta($postID, $_POST[\'scottb_customHeader\'], \'_scottb_customHeader\');
} else {
update_custom_meta($postID, \'\', \'_scottb_customHeader\');
}
if ($_POST[\'scottb_customTitle\']) {
update_custom_meta($postID, $_POST[\'scottb_customTitle\'], \'_scottb_customTitle\');
} else {
update_custom_meta($postID, \'\', \'_scottb_customTitle\');
}
}
}
SO网友:Patryk Godowski
这个问题已经很老了,但我认为这个问题仍然存在。
老实说,这里没有好的答案,因为这里没有关于安全的东西。您将数据保存到数据库而不检查其源。。。
您应该使用nonce来验证数据源-由于这一点,它们不会被QuickEdit覆盖(或删除)。WordPress为此提供UTIL
添加到表单:
wp_nonce_field(\'my_custom_page\', \'_my_custom_page\');
而不是在调用save函数时:
if (!wp_verify_nonce( $_POST[\'_my_custom_page\'], \'my_custom_page\' )) { return $post_id; }
您应该为每个自定义帖子执行此操作。
SO网友:Foxinni
发生的情况是:对\'save_post\'
无法处理自定义字段中的新数据。因此,当save post运行时,它会丢失所有自定义字段$\\u post数据,因此会删除字段值,而不会留下任何内容。
FIX:
无论在哪里
add_action(\'save_post\',\'your_new_action\');
是的,如果您处于“编辑”屏幕(快速编辑发生的位置),则可以使其提前返回:
global $current_screen;
if($current_screen->base == \'edit\') return $post_id;
或者,您可以检查$\\u POST操作是否为内联保存(快速编辑的操作名称),然后再不执行任何操作,从而保留自定义字段值:
if( $_POST[\'action\'] != \'inline-save\' ) { echo \'Do this then..\'; }
如果您不确定这些片段放在哪里,我可能需要进一步阐述。但我希望它能帮助有类似问题的人。