উইজেট ব্যাকএন্ড ফর্মে চেকবক্সটি কীভাবে অন্তর্ভুক্ত করবেন?


17

আমি আমার উইজেটের শেষ প্রান্তে একটি চেকবক্স অন্তর্ভুক্ত করার চেষ্টা করছি। তবে ব্যবহারকারী এটি জমা দেওয়ার পরে আমি মান (চালু বা বন্ধ) পেতে পারি না। আমি ভেবেছিলাম মানটি "এসএস_এটার ($ চেক)" (যেমন পাঠ্যের ইনপুট ব্যবহার করার সময় হয়) তে সংরক্ষণ করা হবে তবে আমি এটি পুনরুদ্ধার করতে পারছি না।

এটিই এখন আমি চেষ্টা করছি:

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): গুরুত্বপূর্ণ! এই উইজেটের উদাহরণটি পিএইচপি 4 স্টাইলের কনস্ট্রাক্টর ব্যবহার করে, তবে ওয়ার্ডপ্রেস ৪.৩ পিএইচপি 5 এ স্যুইচ করে, তাই আপনারও কনস্ট্রাক্টর স্যুইচ করা উচিত। আরও তথ্য, এখানে

আপনি যদি 'থিম-চেক' প্লাগইন ব্যবহার করেন তবে আপনি একটি নোটিশ পাবেন যা আপনাকে __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']ফাংশন ফর্মের জন্য ডিফল্ট অ্যাসাইনমেন্ট যুক্ত করা উচিত ।
গাজাজ্যাপ

ডিফল্ট অ্যাসাইনমেন্টটি 'your_checkbox_var' এর পরিবর্তে 'অবতার'। এটিকে আরও পরিষ্কার করার জন্য আমি আসলে 'তোমার_চেকবক্স_ভার' লিখেছি। যাই হোক আমি ডিফল্ট উদাহরণ দিয়ে আমার উত্তরটি পরিবর্তন করব। পরামর্শের জন্য আপনাকে ধন্যবাদ :)
জেরার্ড

@ গার্ড, ডিফল্টরূপে অবতারটি সেট করার চেষ্টা করুন এবং আপনি এটি বন্ধ করতে সক্ষম হবেন না
বেন

আমি যখন ফક્શનটিতে টিআরইউ এবং ফালসোর পরিবর্তে 'অন' এবং 'অফ' ব্যবহার করতাম তখন এটি আমার জন্য কাজ করেছিল। আমি যদি বিবৃতিটির জন্য একটি সাধারণ চেকও ব্যবহার করি .. (যদি 'অন' = $ মাইনিস্ট্যান্স) {... আমার কোড ...}
দক্ষ পরিবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.