我正在开发一个插件,管理员可以在后端添加和删除邮政编码。我发现最好的方法是创建一个名为zip\\u代码的自定义帖子类型,只支持标题,因为该功能已经内置到Wordpress中。
我遇到的问题是验证标题,因为它必须是有效的邮政编码,以避免前端出错。
我添加了以下动作挂钩:
// Action hook to intercept Wordpress\' default post saving function and redirect to ours
add_action(\'save_post\', \'zip_code_save\');
$validator = new Validator();
// Called after the redirect
add_action(\'admin_head-post.php\', array($validator, \'add_plugin_notice\'));
zip\\u code\\u保存功能:
public function zip_code_save() {
global $post;
if (defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE) return;
if (isset($_POST[\'post_type\']) && $_POST[\'post_type\'] == \'zip_code\') {
$validator = new Validator();
if (!$validator->validate(get_the_title($post->ID))) {
$validator->update_option(1);
return false;
} else {
update_post_meta(
$post->ID,
\'zip_code\', get_the_title($post->ID));
}
}
}
最后,这是我的Validator类:
class Validator {
//This for your your admin_notices hook
function show_error() {
echo \'<div class="error">
<p>The ZIP Code entered is not valid. <b>Note</b>: only US ZIP codes are accepted.</p>
</div>\';
}
//update option when admin_notices is needed or not
function update_option($val) {
update_option(\'display_my_admin_message\', $val);
}
//function to use for your admin notice
function add_plugin_notice() {
if (get_option(\'display_my_admin_message\') == 1) {
// check whether to display the message
add_action(\'admin_notices\', array(&$this, \'show_error\'));
// turn off the message
update_option(\'display_my_admin_message\', 0);
}
}
function validate($input) {
$zip = (isset($input) && !empty($input)) ? sanitize_text_field($input) : \'\';
if ( !preg_match( \'/(^\\d{5}$)|(^\\d{5}-\\d{4}$)/\', $zip ) ) {
return false;
} else {
return true;
}
}
}
如果输入的ZIP无效,上面的代码会成功输出错误消息,但是不管出现什么错误,它都会发布帖子。如果标题无效,是否有办法阻止发布帖子?
还有,有没有办法防止WP自动创建草稿?因为数据太少,所以这里真的不相关,而且更麻烦。