ایجاد ابزارک

نحوه ایجاد و رجیستر ابزارک در این جلسه بحث خواهد شد.

درمثال زیر فیلد Text محتوای وارد شده توسط ابزارک را درقالب نمایش می دهد.

افزودن ابزارک

بعد از پیکربندی فایل های افزونه که در جلسات گذشته توضیح داده شد، فایل جدیدی ایجاد کنید برای مثال: WPVAR_Widget.class.php

داخل فایل کلاس خودمان را به کلاس WP_Widget اضافه میکنیم:

<?php 
// اضافه کردن کلاس به کلاس ابزارک وردپرس
class WPVAR_Widget extends WP_widget {
  // محل قرار گرفتن فانکش ها
}
 ?>

برای ساخت ابزارک فقط به چهار فانکشن زیر داخل کلاس نیاز داریم:

  • __construct
  • widget
  • form
  • update

ساختار کلی ساختار کلی

ساختار کلی فایل به این شکل می باشد:

<?php
// اضافه کردن کلاس به کلاس ابزارک وردپرس
class WPVAR_Widget extends WP_widget
{
    public function __construct()
    {
        // مشخصات ابزارک
    }

    public function widget($args, $instance)
    {
        // کدهایی که مسئول نمایش ابزارک به کاربران در قالب می باشند
    }

    public function form($instance)
    {
        // فرم ابزارک که در صفحه تنظیمات ابزارک نمایش داده خواهد شد
    }

    public function update($new_instance, $old_instance)
    {
        // ذخیره اطلاعات وارد شده در فانکش فرم
    }
}

بالا ↑

رجیستر ابزارک رجیستر ابزارک

فانکش construct مشخصات ابزارک را ثبت می کند. محتویات فانکشن برای ثبت ابزارک:

    public function __construct()
    {
        $widget_ops = array(
              'classname'                   => 'wpvar_widget_entries', // نام کلاس ابزارک
              'description'                 => esc_attr__('اولین ابزارک من', 'wpvar-widget'), // توضیحات ابزارک
              'customize_selective_refresh' => true,
          );
        parent::__construct('wprand-widget', esc_attr__('ابزارک من', 'wpvar-widget'), $widget_ops); // نام ابزارک
        $this->alt_option_name = 'wpvar_widget';


        add_action('widgets_init', function () {
            register_widget('WPVAR_Widget'); // ثبت ابزارک با نام کلاس
        });
    }

بالا ↑

صفحه تنظیمات ابزارک صفحه تنظیمات ابزارک

در این مثال ابزارک ما فیلد متن را برای کاربران نمایش می دهد. پس لازم است در صفحه تنظیمات ابزارک فرم مربوط به متن فیلد به مدیر وردپرس نمایش داده شود تا متن دلخواه خود را وارد کند:

    public function form( $instance ) {
        if ( isset( $instance[ 'title' ] ) ) {
            $title = $instance[ 'title' ];
        }
        else {
            $title = __( 'عنوان تنظیمات ابزارک', 'wpvar-widget' ); // عنوان گزنه فیلد متن
        }
        ?>
        <p>
            <label for="<?php echo $this->get_field_name( 'title' ); ?>"><?php _e( 'عنوان:' ); ?></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( $title ); ?>" />
         </p>
    <?php
    }

فانکشن update تنظیمات وارد شده در فانکش فرم را ذخیره می کند:

    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = ( !empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
 
        return $instance;
    }

بالا ↑

نمایش در قالب نمایش در قالب

و درنهایت فانکشنی که ابزارک و محتویاتش را در قالب به کاربر نمایش می دهد:

    public function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters( 'widget_title', $instance['title'] );
 
        echo $before_widget;
        if ( ! empty( $title ) ) {
            echo $before_title . $title . $after_title; // نمایش متن وارد شده در تنظیمات ابزارک
        }
        echo __( 'اولین ابزارک من', 'wpvar-widget' );
        echo $after_widget;
    }

بالا ↑

نمونه کد نمونه کد

کد نهایی:

<?php
// اضافه کردن کلاس به کلاس ابزارک وردپرس
class WPVAR_Widget extends WP_widget
{
    public function __construct()
    {
        $widget_ops = array(
              'classname'                   => 'wpvar_widget_entries', // نام کلاس ابزارک
              'description'                 => esc_attr__('اولین ابزارک من', 'wpvar-widget'), // توضیحات ابزارک
              'customize_selective_refresh' => true,
          );
        parent::__construct('wprand-widget', esc_attr__('ابزارک من', 'wpvar-widget'), $widget_ops); // نام ابزارک
        $this->alt_option_name = 'wpvar_widget';


        add_action('widgets_init', function () {
            register_widget('WPVAR_Widget'); // ثبت ابزارک با نام کلاس
        });
    }

    public function widget( $args, $instance ) {
        extract( $args );
        $title = apply_filters( 'widget_title', $instance['title'] );
 
        echo $before_widget;
        if ( ! empty( $title ) ) {
            echo $before_title . $title . $after_title; // نمایش متن وارد شده در تنظیمات ابزارک
        }
        echo __( 'اولین ابزارک من', 'wpvar-widget' );
        echo $after_widget;
    }

    public function form( $instance ) {
        if ( isset( $instance[ 'title' ] ) ) {
            $title = $instance[ 'title' ];
        }
        else {
            $title = __( 'عنوان تنظیمات ابزارک', 'wpvar-widget' ); // عنوان گزنه فیلد متن
        }
        ?>
        <p>
            <label for="<?php echo $this->get_field_name( 'title' ); ?>"><?php _e( 'عنوان:' ); ?></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( $title ); ?>" />
         </p>
    <?php
    }

    public function update( $new_instance, $old_instance ) {
        $instance = array();
        $instance['title'] = ( !empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
 
        return $instance;
    }
}

فراموش نکنید که در فایل اصلی ابزارک، فایل کلاس را فراخوانی کنید:

if (! class_exists('WPVAR_Widget')) {
    include plugin_dir_path(__FILE__) . 'inc/WPVAR_Widget.class.php';
}
new WPWAR_Widget();