【问题标题】:how to save a select option dropdown in a wordpress plugin如何在 wordpress 插件中保存选择选项下拉列表
【发布时间】:2018-01-25 21:18:57
【问题描述】:

我有以下从 WordPress 法典中获取的关于如何保存简单文本输入字段的代码。它工作正常。但我现在正在尝试保存一个选择选项下拉列表,但无法弄清楚我在这里缺少什么。它似乎在我第一次从下拉菜单中点击保存时保存,但是当我尝试编辑值以选择另一个选项并保存它时,它永远不会保存。

我的另一个问题是为什么我运行时没有将值打印到屏幕上

testing value saved: <?=esc_attr( get_option('location_one_option') ); ?>

当前插件代码如下:

// create custom plugin settings menu
function sidebar_posts_create_menu() {
    //create new top-level menu
    add_menu_page('Sidebar Posts', 'Sidebar Post Settings', 'administrator', __FILE__, 'sidebar_posts_settings_page' );

    //call register settings function
    add_action( 'admin_init', 'register_sidebar_posts_settings' );
}
add_action('admin_menu', 'sidebar_posts_create_menu');

//register our settings
function register_sidebar_posts_settings() {
    //register our settings
    register_setting( 'sidebar-posts-settings-group', 'location_one_option' );
    register_setting( 'sidebar-posts-settings-group', 'new_option_name' );
}

//register settings page view
function sidebar_posts_settings_page() {
    ?>
    <div class="wrap">
        <h1>Sidebar Posts Settings</h1>
        <p>Select up to six posts to show in six different locations on the sidebar. Have fun!</p>

        <form method="post" action="options.php">
            <?php settings_fields( 'sidebar-posts-settings-group' ); ?>
            <?php do_settings_sections( 'sidebar-posts-settings-group' ); ?>
            <table class="form-table">
                <tr valign="top">
                    <th scope="row">New Option Name</th>
                    <td><input type="text" name="new_option_name" value="<?php echo esc_attr( get_option('new_option_name') ); ?>" /></td>
                </tr>
<!--the above simple text field saves the data perfectly-->

                <?php
                $your_query = new WP_Query( 'posts_per_page=-1' ); ?>
                                <label>Location One Post</label><br />
            <select name="location_one_option">
                <option value="" selected="selected">Select a post</option>
                <?php while ( $your_query->have_posts() ) : $your_query->the_post(); ?>
                <option value="<?=esc_attr( get_option('location_one_option') ); ?>" <?php selected( get_option('location_one_option'), get_option('location_one_option') ); ?>>
                    <?=the_title(); ?>
                </option>
                <? endwhile; ?>
            </select>
            <? wp_reset_postdata(); ?><br /><br />
            testing value saved: <?=esc_attr( get_option('location_one_option') ); ?>

            </table>
            <?php submit_button(); ?>
        </form>
    </div>
<?php }

