当插件在自定义字段中发现错误时,不要发布/更新帖子

时间:2012-02-13 作者:Tony

我有一个问题,当插件(服务器端)在自定义字段上发现错误时,如何停止处理帖子。基本上,我开发了一个插件,可以在编辑帖子面板中添加和处理一些自定义字段。当我点击发布/更新按钮时,我想停止更新或保存帖子的过程。。。事实上,当发生错误时,插件可以停止存储自定义字段数据的过程,但即使有错误,帖子也可以发布或更新。我如何处理这种情况?谢谢大家!

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

欢迎使用WordPress答案。恐怕没有(服务器端)方法可以阻止提交帖子。

保存立柱时发射的挂钩,save_post, 在将帖子及其自定义字段保存到数据库后激发。

但是,您始终可以检索自定义字段值,验证它们,然后删除任何无效字段

(请记住,您只想删除带有插件处理的关键字的自定义字段。如果用户因为插件认为自定义字段数据无效而无法保存自己的自定义字段数据,则不会给用户留下深刻印象。请注意,您应该在自定义字段关键字前面加上插件特有的前缀)

无论如何,请执行以上操作。。。(note: 这未经测试)

add_action(\'save_post\', \'my_save_post\');
function my_save_post($post_id) {

    //Make sure you check this isn\'t an autosave.
    if ( defined( \'DOING_AUTOSAVE\' ) && DOING_AUTOSAVE )
         return;

    // Check if the user can edit this post
     if ( !current_user_can( \'edit_post\', $post->ID ) )
         return;

    //The keys you wish to validate. For best practise, keys should be prefixed.
    $plugin_keys = array(\'my_plugin_some_key\',\'my_plugin_another_key\',\'my_plugin_don_key\');

   foreach($plugin_keys as $key):
        $values = get_post_custom_values($key, $post_id);
        //validate value
        //Rather than deleting invalid data, you could use update_post_meta
        $is_invalid = false; //set to true if the value is invalid.
        if($is_invalid)
            delete_post_meta($post_id, $key);//delete invalid data  
   endforeach;
}
几句警告的话。$values 是与键关联的值的数组$key. 它可以是1的数组,也可以是任何数字。在验证值时,需要记住这一点。

其次delete_post_meta($post_id, $key) 用键删除所有帖子自定义字段值$key. 如果只希望删除值密钥对,则需要delete_post_meta($post_id, $key,$old_value).

有关这些的更多信息,请参阅delete_post_metaget_post_custom_values.

最后,如果您希望在发现无效数据时将post状态更改回草稿,您可以查看my answer to this question.

结束