ردیابی رویدادها در Metrix
رویدادها اقدامات یا تعاملاتی هستند که کاربران در وبسایت شما انجام میدهند. ردیابی رویدادها به شما کمک میکند تا رفتار کاربران را درک کنید، تبدیلها را اندازهگیری کنید و کمپینهای بازاریابی خود را بهینه سازید. این راهنما نحوه ارسال رویدادهای سفارشی به Metrix را با استفاده از PHP و JavaScript توضیح میدهد.
درک رویدادها
یک رویداد هر عملی است که میخواهید ردیابی کنید، مانند:
- بازدید از صفحات
- کلیک روی دکمهها
- ارسال فرمها
- خرید محصول
- پخش ویدئو
- جستجوها
- ثبتنام در حساب کاربری
- تعاملات سفارشی کاربر
هر رویداد میتواند شامل ویژگیهایی (جفتهای کلید-مقدار) باشد که زمینه اضافی در مورد اتفاق افتاده ارائه میدهد.
ایجاد رویدادها در داشبورد Metrix
قبل از اینکه بتوانید رویدادها را ردیابی کنید، باید آنها را در داشبورد Metrix خود ایجاد کنید:
- به داشبورد Metrix خود وارد شوید
- به بخش رویدادها (Events) بروید
- روی ایجاد رویداد جدید (Create New Event) کلیک کنید
- نام و اسلاگ رویداد را وارد کنید
- هر ویژگیای را که میخواهید با این رویداد ردیابی کنید، تعریف کنید
- رویداد را ذخیره کنید
پس از ایجاد، میتوانید رویداد را با اسلاگ یا نام آن در کد وردپرس خود فراخوانی کنید.
ارسال رویدادها از طریق PHP (سمت سرور)
متدهای پایه رویداد
1. ارسال رویداد با اسلاگ
برای ارسال یک رویداد با استفاده از اسلاگ آن:
Metrix_SDK::new_event($slug);پارامترها:
| پارامتر | نوع | توضیحات | الزامی |
|---|---|---|---|
$slug | string | شناسه منحصر به فرد رویداد که در داشبورد Metrix ایجاد شده است | بله |
مثال:
<?php
// رویداد ساده بدون ویژگیها
Metrix_SDK::new_event('page_visit');
?>2. ارسال رویداد با اسلاگ و ویژگیها
برای ارسال یک رویداد با دادههای اضافی:
Metrix_SDK::new_event($slug, $custom_attributes);پارامترها:
| پارامتر | نوع | توضیحات | الزامی |
|---|---|---|---|
$slug | string | شناسه منحصر به فرد رویداد | بله |
$custom_attributes | array | جفتهای کلید-مقدار از دادههای رویداد | خیر |
مثال:
<?php
$attributes = array(
'product_name' => 'Wireless Headphones',
'category' => 'Electronics',
'price' => 99.99,
'quantity' => 2
);
Metrix_SDK::new_event('purchase_completed', $attributes);
?>3. ارسال رویداد با نام
برای ارسال یک رویداد با استفاده از نام نمایشی آن:
Metrix_SDK::new_event_by_name($name);
Metrix_SDK::new_event_by_name($name, $custom_attributes);پارامترها:
| پارامتر | نوع | توضیحات | الزامی |
|---|---|---|---|
$name | string | نام نمایشی رویداد | بله |
$custom_attributes | array | جفتهای کلید-مقدار از دادههای رویداد | خیر |
مثال:
<?php
// رویداد با نام بدون ویژگیها
Metrix_SDK::new_event_by_name('PURCHASE_COMPLETED');
// رویداد با نام و ویژگیها
$attributes = array(
'manufacturer' => 'Nike',
'product_name' => 'Running Shoes',
'price' => 150
);
Metrix_SDK::new_event_by_name('PURCHASE_COMPLETED', $attributes);
?>سناریوهای رایج ردیابی
سناریو 1: ردیابی بازدید از صفحات
ردیابی زمانی که کاربران از صفحات مختلف بازدید میکنند:
<?php
add_action('wp_footer', function() {
$page_data = array(
'page_title' => get_the_title(),
'page_type' => get_post_type(),
'page_url' => get_the_permalink(),
'author' => get_the_author(),
'published_date' => get_the_date('Y-m-d')
);
Metrix_SDK::new_event_by_name('PAGE_VISIT', $page_data);
});
?>سناریو 2: ردیابی ارسال فرمها
ردیابی زمانی که کاربران یک فرم تماس یا فرم ثبتنام را ارسال میکنند:
<?php
if (isset($_POST['contact_form_submit'])) {
if (isset($_POST['name']) && isset($_POST['email'])) {
// همیشه ورودی کاربر را پاکسازی (sanitize) کنید
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$subject = sanitize_text_field($_POST['subject']);
$form_data = array(
'name' => $name,
'email' => $email,
'subject' => $subject,
'submission_date' => date('Y-m-d H:i:s')
);
Metrix_SDK::new_event('form_contact_submitted', $form_data);
// پردازش فرم...
}
}
?>
<form method="POST">
<input type="text" name="name" placeholder="نام شما" required>
<input type="email" name="email" placeholder="ایمیل شما" required>
<input type="text" name="subject" placeholder="موضوع" required>
<button type="submit" name="contact_form_submit">ارسال</button>
</form>سناریو 3: ردیابی ثبتنام کاربر
ردیابی زمانی که کاربران جدید ثبتنام میکنند:
<?php
add_action('user_register', function($user_id) {
$user = get_user_by('id', $user_id);
$signup_data = array(
'user_email' => $user->user_email,
'display_name' => $user->display_name,
'signup_date' => date('Y-m-d H:i:s'),
'signup_method' => 'website'
);
Metrix_SDK::new_event('user_signup', $signup_data);
});
?>سناریو 4: ردیابی خرید محصول (WooCommerce)
ردیابی زمانی که مشتریان خرید انجام میدهند:
<?php
add_action('woocommerce_order_status_completed', function($order_id) {
$order = wc_get_order($order_id);
$purchase_data = array(
'order_id' => $order_id,
'total' => $order->get_total(),
'item_count' => $order->get_item_count(),
'currency' => $order->get_currency(),
'payment_method' => $order->get_payment_method()
);
// افزودن اطلاعات اقلام مجزا
foreach ($order->get_items() as $item) {
$purchase_data['items'][] = array(
'product_name' => $item->get_name(),
'product_id' => $item->get_product_id(),
'quantity' => $item->get_quantity(),
'price' => $item->get_total()
);
}
Metrix_SDK::new_event('purchase_completed', $purchase_data);
});
?>سناریو 5: ردیابی پخش ویدئو (JavaScript + PHP)
ردیابی زمانی که کاربران ویدئو پخش میکنند:
<?php
// در قالب شما، جاوااسکریپت سفارشی را بارگذاری کنید
add_action('wp_enqueue_scripts', function() {
wp_enqueue_script('video-tracking', get_template_directory_uri() . '/js/video-tracking.js', array(), '1.0', true);
});
?>فایل جاوااسکریپت (js/video-tracking.js):
document.addEventListener('DOMContentLoaded', function() {
const videos = document.querySelectorAll('video');
videos.forEach(video => {
video.addEventListener('play', function() {
Metrix.newEventByName('VIDEO_PLAYED', {
'video_title': video.title || 'Untitled Video',
'timestamp': new Date().toISOString()
});
});
});
});سناریو 6: ردیابی جستجوها
ردیابی آنچه کاربران در سایت شما جستجو میکنند:
<?php
if (isset($_GET['s'])) {
$search_query = sanitize_text_field($_GET['s']);
$search_data = array(
'search_query' => $search_query,
'search_date' => date('Y-m-d H:i:s'),
'results_count' => count(get_posts(array('s' => $search_query)))
);
Metrix_SDK::new_event('search_performed', $search_data);
}
?>استفاده از هوکهای وردپرس برای ردیابی خودکار رویدادها
هوک wp_footer (پایین هر صفحه)
<?php
add_action('wp_footer', function() {
// این کد در هر بارگذاری صفحه اجرا میشود
$current_user = wp_get_current_user();
$page_visit = array(
'page_title' => get_the_title(),
'page_url' => get_the_permalink(),
'user_status' => $current_user->ID ? 'logged_in' : 'anonymous',
'timestamp' => date('Y-m-d H:i:s')
);
Metrix_SDK::new_event_by_name('PAGE_VISIT', $page_visit);
});
?>هوک wp_footer (فقط کاربران وارد شده)
<?php
add_action('wp_footer', function() {
$current_user = wp_get_current_user();
if ($current_user->ID) {
Metrix_SDK::new_event('logged_in_page_visit', array(
'page' => get_the_title(),
'user_role' => implode(',', $current_user->roles)
));
}
});
?>اقدامات نوع پست سفارشی
<?php
add_action('publish_product', function($post_id) {
$post = get_post($post_id);
Metrix_SDK::new_event('product_published', array(
'product_title' => $post->post_title,
'product_id' => $post_id,
'publish_date' => date('Y-m-d H:i:s')
));
});
?>ارسال رویدادها از طریق JavaScript (سمت کاربر)
برای تعاملات کاربری که در فرانتاند (مانند کلیک روی دکمهها، تعاملات فرم) اتفاق میافتند، از جاوااسکریپت برای ارسال رویدادها استفاده کنید:
متدهای پایه رویداد در جاوااسکریپت
1. ارسال رویداد با نام
Metrix.newEventByName('EVENT_NAME', {
'attribute_key': 'attribute_value'
});مثال:
// ردیابی کلیک دکمه
document.getElementById('subscribe-btn').addEventListener('click', function() {
Metrix.newEventByName('NEWSLETTER_SIGNUP', {
'signup_source': 'homepage_banner',
'timestamp': new Date().toISOString()
});
});2. ردیابی کلیک روی لینک
document.querySelectorAll('a.external-link').forEach(link => {
link.addEventListener('click', function() {
Metrix.newEventByName('EXTERNAL_LINK_CLICKED', {
'link_url': this.href,
'link_text': this.textContent
});
});
});3. ردیابی تغییرات فیلد فرم
document.getElementById('email-input').addEventListener('change', function() {
Metrix.newEventByName('EMAIL_FIELD_UPDATED', {
'field_name': 'email',
'timestamp': new Date().toISOString()
});
});4. ردیابی عمق پیمایش (Scroll Depth)
let scrollTracked = false;
window.addEventListener('scroll', function() {
const scrollPercentage = (window.scrollY / (document.body.scrollHeight - window.innerHeight)) * 100;
if (scrollPercentage > 50 && !scrollTracked) {
Metrix.newEventByName('PAGE_SCROLL_50', {
'page_title': document.title
});
scrollTracked = true;
}
});5. ردیابی زمان ماندن در صفحه
let pageLoadTime = new Date();
window.addEventListener('beforeunload', function() {
const timeOnPage = Math.floor((new Date() - pageLoadTime) / 1000); // بر حسب ثانیه
Metrix.newEventByName('PAGE_TIME_TRACKING', {
'page_title': document.title,
'time_spent_seconds': timeOnPage
});
});جاسازی جاوااسکریپت در وردپرس
در footer قالب (footer.php)
<?php
// در انتهای footer.php، قبل از wp_footer()
?>
<script>
document.addEventListener('DOMContentLoaded', function() {
// کد ردیابی رویداد شما در اینجا
document.getElementById('my-button').addEventListener('click', function() {
Metrix.newEventByName('BUTTON_CLICKED', {
'button_id': 'my-button'
});
});
});
</script>
<?php wp_footer(); ?>استفاده از wp_enqueue_script()
فایلی با نام js/custom-events.js ایجاد کنید:
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('download-btn').addEventListener('click', function() {
Metrix.newEventByName('DOWNLOAD_STARTED', {
'download_type': 'ebook',
'timestamp': new Date().toISOString()
});
});
});در functions.php قالب یا پلاگین شما:
<?php
add_action('wp_enqueue_scripts', function() {
wp_enqueue_script(
'custom-events',
get_template_directory_uri() . '/js/custom-events.js',
array(), // وابستگیها
'1.0',
true // در فوتر
);
});
?>بهترین روشها برای ویژگیهای رویداد
انواع ویژگی
رویدادها میتوانند شامل انواع مختلفی از ویژگیها باشند:
<?php
$event_attributes = array(
'string_value' => 'some text', // رشته (String)
'number_value' => 42, // عدد (Number)
'decimal_value' => 19.99, // اعشاری (Decimal)
'boolean_value' => true, // Boolean
'date_value' => '2024-01-15', // تاریخ (فرمت ISO)
'timestamp' => date('Y-m-d H:i:s') // زمانبرچسب (Timestamp)
);
Metrix_SDK::new_event('event_with_attributes', $event_attributes);
?>بهترین روشها برای ویژگیها
1. از نامهای واضح و توصیفی استفاده کنید
// خوب
$attributes = array(
'product_name' => 'Wireless Mouse',
'product_price' => 45.99
);
// از نامهای مبهم خودداری کنید
$attributes = array(
'item' => 'Wireless Mouse',
'val' => 45.99
);2. تمام ورودیهای کاربر را پاکسازی (Sanitize) کنید
<?php
if (isset($_POST['user_input'])) {
$cleaned_input = sanitize_text_field($_POST['user_input']);
Metrix_SDK::new_event('user_input_event', array(
'input_value' => $cleaned_input
));
}
?>3. ویژگیها را سازگار نگه دارید
همیشه از نامهای ویژگی و فرمت مقادیر یکسان استفاده کنید:
<?php
// خوب: ساختار سازگار
$order_data = array(
'order_id' => '12345',
'order_total' => 199.99,
'currency' => 'USD',
'status' => 'completed'
);
// اجتناب شود: فرمتهای ناسازگار
$order_data = array(
'id' => '12345',
'total' => '$199.99', // فرمت متفاوت
'curr' => 'USD' // نام متفاوت
);
?>4. دادههای حساس را شامل نکنید
// اجتناب شود: هرگز رمز عبور، توکن یا اطلاعات شناسایی شخصی (PII) را شامل نکنید
$bad_attributes = array(
'password' => 'user_password', // این کار را نکنید
'credit_card' => '1234-5678', // این کار را نکنید
'api_token' => 'secret_token' // این کار را نکنید
);
// خوب: فقط دادههای غیرحساس را شامل کنید
$good_attributes = array(
'purchase_amount' => 99.99,
'payment_method' => 'credit_card',
'status' => 'completed'
);5. از انواع داده استاندارد استفاده کنید
<?php
// خوب: از انواع داده مناسب استفاده کنید
$attributes = array(
'quantity' => 5, // عدد صحیح (Integer)
'price' => 29.99, // عدد اعشاری (Float)
'in_stock' => true, // Boolean
'product_name' => 'Headphones' // رشته (String)
);
// اجتناب شود: تبدیل غیرضروری انواع
$attributes = array(
'quantity' => '5', // باید عدد صحیح باشد
'price' => '29.99', // باید عدد اعشاری باشد
'in_stock' => 'true' // باید Boolean باشد
);
?>ردیابی رویدادها در قالبها
در قالب تک پست/محصول
<?php
// single-post.php یا single-product.php
get_header();
Metrix_SDK::new_event('content_viewed', array(
'content_type' => get_post_type(),
'content_title' => get_the_title(),
'content_id' => get_the_ID(),
'author' => get_the_author(),
'category' => get_the_category()[0]->name ?? 'uncategorized'
));
the_content();
get_footer();
?>در قالب آرشیو/لیست
<?php
// archive.php یا category.php
get_header();
Metrix_SDK::new_event('archive_viewed', array(
'archive_type' => get_post_type(),
'archive_title' => get_the_archive_title(),
'posts_count' => wp_count_posts()->publish
));
while (have_posts()) {
the_post();
// نمایش پستها...
}
get_footer();
?>مشاهده رویدادها در داشبورد Metrix
پس از شروع ارسال رویدادها، میتوانید آنها را مشاهده و تحلیل کنید:
- به داشبورد Metrix خود وارد شوید
- به بخش تحلیلها (Analytics) یا رویدادها (Events) بروید
- تعداد رویدادها، ویژگیها و مسیرهای کاربری را مشاهده کنید
- بر اساس رویدادها سگمنت ایجاد کنید
- از رویدادها برای هدفگیری اعلانهای پوش یا کمپینها استفاده کنید
عیبیابی
رویدادها در داشبورد ظاهر نمیشوند
دلایل احتمالی:
- رویداد هنوز در داشبورد Metrix ایجاد نشده است
- App ID یا API Key نادرست است
- اسلاگ/نام رویداد با آنچه در داشبورد ایجاد شده مطابقت ندارد
راهحل:
- بررسی کنید که رویداد در داشبورد Metrix شما وجود داشته باشد
- مطمئن شوید که اسلاگ/نام رویداد دقیقاً مطابقت دارد (حساس به حروف کوچک و بزرگ)
- اطمینان حاصل کنید که App ID و API Key به درستی پیکربندی شدهاند
- کنسول مرورگر را برای خطاهای جاوااسکریپت بررسی کنید
ویژگیها در رویدادها نمایش داده نمیشوند
دلایل احتمالی:
- نام ویژگیها با تعریف رویداد در داشبورد مطابقت ندارد
- دادهها حاوی کاراکترهای خاص یا مشکلات کدگذاری هستند
- انواع داده با فرمت مورد انتظار مطابقت ندارند
راهحل:
- نام ویژگیها را در تعریف رویداد Metrix تأیید کنید
- قبل از ارسال، تمام ورودیهای کاربر را پاکسازی (sanitize) کنید
- از انواع داده صحیح برای ویژگیها استفاده کنید
- ابتدا با ویژگیهای ساده آزمایش کنید، سپس پیچیدگی را اضافه کنید
رویدادها ارسال شدهاند اما شمارش نمیشوند
دلایل احتمالی:
- کاربر ناشناس است و رویداد فقط برای کاربران وارد شده محدود شده است
- رویداد با فرکانس زیاد یا با محدودیت (throttling) ارسال میشود
- کاربر با ردیابی موافقت نکرده است
راهحل:
- پیکربندی رویداد را در داشبورد Metrix بررسی کنید
- بررسی کنید که کاربر وارد شده باشد زمانی که رویداد نیاز به آن دارد
- بررسی کنید که آیا رضایت ردیابی لازم است
- تنظیمات فایروال/فیلتر را مرور کنید