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

دسته بندی: وردپرس
زمان مطالعه: 1 دقیقه
۱۵ اردیبهشت ۱۳۹۵

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

 

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

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

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

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

چه امتیازی به این مقاله می دید؟
نویسنده
یادگیرنده ی همیشگی،برنامه نویس،نویسنده،عاشق خلق چیزهای عجیب،عاشق تحلیل داده ها، مسئول بخش فنی و هم بنیان گذار در سون لرن.

جلسات دوره

نظرات کاربران

hossein pakrooh

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

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

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

javad gholami

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

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’ );
کیوان علی محمدی

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

زارعی هوشیار

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

رضا الطافی

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

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

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

رضا الطافی

سلام جناب علی محمدی
کدی که استفاده کردید رو دقیقا مشابهش استفاده کردم حتی کپی کردم. منتاها 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
باز هم از شما سپاسگزام

سهیل محمدی

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

$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” ); 

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

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

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

سهیل محمدی

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

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

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

حامد نجاری

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

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

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

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

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

نیاز به لاگین

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