विजेट बैकएंड फॉर्म में चेकबॉक्स कैसे शामिल करें?


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-सेप्ट -08): महत्वपूर्ण! वह विजेट उदाहरण PHP4 शैली के निर्माणकर्ताओं का उपयोग करता है, हालांकि वर्डप्रेस 4.3 PHP5 पर स्विच करता है, इसलिए आपको निर्माणकर्ताओं को भी स्विच करना चाहिए। अधिक जानकारी, यहाँ

यदि आप प्लगइन 'थीम-चेक' का उपयोग करते हैं, तो आपको एक नोटिस दिखाई देगा जो आपको __construct()इसके बजाय उपयोग करने का सुझाव देगा WP_Widget। पहला फ़ंक्शन निकालें और निम्न जोड़ें:

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

हां, मैं अवतार चित्र को सक्षम / अक्षम करने के लिए एक विजेट पर इसका उपयोग करता हूं। यह मेरे लिए बहुत अच्छा काम करता है।
गेरार्ड

ठीक है। मुझे लगता है कि अधिक क्लियरनेस के लिए आपको $instance['your_checkbox_var']फंक्शन के फॉर्म के लिए डिफॉल्ट असाइनमेंट के जवाब में जोड़ना चाहिए ।
gmazzap

डिफ़ॉल्ट असाइनमेंट 'your_checkbox_var' के बजाय 'अवतार' है। मैंने वास्तव में इसे और अधिक स्पष्ट करने के लिए 'your_checkbox_var' लिखा था। वैसे भी मैं डिफ़ॉल्ट उदाहरण के साथ अपने उत्तर को संशोधित करने वाला हूं। सलाह के लिए धन्यवाद :)
जेरार्ड

@ गर्ड, अवतार को डिफ़ॉल्ट रूप से सेट करने का प्रयास करें और आप इसे बंद करने में सक्षम नहीं होंगे
Benn

मेरे लिए यह तब काम आया जब मैंने फक्शन में TRUe और Falso के बजाय 'on' और 'off' का इस्तेमाल किया। मैंने इफ स्टेटमेंट के लिए एक सिंपल चेक का भी इस्तेमाल किया है .. अगर ('पर' = $ myinstance) {... मेरा कोड ...}
स्किल्ड फैमिली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.