WordPress插件表单未保存数据

时间:2011-05-20 作者:Niraj Chauhan

我正在学习插件开发,我一直在保存插件选项表单数据。

我有一个插件选项页面,其中有三个字段要求编码视频数量、高度和宽度。

当我在其中输入值并点击save时,它只保存一个值,即视频数。

这是我的密码

    <?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\'/> 代码,但没有得到它,

有人能帮我吗???

3 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

首先,您确实应该将选项存储为wp_options. 但如果你选择不这样做,你真的应该改变你的第二个和第三个选择的名称;“高度”和“宽度”太笼统了,几乎肯定会引起冲突。你通过了name="height"name="width", 但我怀疑WordPress是否将“宽度”和“高度”关联为属于插件的选项。

因此,假设您的存储选项为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>
但您确实应该考虑使用设置API,至少在使用register_setting() 注册选项数组,以及settings_fields() 在你的设置表中进行举重。

SO网友:Matthew Muro

我建议您在上查看Ozh的教程Handling Plugin Options with register_setting.

利用Settings API 是迄今为止处理插件选项最简单的方法。

SO网友:Chris_O

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>\';
}

结束

相关推荐

GPL and plugins

插件开发中心说:“您的插件必须与GPLv2兼容。”。但我发现Topsy插件在GPLv3下。http://www.gnu.org/licenses/rms-why-gplv3.html 声明GPLv2和GPLv3不兼容。那么这应该被允许吗?我想使用Topsy插件中的一些代码。那么,我应该在GPLv2或GPLv3下发布插件吗??