问题描述
我试图在我的小工具后端加入一个复选框。但是,在用户提交后,我无法获取值 (开或关) 。我认为这个值将被存储在 「esc_attr($ check)」(使用文本输入时),但是我无法检索它。
这是我现在正在尝试的:
public function form( $instance ) {
$check = isset( $instance[ 'check' ] ) ? $instance[ 'check' ] : 'off';
echo esc_attr( $check ); // If the input is type text it outputs the value
?>
<input class="widefat" id="<?php echo $this->get_field_id( 'check' ); ?>" name="<?php echo $this->get_field_name( 'check' ); ?>" type="checkbox" />
<?php
}
我该如何让这个工作?另外如何获取前端复选框的值?
最佳解决方案
首先,在功能小工具上:
function widget( $args, $instance ) {
extract( $args );
// Add this line
$your_checkbox_var = $instance[ 'your_checkbox_var' ] ? 'true' : 'false';
// Change 'your_checkbox_var' for your custom ID
// ...
}
功能更新:
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
// Add this line
$instance[ 'your_checkbox_var' ] = $new_instance[ 'your_checkbox_var' ];
// Change 'your_checkbox_var' for your custom ID
// ...
return $instance;
}
最后,在函数表单上添加:
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance[ 'your_checkbox_var' ], 'on' ); ?> id="<?php echo $this->get_field_id( 'your_checkbox_var' ); ?>" name="<?php echo $this->get_field_name( 'your_checkbox_var' ); ?>" />
<label for="<?php echo $this->get_field_id( 'your_checkbox_var' ); ?>">Label of your checkbox variable</label>
</p>
<!-- Remember to change 'your_checkbox_var' for your custom ID, as well -->
编辑:让我们看一个’About Us’ 小工具的完整代码,使用复选框来显示/隐藏头像图像:
class about_us extends WP_Widget {
function about_us() {
$widget_ops = array( 'classname' => 'about_us', 'description' => __( 'About Us', 'wptheme' ) );
$this->WP_Widget( 'about_us', __( 'About Us', 'wptheme' ), $widget_ops, $control_ops );
}
function widget( $args, $instance ) {
extract( $args );
$title = apply_filters( 'widget_title', $instance[ 'title' ] );
$text = $instance[ 'text' ];
// The following variable is for a checkbox option type
$avatar = $instance[ 'avatar' ] ? 'true' : 'false';
echo $before_widget;
if ( $title ) {
echo $before_title . $title . $after_title;
}
// Retrieve the checkbox
if( 'on' == $instance[ 'avatar' ] ) : ?>
<div class="about-us-avatar">
<?php echo get_avatar( get_the_author_meta( 'user_email' ), '50', '' ); ?>
</div>
<?php endif; ?>
<div class="textwidget">
<p><?php echo esc_attr( $text ); ?></p>
</div>
<?php
echo $after_widget;
}
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance[ 'title' ] = strip_tags( $new_instance[ 'title' ] );
$instance[ 'text' ] = strip_tags( $new_instance[ 'text' ] );
// The update for the variable of the checkbox
$instance[ 'avatar' ] = $new_instance[ 'avatar' ];
return $instance;
}
function form( $instance ) {
$defaults = array( 'title' => __( 'About Us', 'wptheme' ), 'avatar' => 'off' );
$instance = wp_parse_args( ( array ) $instance, $defaults ); ?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Title</label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $instance[ 'title' ] ); ?>" />
</p>
<!-- The checkbox -->
<p>
<input class="checkbox" type="checkbox" <?php checked( $instance[ 'avatar' ], 'on' ); ?> id="<?php echo $this->get_field_id( 'avatar' ); ?>" name="<?php echo $this->get_field_name( 'avatar' ); ?>" />
<label for="<?php echo $this->get_field_id( 'avatar' ); ?>">Show avatar</label>
</p>
<p>
<label for="<?php echo $this->get_field_id( 'text' ); ?>">About Us</label>
<textarea class="widefat" id="<?php echo $this->get_field_id( 'text' ); ?>" rows="10" cols="10" name="<?php echo $this->get_field_name( 'text' ); ?>"><?php echo esc_attr( $instance[ 'text' ] ); ?></textarea>
</p>
<?php
}
}
register_widget( 'about_us' );
测试和工作。
编辑 (2015 年 9 月至 08 日):重要!该小工具示例使用 PHP4 样式构造函数,但 WordPress 4.3 切换到 PHP5,因此您也应该切换构造函数。更多信息,here 。
如果您使用插件’theme-check’,您将看到一条通知,建议您使用__construct()
而不是 WP_Widget
。删除第一个功能并添加以下功能之一:
function __construct() {
parent::__construct(
'about_us', // Base ID
__( 'About US', 'wptheme' ), // Name
array( 'description' => __( 'About Us', 'wptheme' ), ) // Args
);
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。