首页 > 解决方案 > WordPress 设置验证消息显示两次

问题描述

我正在为我的 WordPress 插件添加一个非常基本的(我觉得)设置页面验证实现,它确实有效,但错误消息显示了两次。我单步执行了我的代码,对的调用add_settings_error只执行一次。

<?php

class Example_plugin_Settings {
    private $example_plugin_settings_options;
    private $settings_options_name;

    public function __construct() {
        add_action( 'admin_menu', array( $this, 'example_plugin_settings_add_plugin_page' ) );
        add_action( 'admin_init', array( $this, 'example_plugin_settings_page_init' ) );
        $this->settings_options_name = 'example_plugin_options';
    }

    public function example_plugin_settings_add_plugin_page() {
        add_options_page(
            'Example-Plugin Connector Settings', // page_title
            'Example-Plugin', // menu_title
            'manage_options', // capability
            'example-plugin-connector-settings', // menu_slug
            array( $this, 'example_plugin_settings_create_admin_page' ) // function
        );
    }

    public function example_plugin_settings_create_admin_page() {
        $this->example_plugin_settings_options = get_option( 'example_plugin_options' ); ?>

        <div class="wrap">
            <h2>Example-Plugin Connector Settings</h2>
            <p>Set up additional portals/currencies to be used with WooCommerce Currency Switcher (WOOCS).  Enter a comma-delimited list of portals, then the corresponding comma-delimited list of currencies that those portals support.</p>
            <?php settings_errors(); ?>

            <form method="post" action="options.php">
                <?php
                settings_fields( 'example_plugin_settings_option_group' );
                do_settings_sections( 'example-plugin-connector-settings-admin' );
                submit_button();
                ?>
            </form>
        </div>
    <?php }

    public function example_plugin_settings_page_init() {
        register_setting(
            'example_plugin_settings_option_group', // option_group
            $this->settings_options_name, // option_name
            array( $this, 'example_plugin_settings_sanitize' ) // sanitize_callback
        );

        add_settings_section(
            'example_plugin_settings_setting_section', // id
            'Settings', // title
            array( $this, 'example_plugin_settings_section_info' ), // callback
            'example-plugin-connector-settings-admin' // page
        );

        add_settings_field(
            'portals', // id
            'Portals', // title
            array( $this, 'portals_callback' ), // callback
            'example-plugin-connector-settings-admin', // page
            'example_plugin_settings_setting_section' // section
        );

        add_settings_field(
            'currencies', // id
            'Currencies', // title
            array( $this, 'currencies_callback' ), // callback
            'example-plugin-connector-settings-admin', // page
            'example_plugin_settings_setting_section' // section
        );
    }

    public function example_plugin_settings_sanitize($input) {
        $sanitary_values = array();
        if ( isset( $input['portals'] ) ) {
            if ( '' == $input['portals'] ) {
                $input['portals'] = '';
                add_settings_error(
                    $this->settings_options_name,
                    'portals',
                    'Portals is a required field.',
                    'error'
                );
            } else {
                $sanitary_values['portals'] = sanitize_text_field( trim( $input['portals'] ) );
            }
        }

        if ( isset( $input['currencies'] ) ) {
            if ( '' == $input['currencies'] ) {
                $input['currencies'] = '';
                add_settings_error(
                    $this->settings_options_name,
                    'currencies',
                    'Currencies is a required field.',
                    'error'
                );
            } else {
                $sanitary_values['currencies'] = sanitize_text_field( trim( $input['currencies'] ) );
            }
        }

        return $sanitary_values;
    }

    public function example_plugin_settings_section_info() {

    }

    public function portals_callback() {
        printf(
            '<input class="regular-text" type="text" name="example_plugin_options[portals]" id="portals" value="%s">',
            isset( $this->example_plugin_settings_options['portals'] ) ? esc_attr( $this->example_plugin_settings_options['portals']) : ''
        );
    }

    public function currencies_callback() {
        printf(
            '<input class="regular-text" type="text" name="example_plugin_options[currencies]" id="currencies" value="%s">',
            isset( $this->example_plugin_settings_options['currencies'] ) ? esc_attr( $this->example_plugin_settings_options['currencies']) : ''
        );
    }

}
if ( is_admin() )
    $example_plugin_settings = new Example_plugin_Settings();

重复错误

标签: wordpresswordpress-plugin-creation

解决方案


看来问题出在线路上<?php settings_errors(); ?>。我从WordPress 选项页面生成器中获得了基本代码,但可能代码已经过时,并且该行现在对于新版本的 WordPress 是多余的?我不确定。


推荐阅读