اکشن قبل از ثبت درخواست وجه
- نام: hmyt_before_submit_settlement
- این اکشن درست قبل از ثبت درخواست تسویه حساب توسط کاربر اجرا میشود و به شما اجازه میدهد تا قوانین اعتبارسنجی سفارشی خود را اضافه کنید.
پارامترها:
[php]
/**
* اکشن قبل از ثبت درخواست تسویه حساب.
* میتوان برای اعتبارسنجی سفارشی از wp_send_json_error استفاده کرد.
*
* @param int $user_id شناسه کاربر درخواستدهنده.
* @param float $amount مبلغ درخواستی.
* @param string $transfer_type نوع انتقال ('bank' یا 'wallet').
*/
[/php]
مثال۱: اجازه درخواست فقط برای کاربران با نقش کاربری خاص
با استفاده از این قلاب فقط نقش های کاربری مشخص شده اجازه ثبت درخواست تسویه دارند
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$user = get_userdata($user_id);
// نقشهای کاربری مجاز
$allowed_roles = ['editor', 'administrator', 'vip_marketer'];
if (!array_intersect($allowed_roles, $user->roles)) {
wp_send_json_error(['message' => 'شما دسترسی لازم برای ثبت درخواست تسویه را ندارید.']);
}
}, 10, 3);
[/php]
مثال۲: امکان ثبت درخواست تسویه بانکی فقط در روزهای شنبه و دوشنبه
با استفاده از این قلاب، کاربر فقط در روز های مشخص امکان ثبت درخواست تسویه “بانکی” دارد
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
if ($transfer_type === 'bank') {
$day_of_week = (int) jhmyt('w', '', '', 'Asia/Tehran', 'en'); // 0=شنبه, 2=دوشنبه
if (!in_array($day_of_week, [0, 2])) {
wp_send_json_error(['message' => 'درخواست تسویه بانکی فقط در روزهای شنبه و دوشنبه امکانپذیر است.']);
}
}
}, 10, 3);
[/php]
مثال۳: شرط حداقل ۵ فروش موفق برای ثبت درخواست تسویه
با استفاده از این قلاب، کاربر برای ثبت درخواست تسویه میبایست حداقل فروش مشخصی داشته باشد
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$transactions = get_user_meta($user_id, 'hmyt_affiliate_transactions', true);
$total_sales = is_array($transactions) ? count($transactions) : 0;
if ($total_sales < 5) {
wp_send_json_error(['message' => 'برای ثبت درخواست تسویه، به حداقل ۵ فروش موفق نیاز دارید.']);
}
}, 10, 3);
[/php]
مثال۴: محدودیت ۳۰ روزه برای کاربران جدید جهت ثبت درخواست
با استفاده از این قلاب فقط کاربرانی که ۳۰ روز از عضویتشان میگذرد امکان ثبت درخواست تسویه دارند
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$user_data = get_userdata($user_id);
$registration_ts = strtotime($user_data->user_registered);
$thirty_days_ago_ts = strtotime('-30 days');
if ($registration_ts > $thirty_days_ago_ts) {
wp_send_json_error(['message' => 'پس از گذشت ۳۰ روز از تاریخ عضویت، میتوانید درخواست تسویه ثبت کنید.']);
}
}, 10, 3);
[/php]
مثال۵: قفل کردن درخواست وجه (فقط بین روزهای ۲۵ تا ۳۰ ماه)
با استفاده از این قلاب، کاربر فقط بین روز های مشخص ماه امکان ثبت درخواست تسویه دارد
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$today_day = (int) jhmyt('j', '', '', 'Asia/Tehran', 'en');
if ($today_day < 25 || $today_day > 30) {
wp_send_json_error(['message' => 'ثبت درخواست تسویه فقط از روز ۲۵ام تا ۳۰ام هر ماه امکانپذیر است.']);
}
}, 10, 3);
[/php]
مثال۶: محدودیت تعداد درخواست تسویه در ماه
با استفاده از این قلاب میتوانید تعداد درخواست های تسویه کاربر در ماه را محدود کنید
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$start_of_month = date('Y-m-01');
$requests = get_posts([
'post_type' => 'hmyt_setl',
'author' => $user_id,
'posts_per_page' => -1,
'date_query' => [['after' => $start_of_month, 'inclusive' => true]],
]);
if (count($requests) >= 2) {
wp_send_json_error(['message' => 'شما در این ماه به حداکثر تعداد درخواست تسویه (۲ بار) رسیدهاید.']);
}
}, 10, 3);
[/php]
برای اینکه این محدودیت فقط روی تسویههای بانکی اعمال شود، باید نوع انتقال را در قلاب بررسی کرده و کوئری دیتابیس را نیز بر اساس متادیتای hmyt_transfer_type فیلتر کنیم.
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
// این قانون فقط برای درخواستهای بانکی اجرا میشود
if ($transfer_type === 'bank') {
$start_of_month = date('Y-m-01');
$requests = get_posts([
'post_type' => 'hmyt_setl',
'author' => $user_id,
'posts_per_page' => -1,
'date_query' => [
['after' => $start_of_month, 'inclusive' => true],
],
// این متا کوئری اضافه شده تا فقط درخواستهای بانکی شمارش شوند
'meta_query' => [
[
'key' => 'hmyt_transfer_type',
'value' => 'bank',
'compare' => '=',
],
],
]);
if (count($requests) >= 2) {
wp_send_json_error(['message' => 'شما در این ماه به حداکثر تعداد درخواست تسویه بانکی (۲ بار) رسیدهاید.']);
}
}
}, 10, 3);
[/php]
مثال۷: جلوگیری از ثبت درخواست در روزهای تعطیل (پنجشنبه و جمعه)
[php]
add_action('hmyt_before_submit_settlement', function($user_id, $amount, $transfer_type) {
$day_of_week = (int) jhmyt('w', '', '', 'Asia/Tehran', 'en'); // 4=پنجشنبه, 5=جمعه
if (in_array($day_of_week, [4, 5])) {
wp_send_json_error(['message' => 'امکان ثبت درخواست در روزهای تعطیل وجود ندارد. لطفاً در روزهای کاری (شنبه تا چهارشنبه) اقدام نمایید.']);
}
}, 10, 3);
[/php]