web-dev-qa-db-fra.com

Comment puis-je ajouter une page d'options pour mon plugin basé sur la classe?

J'essaie d'utiliser la nouvelle API de paramètres avec un plugin basé sur une classe pour ajouter une page de paramètres. C'est le code que j'ai jusqu'à présent:

class simple_sample_plugin{
    function simple_sample_plugin()
    {
        add_action('init', array(&$this, 'init'));
    }
    function init()
    {
        add_action('admin_menu', array(&$this, 'admin_menu'));
        add_action('admin_init', array(&$this, 'admin_init'));
    }
    function admin_init()
    {
        register_setting(
            'sample'  // A settings group name. Must exist prior to the register_setting call.
            ,'sample_options' //  The name of an option to sanitize and save.
            ,array($this, 'set_options') //  A callback function that sanitizes the option's value.
        );
        // Register our settings field group
        add_settings_section(
            'sample_section1', // String for use in the 'id' attribute of tags.
            'Section 1', //  Title of the section.
            '__return_false', // Function that fills the section with the desired content. The function should echo its output.
            'sample' //  The type of settings page on which to show the section (general, reading, writing, media etc.)
        );
        // Register our individual settings fields
        add_settings_field(
            'color_scheme'  // String for use in the 'id' attribute of tags.
            ,'Color Scheme' // Title of the field.
            ,array($this, 'color_scheme') // Function that fills the field with the desired inputs as part of the larger form. Passed a single argument, the $args array. Name and id of the input should match the $id given to this function. The function should echo its output.
            ,'sample' //  The type of settings page on which to show the field (general, reading, writing, ...).
            ,'sample_section1' // The section of the settings page in which to show the box (default or a section you added with add_settings_section, look at the page in the source to see what the existing ones are.)
            ,array() // $args - Additional arguments that are passed to the $callback function. The 'label_for' key can be used to give the field a label different from $title.
        );
    }
    function set_options()
    {

    }
  function color_scheme()
    {
      echo "<textarea type='text' rows='2' cols='80' name='sample_options[color_scheme]'>";
      echo time();
      echo "</textarea>";
  }
    function admin_menu()
    {
        add_options_page(
            __('sample') //page title
            ,__('sample') //menu title
            ,'edit_posts' //capability
            ,'sample' //menu-slug
            ,array(&$this, 'settings_page') //function callback
        );

    }
    function settings_page()
    { ?>
    <div class="wrap">
    <h2>sample Options</h2>
    <form class="myform" method="post" action="options.php"> 
    <?php

        settings_fields('sample');
        do_settings_sections('sample_section1');


    ?>
    <script type="text/javascript">
        jQuery('.myform input:hidden').prop('type','text');


    </script>
    <input type="submit" value="Save" />
    </form>
    </div>
    <?php
    }
}
global $simple_sample_plugin;
$simple_sample_plugin = new simple_sample_plugin();

J'ai essayé de garder cela aussi propre et simple que possible, et de le faire en suivant de nombreux tutoriels et de la documentation.

J'ai aussi une ligne jQuery ici pour montrer les champs cachés.

Le seul problème est que cela ne fonctionne pas. C'est-à-dire que cela ajoute un exemple de page d'options, mais les valeurs de champ ne sont pas là.

Capture d'écran:

capture-avec-shadow.png http://img600.imageshack.us/img600/4526/screenshotwithshadow.png

Aidez-moi! Qu'est-ce que je fais mal? J'ai essayé cela pendant 24 heures maintenant.

1
cwd

essayer de changer

 do_settings_sections('sample_section1');

à

 do_settings_sections('sample');
2
ungestaltbar