我创建了一个自定义贴子类型:products,它还具有自定义字段:price&;运输。有时,如果我打开或刷新“编辑产品”窗口,我会丢失“价格和发货”中的值。请有人对此提出建议。
add_action(\'save_post\', \'save_details\');
function save_details()
{
global $post;
update_post_meta($post->ID, "price", $_POST["price"] );
update_post_meta($post->ID, "shipping", $_POST["shipping"] );
update_post_meta($post->ID, "long_title", $_POST["long_title"] );
update_post_meta($post->ID, "upload_image", $_POST["upload_image"] );
}
最合适的回答,由SO网友:fuxia 整理而成
在使用变量之前检查它们。save函数获取一个参数$post_id
. 使用它。
从我的meta box class for a check box:
/**
* Saves the content to the post meta.
*
* @return void
*/
public function save( $post_id )
{
$this->is_allowed_save( $post_id ) and
update_post_meta( $post_id, $this->vars[\'key\'],
empty ( $_POST[ $this->vars[\'key\'] ] ) ? \'off\' : \'on\' );
}
/**
* Checks if we should trigger the save action.
*
* @param int $post_id
* @return bool
*/
protected function is_allowed_save( $post_id )
{
// Check integrity, proper action and permission
if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
{
return FALSE;
}
if ( ! wp_verify_nonce( $this->nonce, $this->vars[\'title\'] ) )
{
return FALSE;
}
if ( ! current_user_can( \'edit_post\', $post_id )
and ! current_user_can( \'edit_page\', $post_id )
)
{
return FALSE;
}
return TRUE;
}
正如你所见,
DOING_AUTOSAVE
是你想要避免的事情。授权是下一点,否则任何人都可以在你的博客上发布任何东西。并在将数据插入数据库之前进行准备。