ردیابی ایونت ها در 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 بررسی کنید
- بررسی کنید که کاربر وارد شده باشد زمانی که ایونت نیاز به آن دارد
- بررسی کنید که آیا رضایت ردیابی لازم است
- تنظیمات فایروال/فیلتر را مرور کنید