Я посмотрел код плагина и как оказалось в нем нет автоматической регистрации пользователя при создании заказа, поэтому придется ее добавить сторонним кодом. Действуем в несколько шагов:
1. Правим код плагина. Открываем файл /events-and-places/class-save-order.php, и полностью заменяем метод insert_order на это:
function insert_order(){
global $wpdb;
$args = apply_filters('evpl_pre_insert_order', array(
'user_data' => $this->user_data,
'order_price' => $this->cart->price,
'place_amount' => $this->cart->amount,
'order_details' => serialize($this->details),
'order_date' => current_time('mysql'),
'order_status' => $this->order_status,
'order_hash' => md5(current_time('mysql'))
));
$result = $wpdb->insert(
WP_PREFIX.'evpl_orders',
$args
);
if(!$result)
return false;
return $wpdb->insert_id;
}
2. Добавляем автоматическую регистрацию пользователя при создании заказа в файл функций используемой темы кодом:
add_filter('evpl_pre_insert_order', 'evpl_register_user');
function evpl_register_user($args){
global $user_ID;
if($user_ID) return $args;
$user_email = sanitize_text_field($_POST['evpl_user_email']);
$isEmail = is_email($user_email);
if(!$isEmail || email_exists( $user_email ) || username_exists($user_email)){
return $args;
}
$user_password = wp_generate_password( 12, false );
$user_id = rcl_insert_user(array(
'user_pass'=> $user_password,
'user_login'=> $user_email,
'user_email'=> $user_email,
'display_name'=>$user_email
));
if(!$user_id){
return $args;
}
rcl_update_profile_fields($user_id);
//Сразу авторизуем пользователя, если не требуется подтверждение почты
if(!rcl_get_option('confirm_register_recall')){
$creds = array(
'user_login' => $user_email,
'user_password' => $user_password,
'remember' => true
);
wp_signon( $creds );
}
$args['user_data'] = $user_id;
return $args;
}
3. Добавляем взаимодействие плагина с партнерской программой в файл функций темы:
add_action('evpl_payment_order','evpl_insert_partners_pay');
function evpl_insert_partners_pay($order_id){
$order = evpl_get_order($order_id);
if(!$order || !is_numeric($order->user_data) || !$order->order_price) return false;
add_partner_incentive($order->user_data,$order->order_price);
}
Если все сделано правильно, то при создании нового заказа гостем он должен автоматически регистрироваться, соответственно партнерская программа должна будет учесть эту регистрацию при переходе по партнерской ссылке и в дальнейшую оплату созданного заказа как действие реферала.
Пробуйте.
Разобрался, немного не там ставил %, извините за беспокойство и огромное спасибо за инструкцию! думаю это не только мне пригодится!
Но если рефералу не удалось оплатить, и если в админке выставить для заказа статус заказа с неоплаченного в оплачен, процент партнеру не начислится. Возможно сделать что бы процент начислялся после изменения заказа в вкладке заказа с "не оплачен" на "Оплачен"?
тогда надо код третьего шага заменить на этот:
add_action('evpl_update_order_status','evpl_insert_partners_pay',10,2);
function evpl_insert_partners_pay($order_id, $status){
if($status != 2) return false;
$order = evpl_get_order($order_id);
if(!$order || !is_numeric($order->user_data) || !$order->order_price) return false;
add_partner_incentive($order->user_data,$order->order_price);
}
Андрей CS сказал(а)
тогда надо код третьего шага заменить на этот:
add_action('evpl_update_order_status','evpl_insert_partners_pay',10,2); function evpl_insert_partners_pay($order_id, $status){ if($status != 2) return false; $order = evpl_get_order($order_id); if(!$order || !is_numeric($order->user_data) || !$order->order_price) return false; add_partner_incentive($order->user_data,$order->order_price); }
После данного действия ссылка на партнерку в лк слетела и в админке появилась ошибка:
Add-on PARTNERS-SYSTEM has caused an error and was disabled. The error text:
Fatal Error: Call to undefined function rcl_get_user_balance() in /var/www/u0396846/data/www/es-cl.ru/wp-content/wp-recall/add-on/partners-system/classes/class-partners.php:127