위젯 백엔드 양식에 확인란을 포함시키는 방법은 무엇입니까?


17

위젯 백엔드에 확인란을 포함하려고합니다. 그러나 사용자가 제출 한 후에는 값을 얻을 수 없습니다. 텍스트 입력을 사용할 때와 같이 값이 "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 
}

이 기능을 작동 시키려면 어떻게해야합니까? 또한 프런트 엔드에서 확인란의 값을 얻는 방법은 무엇입니까?

답변:


22

먼저 함수 위젯에서 :

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 -->

편집 : 아바타 이미지를 표시하거나 숨기는 확인란을 사용하여 '회사 소개'위젯의 전체 코드를 보자.

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로 전환되므로 생성자도 전환해야합니다. 자세한 내용은 여기를 참조하십시오 .

'theme-check'플러그인 을 사용하면 대신 대신 사용하라는 알림 이 표시 __construct()됩니다 WP_Widget. 첫 번째 기능을 제거하고 다음 기능을 추가하십시오.

function __construct() {
    parent::__construct(
        'about_us', // Base ID
        __( 'About US', 'wptheme' ), // Name
        array( 'description' => __( 'About Us', 'wptheme' ), ) // Args
    );
}

예, 위젯에서 사용하여 아바타 사진을 활성화 / 비활성화합니다. 그것은 나를 위해 아주 잘 작동합니다.
Gerard

확인. 더 명확하게 대답하면 $instance['your_checkbox_var']함수 형식에 대한 기본 할당을 대답에 추가해야한다고 생각합니다 .
gmazzap

기본 할당은 'your_checkbox_var'대신 'avatar'입니다. 실제로 더 명확하게하기 위해 'your_checkbox_var'을 썼습니다. 어쨌든 기본 예제로 대답을 수정하겠습니다. 조언을 주셔서 감사합니다 :)
제라드

@Gerard, 기본적으로 아바타를 설정해보십시오. 그러면 아바타를 끌 수 없습니다
Benn

fuction에서 TRUe와 Falso 대신 'on'과 'off'를 사용할 때 이것은 나를 위해 일했습니다. 또한 if 문에 대한 간단한 검사를 사용했습니다 .. if ( 'on'= $ myinstance) {... my code ...}
The Skilled Family
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.