it-swarm.com.de

Wordpress-Plugin-Formular speichert keine Daten

Ich lerne die Entwicklung von Plugins und bin fest entschlossen, die Plugin-Optionen in Form von Daten zu speichern.

Ich habe eine Plugin-Optionsseite, auf der drei Felder für die Anzahl der Videos, die Höhe und die Breite codiert sind.

Wenn ich die Werte eingebe und auf Speichern drücke, speichere ich nur einen Wert, das heißt die Anzahl der Videos.

Hier ist mein 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'];

?>

Es spart nicht Höhe und Breite.

Ich weiß, ich muss an <input type='hidden' name='page_options' value='vidNO'/> Code arbeiten, bekomme ihn aber nicht,

Kann mir jemand dabei helfen ???

2
Niraj Chauhan

Zunächst sollten Sie Ihre Optionen wirklich als Array in wp_options speichern. Wenn Sie dies jedoch nicht möchten, sollten Sie die Namen Ihrer zweiten und dritten Option wirklich ändern. "height" und "width" sind völlig zu allgemein und verursachen mit ziemlicher Sicherheit Konflikte. Sie übergeben name="height" bzw. name="width", aber ich bezweifle, dass WordPress "width" und "height" als Optionen für Ihr Plugin verwendet.

Unter der Annahme, dass Ihr Geschäft Ihre Optionen als plugin_plugin-slug_options enthält, ist dies ein Array:

<?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>

Sie sollten jedoch in Betracht ziehen, die Einstellungs-API zu verwenden, zumindest insofern, als Sie register_setting() zum Registrieren Ihres Optionsarrays und settings_fields() zum Ausführen des umfangreichen Hebevorgangs in Ihrem Einstellungsformular verwenden.

0
Chip Bennett

Ich empfehle das Tutorial von Ozh über Handling Plugin Options mit register_setting .

Die Verwendung der Settings API ist bei weitem die einfachste Möglichkeit, mit Plugin-Optionen umzugehen.

1
Matthew Muro

WordPress erledigt die Arbeit für Sie.

Schnelles Beispiel einer Optionsseite mit einem Formular mit 1 Feld.

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