prevent post submission

时间:2012-01-25 作者:Matanya

我正在使用一个元框来定制帖子类型。我有三个问题:

每次打开新帖子进行编辑或重新加载时,WP似乎都会运行我附加到“save\\u post”操作的功能。有没有办法阻止它运行TIA,谢谢您的帮助。

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

参见《法典》,第页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.

结束