Widget arka uç formuna onay kutusu nasıl eklenir?


17

Widget arka ucuma bir onay kutusu dahil etmeye çalışıyorum. Ancak kullanıcı gönderdikten sonra değeri (açık veya kapalı) alamıyorum. Ben değer (bir metin girişi kullanırken olduğu gibi) "esc_attr ($ check)" saklanır düşündüm, ama ben alınamıyor.

Ben şimdi deniyorum:

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 
}

Bunu nasıl çalıştırabilirim? Ayrıca ön uçtaki onay kutusunun değerini nasıl alabilirim?

Yanıtlar:


22

İlk olarak, fonksiyon widget'ında :

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
    // ...
}

Açık fonksiyon güncelleme :

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

Son olarak, işlev formuna şunu ekleyin:

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

DÜZENLEME: Bir avatar resmini göstermek / gizlemek için bir onay kutusunu kullanarak 'Hakkımızda' widget'ının tam kodunu görelim:

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' );

Test edilmiş ve çalışıyor.

Edit (2015-Sept-08): Önemli! Bu widget örneği PHP4 stili yapıcıları kullanır, ancak WordPress 4.3 PHP5'e geçer, bu yüzden yapıcıları da değiştirmelisiniz. Daha fazla bilgi burada .

'Theme-check' eklentisini kullanırsanız, bunun yerine kullanmanızı öneren bir uyarı görürsünüz . İlk işlevi kaldırın ve aşağıdakileri ekleyin:__construct()WP_Widget

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

Evet, avatar resmini etkinleştirmek / devre dışı bırakmak için bir widget üzerinde kullanıyorum. Benim için çok iyi çalışıyor.
Gerard

Tamam. Bence daha fazla netlik için $instance['your_checkbox_var']fonksiyon formuna varsayılan atamayı cevapta eklemelisiniz .
gmazzap

Varsayılan atama, 'your_checkbox_var' yerine 'avatar' şeklindedir. Aslında, daha netlik için 'your_checkbox_var' yazdım. Her neyse, cevabımı varsayılan örnekle değiştireceğim. Tavsiye için teşekkürler :)
Gerard

@Gerard, avatarı varsayılan olarak açmayı deneyin ve kapatamayacaksınız
Benn

Bu, işlevde TRUe ve Falso yerine 'açık' ve 'kapalı' kullandığımda benim için çalıştı. Ben de (= $ MyInstance 'açık') eğer .. eğer deyimi için basit çek kullanılan {... Benim kod ...}
Nitelikli Aile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.