Отображение параметров настроек с помощью API параметров WordPress

У меня проблемы с сохранением моего поля с помощью API настроек WordPress.

У меня есть 1 страница с 1 разделом и 1 полем. Так что это довольно прямолинейно. Все отображается/рендерится нормально, но я не могу сохранить поля.

class LocalSEOAdmin {

    var $slug = 'local_seo_settings';

    var $name = "Local SEO";

    public function __construct(){

        // When WP calls admin_menu, call $this->admin_settings
        if ( is_admin() ) {
            add_action('admin_menu',  array( &$this, 'add_options_page' ) );  // on admin_menu call $this->init_admin_menu
            add_action( 'admin_init', array( &$this, 'add_setting_fields' ) );

        }

    }

    public function add_options_page(){
        add_options_page( 
            $this->name, // Page title
            $this->name, // Menu Title
            'manage_options',  // Role
            $this->slug, // Menu slug
            array( &$this, 'local_seo_admin_menu_callback' ) // Callback to render the option page
        );
    }

    public function local_seo_admin_menu_callback(){ 
        ?>
        <div class='wrap'>
        <h1><?php echo $this->name ?> Options</h1>
        <form method='post' action='options.php'>
        <?php
            settings_fields( 'address_settings_section' );
            do_settings_sections( $this->slug );
            submit_button();    
        ?>
        </form>
        </div>
        <?php

    } 

    public function add_setting_fields(){

        add_settings_section(
            'address_settings_section',         // ID used to identify this section and with which to register options
            'Address Options',      // Title to be displayed on the administration page
            array( &$this, '_render_address_options'),  // Callback used to render the description of the section
            $this->slug     // Page on which to add this section of options
        );

        add_settings_field( 
            'address_line_1',                       // ID used to identify the field throughout the theme
            'Address Line 1',                           // The label to the left of the option interface element
            array( &$this, '_render_address_line_1'),   // The name of the function responsible for rendering the option interface
            $this->slug,    // The page on which this option will be displayed
            'address_settings_section',         // The name of the section to which this field belongs
            array(                              // The array of arguments to pass to the callback. In this case, just a description.
                __( 'Activate this setting to display the header.', 'sandbox' ),
            )
        );

        register_setting(
            'address_settings_section',
            'address_settings_section'
        );

    }

    public function _render_address_options(){
        echo '<p>Add you address</p>';
    }

    public function _render_address_line_1(){
        $option = get_option( 'address_line_1' );
        $html = '<input type="text" id="address_line_1" name="address_line_1" value="' . $option . '" />'; 
        echo $html;
    }


}

new LocalSEOAdmin;

Я не уверен, что происходит, но я чувствую, что кто-то перепутал обязательные поля. Поля отображаются в WordPress, и когда я нажимаю «Обновить», «настройка сохранена». сообщения приходят, но ничего не сохраняется.


person dotty    schedule 14.01.2015    source источник


Ответы (2)


есть только небольшая проблема, когда вы регистрируете свои настройки.

на основе register_setting, вторым параметром является $option_name, поэтому вы должны указать имя отправки ваших входов

    register_setting(
        'address_settings_section',
        'address_line_1'
    );

и теперь это сработало.

вы можете узнать больше о создании страниц параметров на сайте wordpress.

person Kiyan    schedule 18.01.2015
comment
Ты наверное шутишь. Оказывается, ты прав, бог знает, как я этого не заметил. Благодарю вас! - person dotty; 18.01.2015

В register_setting()

Первый параметр — это ваш option group name, а второй параметр — option name, указанный в add_settings_field() , в вашем случае должно быть address_line_1, а не address_settings_section

Окончательно

register_setting(
                'address_settings_section',
                'address_line_1'
                )
person jay.jivani    schedule 22.01.2015