验证WordPress自定义帖子类型字段

时间:2016-04-05 15:39:52

标签: php wordpress validation wordpress-plugin custom-post-type

我正在开发一个插件,管理员可以在后端添加和删除邮政编码。我发现最好的方法是创建一个名为zip_code的自定义帖子类型,只支持一个标题,因为该功能已经内置到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_code_save函数:

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无效,上面的代码会成功输出错误消息,但无论错误如何,它都会发布帖子。如果标题无效,有没有办法阻止发布帖子?

另外,有没有办法阻止WordPress自动创建草稿?由于数据太少,这里真的无关紧要,而且更麻烦。

0 个答案:

没有答案