选择保存更改后未返回的字段值

时间:2017-03-14 作者:Jase Warner

我一直在四处寻找这个问题的答案,但到目前为止没有运气……如果以前有人回答过,请原谅我!

我目前正在编写一个插件,我第一次使用WordPress插件样板。信不信由你,我也是第一次在所述插件的管理设置页面中使用选择字段。

我遇到的问题是,当我保存更改时,虽然我的所有输入字段都返回其保存的值,但选择字段不会。

下面是我创建select field函数以在插件中重用的地方:

/**
 * Creates a select field.
 *
 * @since       1.0.0
 */
public function field_select( $args ) {

    $defaults[\'aria\']           = \'\';
    $defaults[\'blank\']          = \'\';
    $defaults[\'class\']          = \'\';
    $defaults[\'context\']        = \'\';
    $defaults[\'id\']             = \'\';
    $defaults[\'description\']    = \'\';
    $defaults[\'label\']          = \'\';
    $defaults[\'name\']           = $this->plugin_name . \'-options[\' . $args[\'id\'] . \']\';
    $defaults[\'selections\']     = array();
    $defaults[\'value\']          = \'\';

    apply_filters( $this->plugin_name . \'-field-select-options-defaults\', $defaults );

    $atts = wp_parse_args( $args, $defaults );

    if ( ! empty( $this->options[$atts[\'id\']] ) ) {

        $atts[\'value\'] = $this->options[$atts[\'id\']];

    }

    if ( empty( $atts[\'aria\'] ) && ! empty( $atts[\'description\'] ) ) {

        $atts[\'aria\'] = $atts[\'description\'];

    } elseif ( empty( $atts[\'aria\'] ) && ! empty( $atts[\'label\'] ) ) {

        $atts[\'aria\'] = $atts[\'label\'];

    }

    include( plugin_dir_path( __FILE__ ) . \'partials/\' . $this->plugin_name . \'-admin-field-select.php\' );

}
这里是我添加设置字段的地方,使用add_settings_field:

add_settings_field(
        \'background\',
        \'Background Colour\',
        array( $this, \'field_select_text\' ),
        $this->plugin_name . \'-customise\',
        $this->plugin_name . \'-customise\',
        array(
            \'name\'              => \'background\',
            \'id\'                => \'background\',
            \'selections\'        => array(
                0 => array(
                    \'label\' => \'Brand\',
                    \'value\' => \'brand\'
                ),
                1 => array(
                    \'label\' => \'Transparent\',
                    \'value\' => \'transparent\'
                ),
                2 => array(
                    \'label\' => \'Custom\',
                    \'value\' => \'custom\'
                )
            )
        )
    );
最后,这里是select字段的标记:

<select aria-label="<?php esc_attr( $atts[\'aria\'] ); ?>"
    class="<?php echo esc_attr( $atts[\'class\'] ); ?>"
    id="<?php echo esc_attr( $atts[\'id\'] ); ?>"
    name="<?php echo esc_attr( $atts[\'name\'] ); ?>">

<?php
if ( ! empty( $atts[\'blank\'] ) ) {
    ?>

    <option value><?php esc_html_e( $atts[\'blank\'], $this->plugin_name ); ?></option>

    <?php
}

foreach ( $atts[\'selections\'] as $selection ) {

    if ( is_array( $selection ) ) {

        $label = $selection[\'label\'];
        $value = $selection[\'value\'];

    } else {

        $label = strtolower( $selection );
        $value = strtolower( $selection );

    }
    ?>

    <option value="<?php echo esc_attr( $value ); ?>" <?php selected( $atts[\'value\'], $value ); ?>>
        <?php esc_html_e( $label, $this->plugin_name ); ?>
    </option>

    <?php
}
?>

有人有什么想法吗?用一个简单的解决方案,这可能是显而易见的,我一定会踢自己。但是请你。帮助我

1 个回复
最合适的回答,由SO网友:Jase Warner 整理而成

哦,我在踢自己。选择字段没有保存,因为出于某种奇怪的原因,在我处理这个问题的时候,它们的名称格式不正确,即。background 而不是plugin-name[background]. 这样一个简单的解决方案,一个明显的错误!

相关推荐

AWS Bitnami WordPress-拒绝向用户发送SELECT命令

我正在使用亚马逊网络服务(AWS)Wordpress,它使用Bitnami。我创建了一个测试模板,编写了一个SELECT语句来测试从数据库中提取数据,上载了模板,为页面选择了模板,并对其进行了预览。以下是结果。WordPress数据库错误:[为“wp\\u comments”表选择拒绝给用户“bn\\u WordPress”@“localhost”的命令]从wp\\ux中选择*。wp\\U注释,其中注释ID=2这是模板PHP文件中的语句。$id = "2"; $sql = &q