【问题讨论】:

    标签: php wordpress select


    【解决方案1】:

    使用此功能,这只是在 wordpress 插件中保存选择选项下拉列表的示例,您可以根据需要使用它。

    示例 1

    class DropdownOptionSetting {
        private $dropdown_option_setting_options;
    
        public function __construct() {
            add_action( 'admin_menu', array( $this, 'dropdown_option_setting_add_plugin_page' ) );
            add_action( 'admin_init', array( $this, 'dropdown_option_setting_page_init' ) );
        }
    
        public function dropdown_option_setting_add_plugin_page() {
            add_options_page(
                'Dropdown Option Setting', // page_title
                'Dropdown Option Setting', // menu_title
                'manage_options', // capability
                'dropdown-option-setting', // menu_slug
                array( $this, 'dropdown_option_setting_create_admin_page' ) // function
            );
        }
    
        public function dropdown_option_setting_create_admin_page() {
            $this->dropdown_option_setting_options = get_option( 'dropdown_option_setting_option_name' ); ?>
    
            <div class="wrap">
                <h2>Dropdown Option Setting</h2>
                <p></p>
                <?php settings_errors(); ?>
    
                <form method="post" action="options.php">
                    <?php
                        settings_fields( 'dropdown_option_setting_option_group' );
                        do_settings_sections( 'dropdown-option-setting-admin' );
                        submit_button();
                    ?>
                </form>
            </div>
        <?php }
    
        public function dropdown_option_setting_page_init() {
            register_setting(
                'dropdown_option_setting_option_group', // option_group
                'dropdown_option_setting_option_name', // option_name
                array( $this, 'dropdown_option_setting_sanitize' ) // sanitize_callback
            );
    
            add_settings_section(
                'dropdown_option_setting_setting_section', // id
                'Settings', // title
                array( $this, 'dropdown_option_setting_section_info' ), // callback
                'dropdown-option-setting-admin' // page
            );
    
            add_settings_field(
                'dropdown_option_0', // id
                'Dropdown Option', // title
                array( $this, 'dropdown_option_0_callback' ), // callback
                'dropdown-option-setting-admin', // page
                'dropdown_option_setting_setting_section' // section
            );
        }
    
        public function dropdown_option_setting_sanitize($input) {
            $sanitary_values = array();
            if ( isset( $input['dropdown_option_0'] ) ) {
                $sanitary_values['dropdown_option_0'] = $input['dropdown_option_0'];
            }
    
            return $sanitary_values;
        }
    
        public function dropdown_option_setting_section_info() {
    
        }
    
        public function dropdown_option_0_callback() {
            ?> <select name="dropdown_option_setting_option_name[dropdown_option_0]" id="dropdown_option_0">
                <?php $selected = (isset( $this->dropdown_option_setting_options['dropdown_option_0'] ) && $this->dropdown_option_setting_options['dropdown_option_0'] === 'option-one') ? 'selected' : '' ; ?>
                <option value="option-one" <?php echo $selected; ?>>Option One</option>
                <?php $selected = (isset( $this->dropdown_option_setting_options['dropdown_option_0'] ) && $this->dropdown_option_setting_options['dropdown_option_0'] === 'option-two') ? 'selected' : '' ; ?>
                <option value="option-two" <?php echo $selected; ?>>Option Two</option>
                <?php $selected = (isset( $this->dropdown_option_setting_options['dropdown_option_0'] ) && $this->dropdown_option_setting_options['dropdown_option_0'] === 'option-three') ? 'selected' : '' ; ?>
                <option value="option-three" <?php echo $selected; ?>>Option Three</option>
            </select> <?php
        }
    
    }
    if ( is_admin() )
        $dropdown_option_setting = new DropdownOptionSetting();
    

    检索此值

    $dropdown_option = get_option( 'dropdown_option_setting_option_name' ); // Array
    $dropdown_value =  $dropdown_option ['dropdown_option_0']; // Option value
    

    如果您需要一种简单的方法来做到这一点

    示例 2

    add_action( 'admin_init', 'Dropdown_settings_init' );
    
    function Dropdown_settings_init(  ) { 
        register_setting( 'pluginPage', 'dropdown_settings' );
        add_settings_section(
            'Dropdown_pluginPage_section', 
            __( 'Your section description', 'dropdown' ), 
            'Dropdown_settings_section_callback', 
            'pluginPage'
        );
    
        add_settings_field( 
            'select_field_0', 
            __( 'Settings field description', 'dropdown' ), 
            'Dropdown_select_field_render', 
            'pluginPage', 
            'Dropdown_pluginPage_section' 
        );
    }
    
    
    function Dropdown_select_field_render(  ) { 
        $options = get_option( 'dropdown_settings' );
        ?>
        <select name='dropdown_settings[select_field_0]'>
            <option value='1' <?php selected( $options['select_field_0'], 1 ); ?>>Option 1</option>
            <option value='2' <?php selected( $options['select_field_0'], 2 ); ?>>Option 2</option>
            <option value='3' <?php selected( $options['select_field_0'], 3 ); ?>>Option 3</option>
            <option value='4' <?php selected( $options['select_field_0'], 4 ); ?>>Option 4</option>
        </select>
    <?php
    }
    
    
    function Dropdown_settings_section_callback(  ) { 
        echo __( 'This section description', 'dropdown' );
    }
    
    
    function Dropdown_options_page(  ) { 
        ?>
        <form action='options.php' method='post'>
            <h2>Dropdown</h2>
            <?php
            settings_fields( 'pluginPage' );
            do_settings_sections( 'pluginPage' );
            submit_button();
            ?>
        </form>
        <?php
    }
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-19
      相关资源
      最近更新 更多