web-dev-qa-db-fra.com

Le formulaire du plugin Wordpress ne sauvegarde pas les données

J'apprends le développement de plugins, je suis coincé dans la sauvegarde des données de formulaire des options de plugins.

J'ai une page d'options de plugin, où trois champs demandant le nombre de vidéos, la hauteur et la largeur sont codés.

Lorsque je saisis les valeurs et que je clique sur enregistrer, il ne sauvegarde qu'une valeur, à savoir le nombre de vidéos.

Voici mon code

    <?php
add_action('admin_init', 'ozh_sampleoptions_init' );
add_action('admin_menu', 'ozh_sampleoptions_add_page');

// Init plugin options to white list our options
function ozh_sampleoptions_init(){
    register_setting( 'ozh_sampleoptions_options', 'ozh_sample', 'ozh_sampleoptions_validate' );
}

// Add menu page
function ozh_sampleoptions_add_page() {
    add_options_page('Youtube Video Settings', 'Youtube Video Settings', 'manage_options', 'ozh_sampleoptions', 'ozh_sampleoptions_do_page');
}

// Draw the menu page itself
function ozh_sampleoptions_do_page() {
    ?>
    <div class="wrap">
        <h2>Youtube Video Setting Options</h2>
        <form method="post" action="options.php">
            <?php settings_fields('ozh_sampleoptions_options'); ?>
            <?php $options = get_option('ozh_sample'); ?>
            <table class="form-table">
                <tr valign="top"><th scope="row">No of videos:</th>
                    <td><input type="text" name="ozh_sample[sometext]" value="<?php echo $options['sometext']; ?>" /></td>
                </tr>

                                <tr valign="top"><th scope="row">Height:</th>
                    <td><input type="text" name="ozh_sample[hgt]" value="<?php echo $options['hgt']; ?>" /></td>
                </tr>

                                <tr valign="top"><th scope="row">Width:</th>
                    <td><input type="text" name="ozh_sample[wid]" value="<?php echo $options['wid']; ?>" /></td>
                </tr>
            </table>
            <p class="submit">
            <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" />
            </p>
        </form>
    </div>
    <?php   

}

// Sanitize and validate input. Accepts an array, return a sanitized array.
function ozh_sampleoptions_validate($input) {
    // Our first value is either 0 or 1
    //$input['option1'] = ( $input['option1'] == 1 ? 1 : 0 );

    // Say our second option must be safe text with no HTML tags
    $input['sometext'] =  wp_filter_nohtml_kses($input['sometext']);
    $input['hgt'] =  wp_filter_nohtml_kses($input['hgt']);
    $input['wid'] =  wp_filter_nohtml_kses($input['wid']);

    return $input;
}
    $myoptions = get_option( 'ozh_sampleoptions_options' ); 
echo 'Niraj';
echo $options['sometext'];

?>

Ce n'est pas économiser la hauteur et la largeur.

Je sais que je dois travailler sur le code <input type='hidden' name='page_options' value='vidNO'/>, mais je ne l'obtiens pas,

Quelqu'un peut-il m'aider dans ce domaine ???

2
Niraj Chauhan

Premièrement, vous devriez vraiment stocker vos options sous forme de tableau dans wp_options. Mais si vous choisissez de ne pas le faire, vous devriez vraiment changer le nom de vos deuxième et troisième options. "height" et "width" sont totalement trop génériques et provoqueront presque certainement des conflits. Vous passez respectivement name="height" et name="width", mais je doute que WordPress associe "width" et "height" comme options appartenant à votre plugin.

Donc, en supposant que votre magasin propose vos options sous la forme plugin_plugin-slug_options, qui est un tableau:

<?php
$plugin_options = get_option( 'plugin_plugin-slug_options' );
?>

<tr><td>Number Of Videos:</td><td><input type="text" name="$plugin_options[vidNO]"  value="<?php echo get_option('vidNO');?>" <?php echo get_option('vidNO'); ?> />
</td></tr>

<tr><td>Height:</td><td><input type="text"  name="$plugin_options[height]" value="<?php echo get_option('height');?>" <?php echo get_option('height'); ?> />
</td></tr>


<tr><td>Width:</td><td><input type="text"  name="$plugin_options[width]" value="<?php echo get_option('width');?>" <?php echo get_option('width'); ?> />
</td></tr>

Mais vous devriez vraiment envisager d’utiliser l’API de configuration, du moins en utilisant register_setting() pour enregistrer votre tableau d’options et settings_fields() pour effectuer le gros travail dans votre formulaire de configuration.

0
Chip Bennett

Je recommande de consulter le tutoriel de Ozh sur Gestion des options de plug-in avec register_setting .

L'utilisation de l'API Paramètres est de loin le moyen le plus simple de gérer les options de plug-in.

1
Matthew Muro

WordPress fera le travail pour vous.

Exemple rapide de page d’option contenant un formulaire avec 1 champ.

add_action('admin_menu', 'c3m_myplugin_add_page');
function c3m_myplugin_add_page() {
    add_options_page( 'C3M Google Analytics', 'C3M Google Analytics', 'manage_options', 'c3m_myplugin', 'c3m_myplugin_option_page' );
}

// Draw the option page
function c3m_myplugin_option_page() {
    ?>
    <div class="wrap">
        <h2>Really Simple Google Analytics</h2>
        <form action="options.php" method="post">
            <?php settings_fields( 'c3m_myplugin_options' ); ?>
            <?php do_settings_sections( 'c3m_myplugin' ); ?>
            <input name="Submit" type="submit" value="Save Changes" />
        </form>
    </div>
    <?php
}

// Register and define the settings
add_action( 'admin_init', 'c3m_myplugin_admin_init' );
function c3m_myplugin_admin_init(){
    register_setting(
        'c3m_myplugin_options',
        'c3m_myplugin_options'
    );
    add_settings_section(
        'c3m_myplugin_main',
        'Google Analytics Web Property ID',
        'c3m_myplugin_section_text',
        'c3m_myplugin'
    );
    add_settings_field(
        'c3m_myplugin_text_string',
        'Enter text here',
        'c3m_myplugin_setting_input',
        'c3m_myplugin',
        'c3m_myplugin_main'
    );
}

// Draw the section header
function c3m_myplugin_section_text() {
    echo '<p>Enter your Google Analytics Web Property ID here ex: UA-XXXXXX-XX.</p>';
}
0
Chris_O