1

我正在使用自定义小部件创建 wordpress 主题,所以我想制作一个带有 3 个单选按钮的示例小部件,到目前为止一切都很好,但是 update() 函数不能很好地工作这里是我的代码:

function update( $new_instance, $old_instance ) {

$instance = $old_instance;

$instance['default-image'] = strip_tags($new_instance['default-image']);
$instance['post-image'] =  strip_tags($new_instance['post-image']);
$instance['link-image'] =  strip_tags($new_instance['link-image']);

return $instance;

}

function form( $instance ) {

$defaults = array('default-image' => true, 'post-image' => false, 'link-image' => false );
$instance = wp_parse_args( (array) $instance, $defaults ); 

?>

<p>
    <input name="option" type="radio" <?php checked($instance['default-image']); ?> id="<?php echo $this->get_field_id('default-image'); ?>"/> 
    <label for="<?php echo $this->get_field_id( 'default-image' ); ?>"><?php _e('Default image'); ?></label>
</p>
<p>
    <input name="option" type="radio" <?php checked( $instance['post-image']); ?> id="<?php echo $this->get_field_id('post-image'); ?>" /> 
    <label for="<?php echo $this->get_field_id( 'post-image' ); ?>"><?php _e('First post image'); ?></label>
</p>
<p>
    <input name="option" type="radio" <?php checked( $instance['link-image']); ?> id="<?php echo $this->get_field_id('link-image') ?>" /> 
    <label for="<?php echo $this->get_field_id( 'link-image' ); ?>"><?php _e('Image from link'); ?></label>
</p>

我将在 widget() 中为它们提供 $instance['default-image']、$instance['post-image']、$instance['link-image'],但现在在“保存”按钮或(刷新在管理页面上)选定的选项消失。如果有人能告诉我我错在哪里,我将不胜感激。

4

2 回答 2

1

在投资几个小时后,我发现这个问题的答案是没有明确的方法来做到这一点。“单选”按钮上的名称属性,应该与 foreach 按钮相同,但要正常工作(保存和获取保存的值),名称应由 wordpress 通过 echo ($this->get_field_name('default/post/link-image '); 我找到了另一个使用数值的解决方案:更新函数():

function update( $new_instance, $old_instance ) {

    $instance = $old_instance;

    $instance['rating'] = ( isset( $new_instance['rating'] ) && $new_instance['rating'] > 0 && $new_instance['rating'] < 4 ) ? (int) $new_instance['rating'] : 0;

    return $instance;
}

和 :

function form( $instance ) {

        $instance = wp_parse_args( (array)$instance, $defaults ); 
        //default value
        $rating = ( isset( $instance['rating'] ) && is_numeric( $instance['rating'] ) ) ? (int) $instance['rating'] : 1;
        ?>
            <p>
            <legend>Use image for:</legend>
                <input type="radio" id="<?php echo ($this->get_field_id( 'rating' ) . '-1') ?>" name="<?php echo ($this->get_field_name( 'rating' )) ?>" value="1" <?php checked( $rating == 1, true) ?>>
                <label for="<?php echo ($this->get_field_id( 'rating' ) . '-1' ) ?>"><?php _e('Default image') ?></label> <br />

                <input type="radio" id="<?php echo ($this->get_field_id( 'rating' ) . '-2') ?>" name="<?php echo ($this->get_field_name( 'rating' )) ?>" value="2" <?php checked( $rating == 2, true) ?>>
                <label for="<?php echo ($this->get_field_id( 'rating' ) . '-2' ) ?>"><?php _e('First image post') ?></label> <br />

                <input type="radio" id="<?php echo ($this->get_field_id( 'rating' ) . '-3') ?>" name="<?php echo ($this->get_field_name( 'rating' )) ?>" value="3" <?php checked( $rating == 3, true) ?>>
                <label for="<?php echo ($this->get_field_id( 'rating' ) . '-3' ) ?>"><?php _e('Image from internet. Note please save first') ?></label> <br />  
            </p>
    <?php
    }
于 2013-06-19T14:51:48.373 回答
0

strip_tags真的需要这个功能吗?

function update($new, $old) {
    return $new;
}

我正在将它与我的小部件一起使用^^

于 2013-06-19T14:27:06.920 回答