我一直在四处寻找这个问题的答案,但到目前为止没有运气……如果以前有人回答过,请原谅我!
我目前正在编写一个插件,我第一次使用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
}
?>
有人有什么想法吗?用一个简单的解决方案,这可能是显而易见的,我一定会踢自己。但是请你。帮助我