Can't add options to db

时间:2014-01-31 作者:Geoff

我正试图为我的wordpress网站创建一个非常简单的选项页面,其中只包含一个选项-货币的兑换率。我有以下代码:

add_action(\'admin_init\', \'currency_options_set\');
add_action( \'admin_menu\', \'admin_menu\' );

function admin_menu () {
    add_options_page( \'Currency Options\',\'Currency Options\',\'manage_options\',\'options_currency\', \'settings_page\' );
}

function currency_options_set(){
    register_setting( \'currency_options_group\', \'currency_options\' );
}

function  settings_page () {

    $default_options = array( \'currency_eur\' => "1.1" );
    $options = get_option(\'currency_options\', $default_options);
    ?>
    <form method="post" action="options.php">
    <?php

        settings_fields("currency_options_group"); ?>

        <table class="form-table">
            <tr>
                <th scope="row">EUR:</th>
                <td>
                    <input type="text" name="currency_options_group[currency_eur]" size="40" value="<?php echo stripslashes($options["currency_eur"]); ?>" />
                </td>
            </tr>
        </table>

        <p class="submit">
            <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
        </p>
    </form>
<?php
}
新选项页面显示,我可以看到表单,但当我提交表单时,没有任何选项保存到wp\\U选项表中。我错过了什么?

2 个回复
SO网友:1fixdotio

刚刚测试了您的代码,在输入名称中发现了一个错误。改变currency_options_groupcurrency_options 将使其工作。修改后的代码:

add_action(\'admin_init\', \'currency_options_set\');
add_action( \'admin_menu\', \'admin_menu\' );

function admin_menu () {
    add_options_page( \'Currency Options\',\'Currency Options\',\'manage_options\',\'options_currency\', \'settings_page\' );
}

function currency_options_set(){
    register_setting( \'currency_options_group\', \'currency_options\' );
}

function  settings_page () {

    $default_options = array( \'currency_eur\' => "1.1" );
    $options = get_option(\'currency_options\', $default_options);
    ?>
    <form method="post" action="options.php">
    <?php

        settings_fields("currency_options_group"); ?>

        <table class="form-table">
            <tr>
                <th scope="row">EUR:</th>
                <td>
                    <input type="text" name="currency_options[currency_eur]" size="40" value="<?php echo stripslashes($options["currency_eur"]); ?>" />
                </td>
            </tr>
        </table>

        <p class="submit">
            <input type="submit" class="button-primary" value="<?php _e(\'Save Changes\') ?>" />
        </p>
    </form>
<?php
}

SO网友:fischi

你有点搞砸了<input> 选项页的字段。

在您的情况下name 输入的名称应该是要保存的选项的名称,而不是options_group, 以及输出应该是option, 不是一个$arrayoptions_group.

选项如下:

$default_options = \'1.1\';
$options = get_option(\'currency_options\', $default_options);
您的正确<input> 是这样的:

<input type="text" name="currency_options" size="40" value="<?php echo stripslashes($options); ?>" />
Wordpress自动知道currency\\u options是currency\\u options\\u组的一部分(通过register_setting), 你不需要在这里使用它。

这个options_group 在中使用Settings API 让您自动生成wp-admin 通过注册设置并使用一些回调来控制输出,设置页面。

一个简单的设置可以以您的方式更轻松、更快地完成。

结束

相关推荐