欢迎使用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_meta
和get_post_custom_values
.
最后,如果您希望在发现无效数据时将post状态更改回草稿,您可以查看my answer to this question.