参见《法典》,第页save_post. 在回答问题1时,每当WordPress auto\\u保存修订时(即编辑帖子时),都会触发该命令。尤其是在创建新帖子时,wp-admin/post-new.php
已加载。WordPress然后创建一个自动草稿,即使您尚未保存草稿或发布到post。这意味着媒体上传功能正常。
您不应该试图阻止它运行,而是在挂钩函数中检查它不是自动保存例程:
add_action(\'save_post\',\'my_save_function\');
function my_save_function($post_id) {
//You should have a nonce to check the data came from your metabox
// verify this is not an auto save routine.
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) return;
//Or: if (wp_is_post_revision( $post_id ) ) return;
//perform authentication checks
if (!current_user_can(\'edit_post\', $post_id)) return;
$raw_data = $_POST[\'name_of_input_field\'];
//Sanitise your data
}
回答问题2:在上述函数中返回false不会阻止后期保存。这是因为WordPress只触发“save\\u post”操作,但不考虑从中返回的任何内容,然后继续保存帖子(
EDIT: 事实上
save_post
在将帖子插入数据库后调用)。
您可以“退出”该过程,如this answer, 但是如果您想检查元数据库是否已填写,我建议改用jQuery。如果您希望在元数据库填写不正确时显示错误通知,see this post.
我不知道你为什么要问第三个问题——WordPress会在将标题保存到数据库之前对其进行清理——你不必担心这一点。还是要在自定义字段中使用标题?
总之,只要你使用update_post_meta
要将数据保存到数据库,不需要转义数据。但关于在此之前应该执行哪些检查,这取决于除了作为数据输入之外,您愿意做什么。在输出时,您应该转义数据,但转义的程度又取决于上下文。See this post.