选择不从插件保存的表单元素选项

时间:2013-09-14 作者:Mark Finch

我肯定这是件愚蠢的事。但我找不到它,用这么简单的代码,我什么都找不到。在查看了许多其他插件以各种方式进行设置后,我们真的看不出它与那些执行类似代码的插件有什么不同。这实际上是从WordPress Codex. 在我的代码不起作用后,我去检查了抄本并尝试了一下。真正奇怪的是,WordPress偶尔会保存所选内容。但大多数情况下,情况并非如此。

我可以绕过WordPress方法,直接使用PHP,但我什么也学不到。许多插件绕过register\\u settings方法来处理POST和DB。

再次作为上一次插件安装。一如既往,非常感谢您的帮助。

    <?php
    /*
    Plugin Name: myplug
    Version: 0.1
    Plugin URI: http://myplug.org
    Author: ME
    Description: Stupid plugin
     */

    add_action(\'admin_init\', \'myplug_register_options\');  // register options for the form
    add_action(\'admin_menu\', \'myplug_admin_links\');  // register admin menu hyperlinks

    /** Function to register form fields **/
    function myplug_register_options(){
            register_setting(\'myplug_options_group\', \'myplug_settings\', \'myplug_validate\');
    }

    /** Function to add hyperlinks to the admin menus using hooks and filters. **/
    function myplug_admin_links() {
      add_options_page(\'myplug Setup\', \'myplug\', \'manage_options\', \'myplug\', \'myplug_admin_page\' );  // add link to settings page
      add_filter( \'plugin_action_links\', \'myplug_settings_link\', 10, 2 );  // add link to plugin page
    }

    /** Function to create link for plugin_action_links filter **/
    function myplug_settings_link($links, $file){
            if ( $file == plugin_basename( dirname(__FILE__). \'/myplug.php\')){
                    $settings_link = \'<a href="options-general.php?page=myplug">\' .__(\'Settings\') . \'</a>\';
                    array_unshift( $links, $settings_link ); // place before other links
            }
    return $links;
    }

    /** Validate User Input **/
    function myplug_validate($input) {
            $input[\'select_it\'] = wp_filter_nohtml_kses($input[\'select_it\']);
    return($input);
    }

    /** Draw the Settings Page **/
    function myplug_admin_page(){
    ?>
    <div>
      <h2>Options</h2>
      <form method="post" action="options.php">
      <?php settings_fields(\'myplug_options_group\'); ?>
      <?php $myplug_options = get_option(\'myplug_settings\'); ?>
        <select name="input[select_it]">
            <option value="1" <?php selected( $input[\'select_it\'], 1 ); ?>>1</option>
            <option value="2" <?php selected( $input[\'select_it\'], 2 ); ?>>2</option>
            <option value="3" <?php selected( $input[\'select_it\'], 3 ); ?>>3</option>
        </select>
      <?php submit_button(); ?>
      </form>
    </div>
    <?php
    }
    ?>

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

请参见myplug_admin_page 作用

并查看selected 在里面打电话。selected 其工作方式是使用当前保存的值检查项目的值。

在您的selected 调用当前保存的值$input[\'select_it\'] 但是no $input 变量在该函数中定义。

在该函数中,当前保存的值位于var中$myplug_options (因为$myplug_options = get_option(\'myplug_settings\')).

所以在selected 调用替换$input 具有$myplug_options 我敢打赌它会奏效的。

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。