web-dev-qa-db-ja.com

Wordpressのプラグインフォームでデータが保存されない

私はプラグインの開発を学んでいます、私はプラグインオプションフォームデータを保存することに行き詰まっています。

私はビデオの数、高さと幅を尋ねる3つのフィールドがコード化されているプラ​​グインオプションページを持っています。

値を入力して保存すると、ただ1つの値、つまりビデオ数が保存されます。

これが私のコードです

    <?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'];

?>

高さと幅を節約できません。

私は<input type='hidden' name='page_options' value='vidNO'/>コードに取り組まなければならないことを知っています、しかしそれを手に入れません、

誰もがこれで私を手伝ってくれる?

2
Niraj Chauhan

まず、あなたは本当にあなたのオプションをwp_optionsの配列として保存するべきです。しかし、そうしないことを選択した場合は、2番目と3番目のオプションの名前を実際に変更する必要があります。 「高さ」と「幅」はまったく一般的なものであり、ほとんど間違いなく衝突を引き起こすでしょう。あなたはそれぞれname="height"name="width"を渡していますが、WordPressがあなたのプラグインに属するオプションとして "width"と "height"を関連付けているのではないかと思います。

それで、あなたのストアをあなたのオプションがplugin_plugin-slug_optionsとして配列だとしましょう。それは配列です:

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

しかし、少なくともregister_setting()を使用してオプション配列を登録し、settings_fields()を設定フォームで多大な効果を上げるためには、Settings APIの使用を検討する必要があります。

0
Chip Bennett

register_setting でプラグインオプションを処理するにはOzhのチュートリアルをチェックすることをお勧めします。

設定API を利用するのが、プラグインオプションを扱う最も簡単な方法です。

1
Matthew Muro

WordPressがあなたのために仕事をします。

1フィールドのフォームを含むオプションページの簡単な例。

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