Я посмотрел код плагина и как оказалось в нем нет автоматической регистрации пользователя при создании заказа, поэтому придется ее добавить сторонним кодом. Действуем в несколько шагов:
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