نمایش نتایج: از شماره 1 تا 4 , از مجموع 4

موضوع: چگونه یک افزونه برای وردپرس بنویسیم؟

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #4
    عضو جدید
    تاریخ عضویت
    Jun 2011
    نوشته ها
    7
    تشکر تشکر کرده 
    1
    تشکر تشکر شده 
    16
    تشکر شده در
    4 پست

    پیش فرض پاسخ : چگونه یک افزونه برای وردپرس بنویسیم؟

    خب حالا زمان اضافه کردن ابزارکیه که وعدشو داده بودیم.
    برای ساختن یک ابزارک از کلاس WP_Widget استفاده میکنیم، این کلاس در فایل WP_Widget.php در پوشه wp_include قرار داره.
    به گفته خود کلاس WP_Widget هر ابزارکی که می خوایم بسازیم باید WP_Widget رو گسترش بدیم یعنی باید کلاسی رو تعریف کنیم که از WP_Widget مشتق شده باشه (البته این طور که من فهمیدم،اگه جایی اشتباه میگم دوستان تصحیح کنند).
    خب ما کلاس hadistat_WP_Widget رو که از WP_Widget مشتق شده رو میسازیم:
    کد PHP:
            // New Style widgets
        
    class hadistat_WP_Widget extends WP_Widget {
        
            function 
    hadistat_WP_Widget() {  
                
    $this->__construct('wp_hadistat''آمار', array('description' => 'یک آمار گیر کوچک برای وبسایت شما!' ));  
            } 
    ابتدا سازنده کلاس که باید همنام کلاس باشه برای تعیین مقادیر اولیه ای که نیاز داریم ،با استفاده از تابع construct__ که در کلاس WP_Widget تعریف شده.
    تابع __construct چند پارامتر دارد که تعیین دو تاشون الزامیه:

    $id_base : یک نام منحصر به فرد برای ابزارک (اگه مشخصش نکنید به صورت خودکار قسمتی از نام کلاستون به عنوان id_base انتخاب میشه).
    $name : نامی که در قسمت مدیریت ابزارک مشاهده می کنید.
    برای توضیحات بیشتر به فایل WP_Widget.php مراجعه کنید.

    برای نمایش تنظیمات ابزارک تابع form رو ایجاد می‌کنیم و تنظیمات مورد نظر رو با یک آرایه تعریف میکنیم:
    کد PHP:
            // Widget Form in admin page
            
    function form$instance ) {
                
    /* Set up some default widget settings. */
                
    $instance wp_parse_args( (array) $instance, array( 'online'  => true 'title'=> 'آمار''today' => true'month' => true ) ); 
                
    $title esc_attr($instance['title']);
                
    ?> 
    در هنگام مقدار دهی به این آرایه (در اینجا instance) حتما از تابع wp_parse_args استفاده کنید ،این تابع دو آرایه دریافتی رو با هم ترکیب میکنه اگر این کار رو نکنید زمانی که مقدار متغیر رو در قسمت مدیریت ابزارک تغییر بدید و برروی ذخیره کلیک کنید مشاهده میکنید که تنظیمات مورد نظر تغییر نمیکنند چون وردپرس برای نمایش تنظیمات یک ابزارک از تابع form استفاده میکنه ولی و قتی تغییرات باتابع update انجام میشه با توجه به اینکه در هنگام فراخوانی تابع form مقادیر متغیر دوباره جاگذاری میشن تغییر ایجاد شده اعمال نمیشن.
    در خط بعدی تابع esc_attr مقدار title رو میگیره و مقادیر < > & " ' رو برای نمایش در صفحه وب اینکد میکنه.

    خب حالا زمان استفاده از یک مقدار html:
    کد PHP:
                <p>
                    <label> عنوان:
                    <input id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title');?>" type="text" class="widefat" value="<?php echo $title?>" />
                    </label>
                </p>
                
                <p>
                    <label >
                    <input id="<?php echo $this->get_field_id('online'); ?>" name="<?php echo $this->get_field_name('online'); ?>" type="checkbox" value="1" <?php checked(true $instance['online']); ?> /> <?php echo 'آنلاین'?>
                    </label>
                </p>
                
                <p>
                    <label >
                    <input id="<?php echo $this->get_field_id('today'); ?>" name="<?php echo $this->get_field_name('today'); ?>" type="checkbox" value="1" <?php checked(true $instance['today']); ?> /> <?php echo 'بازدید امروز'?>
                    </label>
                </p>
                
                <p>
                    <label >
                    <input id="<?php echo $this->get_field_id('month'); ?>" name="<?php echo $this->get_field_name('month'); ?>" type="checkbox" value="1" <?php checked(true $instance['month']); ?> /> <?php echo 'بازدید این ماه'?>
                    </label>
                </p>
                
            <?php 
            
    }
    توابع get_field_name و get_field_id که از اسمشون پیداست چیکار میکنن! و حتما هم باید استفاده بشن به این دلیل:
    This function should be used in form() methods to create (name,id) attributes for fields to be saved by update()

    تابع checked دو مقدار رو میگیره و اگر هر دو یکسان بودند مقدار "checked="checked رو برگشت میده.

    خب این از تابع form ،حالا ابزارک ما در قسمت مدیریت با تمامی تنظیماتش نمایش داده میشه اما با تغییر تنظیمات و کلیک بر روی دکمه ذخیره تغییری ایجاد نمیشه برای ذخیره تغییرات نیاز به تابع update داریم:
    کد PHP:
            function update$new_instance$old_instance ) {
            
    $instance $old_instance;
            
    $instance['online']= (bool) $new_instance['online'];
            
    $instance['today']= (bool) $new_instance['today'];
            
    $instance['month']= (bool) $new_instance['month'];
            
    $instance['title']= strip_tags($new_instance['title']);
            return 
    $instance;
            } 
    حالا زمان نمایش ابزارک در صفحه سایته برای این کار تابع widget رو ایجاد میکنیم.
    البته ما در تابع widget یک تابع دیگر رو خارج از کلاس فراخوانی کردیم ولی فرقی هم نمیکنه میتونستیم این کار رو هم نکنیم!
    کد PHP:
            // Echo the widget content.
            
    function widget($args$instance) {           
                
    show_widget_hadistat($args,$instance);
            }
            
        }
    // end class
        
        // show the widgen ad sidebar    
        
    function show_widget_hadistat($args,$instance) {
            global 
    $wpdb;
            
            
    // extract $args to variables : before_widget ,after_widget, before_title & ...
            
    extract($args);
            
    $title esc_attr($instance['title']);
            
            
    $now time();
            
    // time and date
            
    $today getdate();
            
    $year $today['year'];
            
    $month $today['mon'];
            
    $day $today['mday'];
            
            if(
    $instance['online']){
                
    $anline_query $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->prefix}hadistat where time>$now-300  "));
                
    $anline $wpdb->num_rows;
            }
            
            if(
    $instance['today']){        
                
    $today_shows $wpdb->get_var($wpdb->prepare("SELECT SUM(shows) FROM {$wpdb->prefix}hadistat where year=$year AND month=$month AND day=$day ;" ));
            }

            if(
    $instance['month']){        
                
    $month_shows $wpdb->get_var($wpdb->prepare("SELECT SUM(shows) FROM {$wpdb->prefix}hadistat where year=$year AND month=$month ;" ));
            }
            
            echo 
    $before_widget $before_title .$title$after_title;
            echo 
    '<ul class="wrap">';
            if(
    $instance['online']) echo "<li>تعداد افراد آنلاین : $anline</li>";
            if(
    $instance['today']) echo "<li> بازدید امروز : $today_shows</li>";
            if(
    $instance['month']) echo "<li> بازدید این ماه : $month_shows</li>";
            echo 
    '</ul>';
            echo 
    $after_widget;
        } 
    args آرایه‌ای شامل عناصر before_title, after_title, before_widget, and after_widget که به صورت خودکار تعریف میشن و $instance که تنطیماتیه که خودمون ایجاد کردیم.
    تابع extract که یک تابع تعریف شده در php است آرایه‌ای رو میگیره و به متغیرهای متناسب با اون آرایه تجزیه میکنه با این کار ما میتونیم از مقادیر before_title, after_title, before_widget, and after_widget در مکان مناسب خودشون استفاده کنیم.
    باقی کد هم مقداری کویریه برای بدست آوردن تعداد افراد آنلاین ،بازدید امروز و بازدید این ماه.
    در پایان add_action و register_widget یادتون نره.
    کد PHP:
        add_action('init''hadistat_WP_Widget_init'1);

        function 
    hadistat_WP_Widget_init() {
            
    register_widget('hadistat_WP_Widget');
        } 
    فقط یک نکته: یادتونه تو پست قبلی زمان اکشن قبلی رو گذاشتیم روی shutdown ؟
    باید اون رو به :
    کد PHP:
    add_action('init''hadistat_page_load'0); 
    تغییر بدید. مقدار 0 باعث میشه تابع بروزرسانی جدول زودتر از نمایش افزونه در سایت اجرا بشه در غیر این صورت تعداد افراد آنلاین درست نشون داده نمیشه.

    انشاالله در ادامه صفحه‌ای در مدیریت برای گزارش گیری و مقایشه آمارها میسازیم....

    افزونه رو به صورت کامل پیوست کردم با یک سری تغییرات کوچیک تو نام توابع متناسب با عملشون.

    فایل های پیوست شده فایل های پیوست شده
    ویرایش توسط hadiaj168 : June 19th, 2011 در ساعت 21:32

  2. تعداد تشکر ها ازhadiaj168 به دلیل پست مفید


اطلاعات موضوع

کاربرانی که در حال مشاهده این موضوع هستند

در حال حاضر 1 کاربر در حال مشاهده این موضوع است. (0 کاربران و 1 مهمان ها)

موضوعات مشابه

  1. پاسخ ها: 6
    آخرين نوشته: April 13th, 2018, 14:14
  2. چه نرم افزار اندرویدی بنویسیم؟ که شما خریدار باشید!!
    توسط vahid13713 در انجمن به دنبال کار هستم
    پاسخ ها: 2
    آخرين نوشته: August 4th, 2016, 19:15
  3. درست بنویسیم.
    توسط camelian77 در انجمن مباحث دیگر
    پاسخ ها: 140
    آخرين نوشته: March 20th, 2015, 00:01
  4. نیازمند نویسینده برای سایت اپلیکیشن
    توسط wikiphp در انجمن به دنبال کارمند هستم
    پاسخ ها: 0
    آخرين نوشته: January 27th, 2015, 19:58
  5. www را بنویسیم یا نه؟
    توسط SaynaServer در انجمن مباحث دیگر
    پاسخ ها: 0
    آخرين نوشته: April 24th, 2012, 11:19

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •