دوره مجازی پلاگین نویسی وردپرس (جلسه 12) : پلاگین آمار بازدید کاربران - ثبت بازدید های کاربران



visibility  
mode_comment   ۱۶

به نام خدا و سلام. در خدمت شما هستیم با جلسه دوازدهم از دوره مجازی آموزش پلاگین نویسی وردپرس. در این جلسه قصد داریم کدهای قسمت قبلی افزونه آمار بازدید را تکمیل کنیم و بازدید های کاربر را ثبت نماییم. ابتدا کدهای قسمت قبل را مرور کرده و سپس کدهای جدید را اضافه می کنیم. در ادامه یک تابع برای دیباگ کردن کدها نوشته و از آن استفاده می کنیم. برای اجرای کدها از  تابع do_action استفاده خواهیم کرد تا با اجرای کدهای سفارشی آشنا شویم و در ادامه با یک action hook به نام init آشنا می شویم.

 

در این جلسه خواهیم دید :

  • معرفی تابع dd
  • تکمیل کدهای ثبت بازدید کاربر
  • اجرای کدها در قالب با استفاده از تابع do_Action
  • معرفی init و استفاده از آن
info توجه

این مطلب یک جلسه از آموزش پلاگین نویسی برای وردپرس می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش پلاگین نویسی برای وردپرس

comment دیدگاه کاربران
حامد نجاری replyپاسخ

با عرض سلام و خسته نباشید خدمت شما .
ببخشید ، آپدیت دوره طراحی قالب وردپرس از کی قرار میگیره ؟
آیا توی آپدیت دوره ، میتونیم مطالب پیشنهادی خودمون رو به شما بگیم ؟

کیوان علی محمدی

سلام در همین هفته مطلب آپدیت قرار میگیره و قراره ایجاد dropdown رو در ویرایشگر آموزش بدیم.

سهیل محمدی replyپاسخ

سلام استاد
ببخشید من این یه تکه کد رو اصلا نفهمیدم !!

الان این کویری ک به دیتابیس میزنیم هیچ وقت درست نیس که !! چون اخه date همش در حال تغییره و باید در این صورت همش باید insert کنه ولی نمیکنه . من نمیفهمم اصلا…

کیوان علی محمدی

سلام متغییر date همیشه تغییر میکنه ولی ما در کد mysql گفتیم با تایع DATE فقط بخش تاریخ رو برگردون و این یعنی فقط بخش سال و ماه و روز رو باید چک کنه.

سهیل محمدی

اهان .بله درسته ! پس با این حساب لزومی نداشت ک اون فیلد زمان رو هنگام ساخت دیتابیس به صورت datetimeبسازیم !!!!

کیوان علی محمدی

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

رضا الطافی replyپاسخ

سلام جناب علی محمدی
کدی که استفاده کردید رو دقیقا مشابهش استفاده کردم حتی کپی کردم. منتاها ip در دیتابیس با عدد 0 ذخیره میشه. حتی اونو echo کردم و مقدارش null هست و هیچی نداره.درکل ip کاربر گرفته نمیشه ! مشکل از چیه که توی سیستم شما آی پی گرفته میشه ولی مال من نه ؟ من از کد خودتون استفاده کردم

کیوان علی محمدی

سلام. مشکل از کد نیست دوست عزیز. احتمال مقدار برگشتی ip به صورت ipv6 هستش و به خاطر این مورد عدد 0 ذخیره میشه.بسته به تنظیمات ویندوز ممکنه آی پی لوکال به صورت v6 یا v4 باشه.

Mehdi Soli

سلام و عرض خسته نباشید خدمت استاد عزیز، من هم دقیقا به همین مشکل دوستمون برخوردم و برای همین گفتم اینجا نحوه حل رو بیان کنم تا شاید در آینده اگه دوستی مشکل داشت، با این مشکلش حل بشه. اول از همه من از پلاگین query monitor استفاده می کنم (به خلاصه میگم qm) تا بتونم کلیه ارور های صفحه رو با جزئیات بیشتری ببینم (واقعا جا داشت که استاد عزیز از این پلاگین فوق العاده در آموزش ها استفاده می کرد تا دوستان هم با نحوه کار آن آشنا بشوند). من هم به مانند این دوستمون مشکل داشتم و در qm میزد که سینتکس کوئری شما مشکل داره، از اونجایی که سینتکس مثل کد شما بود، بصورت دستی آی پی لوکال را دادم و دیدم که همه چیز درست شد. همونطور که شما گفتید مشکل از آی پی ورژن 6 هستش که بصورت 1:: برگشت داده میشه و در واقع تابع ip2lang نمیتونه اون رو تبدیل کنه، بنابراین هربار صفر در جدول ذخیره میشه، اما راه حل عوض کردن تنظیمات http.conf هستش، کافیه جایی که listen 0.0.0.0:80 یا listen 80 و یا هر شکل دیگه ای که خورده، به جاش این رو جایگزین کنید Listen 127.0.0.1:80 توجه کنید که فقط این باید باشه و اگر چیزی دیگه ای درون این فایل هست بصورت listen با ترکیب پورت 80 بهتر است پاک شود (هنگامی که بصورت لوکال کار می کنید) این فایل در فولدر apache شما واقع در پوشه wamp یا xamp هست. حالا همه سرویس ها را ری استارت کنید و می بینید که مشکل حل شده و آی پی شما با تابع ip2lang تبدیل می شود. می تونید برای راهنمایی بیشتر از لینک های زیر هم استفاده کنید
https://stackoverflow.com/questions/3699454/should-a-mamp-return-1-as-ip-on-localhost/13649642#13649642
https://stackoverflow.com/questions/10517371/ip-address-of-the-machine-in-php-gives-1-but-why/10517470#10517470
باز هم از شما سپاسگزام

رضا الطافی replyپاسخ

سلام جناب علی محمدی. عذرخواهی میکنم یه سوال دیگه داشتم
ببینید توی کدهای همین قسمت ، یه شرط گذاشتید که اگه مقدار id از جدول wp_wps_visits گرفته شده بود که بیا فیلد total_visit رو یدونه بهش اضافه کن. بعد داخل همین شرط ، یه شرط دیگه گذاشتید که اگه از جدول wp_wps_user_visits مقدار id گرفته نشده بود ( یا 0 بود ) بیا به unique_visit یدونه اضاف کن. من این قسمتش رو نمی فهمم. خب اگه مقدار نگرفته باشه ( یا 0 باشه ) که انگار هیچ داده ای نیست. یعنی کاربری نیومده تو سایت. پس چرا یدونه به unique_visit اضافه میشه ؟
شرط اول متوجه شدم اما شرط دوم نمی فهمم دقیقا چه اتفاقی میوفته که مقدار منحصربه فرد میره بالا.

کیوان علی محمدی

سلام اگر هیچی بازدیدی رخ نداده باشه یا همون مقدار برگشتی 0 باشه یعنی این بازدید اولین بازدید اون روز سایت هستش.

زارعی هوشیار replyپاسخ

سلام استاد علی محمدی….
تشکر خوب بووووود
مثل همیشه لایک دارید….

javad gholami replyپاسخ

باسلام
من دقیقا کدهای فایل های آموزشا رو وارد میکنم اما بازدید یکتا هم با هر بار رفرش اضافه میشه
مشکل از کجا میتونه باشه ؟ لطفا راهنمایی بفرمایین

function wps_user_visit_callback()
{

    global $wpdb, $table_prefix;

    $user_ip = ip2long( $_SERVER[ ‘REMOTE_ADDR’ ] );
    $date = date( ‘Y-m-d H:i:s’ );

    $is_user_visit_site_today = $wpdb->get_var( "SELECT id 
                                                    FROM {$table_prefix}wps_user_visits
                                                    WHERE ip={$user_ip} AND DATE(‘{$date}’) = DATE(date)
                                                     LIMIT 1" );
    if ( intval( $is_user_visit_site_today ) == 0 ) {

        $result = $wpdb->insert( $table_prefix . ‘wps_user_visits’,
            array (
                ‘ip’   => $user_ip,
                ‘date’ => $date
            ), array (
                ‘%d’,
                ‘%s’
            ) );

    }

    $today_visits_exist = $wpdb->get_var( "SELECT id 
                                                FROM {$table_prefix}wps_visits
                                             WHERE DATE(‘{$date}’) = DATE(date)" );
    if ( $today_visits_exist ) {


        $wpdb->query( "UPDATE {$table_prefix}wps_visits SET total_visits = total_visits + 1 WHERE id={$today_visits_exist}" );

        if ( $is_user_visit_site_today == 0 ) {

            $wpdb->query( "UPDATE {$table_prefix}wps_visits SET unique_visits = unique_visits + 1 WHERE id={$today_visits_exist}" );

        }

    } else {

        $wpdb->insert($table_prefix.’wps_visits’,array (
            ‘total_visits’  => 1,
            ‘unique_visits’ => 1,
            ‘date’          => date( ‘Y-m-d’ )
        ),array(
            ‘%d’,
            ‘%d’,
            ‘%s’
        ));

    }
}
add_action( ‘init’, ‘wps_user_visit_callback’ );
کیوان علی محمدی

سلام به نظرم کوئری ها رو دونه به دونه بررسی کنید ببینید نتیجه چطوری میشه.

hossein pakrooh replyپاسخ

سلام خسته نباشید استاد
دقیقا کد های شمارو کپی کردم ولی در ایپی کاربر مقدار نال قرار میگره
مشکل از چیه

کیوان علی محمدی

سلام قبل از inssert کردن لطفا مقدار $_SERVER[‘ADDR_REMOTE ‘] رو بررسی کنید. باید مقدار 127.0.0.1 رو برگردونه.

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.