Обеспокоение заключалось в том, что
- новый участник может не быть клиентом woocommerce/ Пользователь WP и
- что мешает покупателю «перепродавать» поддельные пропуска, постоянно обновляя информацию о двух своих посетителях билетов, каждому из которых отправляется билет в формате PDF, и когда они добираются до мероприятия, первый, кто зарегистрируется, пройдет, НО остальные не смогут быть отсканированы с помощью сканера QR-кода и кода безопасности, прикрепленного к билету...
[*] Текущий идентификатор заявки
[*]новое поле Ticket_holder (имя)
[*]новое поле Ticket_email_to (адрес электронной почты)
Форма запускает перехватчик Transfer_ticket при обновлении, который запускает следующую функцию (извините за плохой код, но она работает)
Код: Выделить всё
add_action('acf/save_post', 'transfer_ticket');
function transfer_ticket( $post_id ) {
global $wpdb;
global $post;
global $user;
$pid = intval($_GET["tid"]);
$ticket_holder = get_post_meta($post_id, 'ticket_holder',true);
$ticket_email_to = get_post_meta($post_id, 'ticket_email_to',true);
$_unique_id = get_post_meta($post_id, '_unique_id',true);
$_tribe_wooticket_event = get_post_meta($post_id, '_tribe_wooticket_event',true);
$_tribe_wooticket_order = get_post_meta($post_id, '_tribe_wooticket_order',true);
$_tribe_wooticket_product = get_post_meta($post_id, '_tribe_wooticket_product',true);
$lastDelimiterPos = strrpos($_unique_id, '-');
$lastpart = substr($_unique_id, $lastDelimiterPos + 1);
//update_post_meta($post_id, '_tribe_tickets_full_name', $ticket_holder);
//update_post_meta($post_id, '_tribe_tickets_email', $ticket_email_to);
// First, make sure the email address is set
if ( isset( $ticket_email_to ) && ! empty( $ticket_email_to ) ) {
// Next, sanitize the data
$email_addr = trim( strip_tags( stripslashes( $ticket_email_to ) ) );
$exists = email_exists($email_addr);
if ( !$exists) {
$xname = trim($ticket_holder);
$last_name = (strpos($xname, ' ') === false) ? '' : preg_replace('#.*\s([\w-]*)$#', '$1', $xname);
$first_name = trim( preg_replace('#'.preg_quote($last_name,'#').'#', '', $xname ) );
$args = array('first_name' => $first_name, 'last_name' => $last_name);
$newid ='';
$length = 6 ;
$batch = array_merge( range( '0', '9' ), range( 'A', 'Z' ) );
shuffle( $batch );
$id = '';
$keys = array_rand( $batch, $length );
foreach ( $keys as $index ) {
$newid .= $batch[ $index ];
}
$n_unique_id = str_replace($lastpart,$newid , $_unique_id);
update_post_meta($post_id, 'last_name', $last_name); // for testing
update_post_meta($post_id, 'first_name', $first_name); // for testing
update_post_meta($post_id, 'newid', $newid); // for testing
update_post_meta($post_id, 'lastpart', $n_unique_id); // for testing
$username = sanitize_title( $ticket_holder );
$user_login = wp_slash( $username );
$user_email = wp_slash( $email_addr );
$user_pass = wp_generate_password( 6, false );;
$userdata = compact( 'user_login', 'user_email', 'user_pass' );
// Create the new user
$new_user_id = wp_create_user( $user_login, $user_pass, $user_email );
// Get current user object
$user = get_user_by( 'id', $new_user_id );
// Remove role
$user->remove_role( 'subscriber' );
// Add role
$user->add_role( 'customer' );
wp_update_user( array( 'ID' => $user->ID, 'display_name' => sanitize_text_field($xname) ) );
update_user_meta($user->ID, 'first_name', $first_name);
update_user_meta($user->ID, 'last_name', $last_name);
$nsecurity_code = substr( md5( wp_rand() . '_' . $user->ID ), 0, 10 );
update_post_meta($post_id, '_tribe_wooticket_security_code', $nsecurity_code);
update_post_meta($post_id, '_unique_id', $n_unique_id);
update_post_meta($post_id, '_tribe_tickets_email', $user_email);
update_post_meta($post_id, '_tribe_tickets_full_name', $xname);
update_post_meta($post_id, '_tribe_tickets_attendee_user_id', $new_user_id);
echo "alert('Ticket has been transferred !!!');";
} else {
//echo ' User exists';
}
header("Location: https://somewebsite.com/my-dashboard/bookings/");
die();
}
}
[*]Он создает нового пользователя WP с ролью клиента ' Клиент», если адрес электронной почты пользователя не существует в WP.
[*]Он обновляет метаданные существующего билета, добавляя адрес электронной почты и имена новых пользователей, а билет _tribe_tickets_attendee_user_id — нового пользователя WP.
[*]Он воссоздает код безопасности билета (используемый в QR)
[*]Он воссоздает _unique_id билета, который необходим для успешной регистрации
Теперь новый пользователь может войти в систему, просмотреть свой билет и добавить его в свой кошелек Google или iPhone или загрузить свой билет в формате PDF. Я проверил мобильное приложение и новые выданные чеки билетов со 100% точностью с помощью QR-сканера.
ТЕПЕРЬ ПРОБЛЕМА РЕШАЕТСЯ
Я пытаюсь заставить приведенную выше функцию каким-то образом подключиться к плагину The Events Calendar Ticket, чтобы автоматически отправлять новому пользователю его билет в формате PDF !!! И я не могу этого понять. У меня есть идентификатор заявки, идентификатор события, идентификатор пользователя и данные, но как мне повторно отправить заявку?
Есть ли возможность позвонить?
Я просмотрел код плагина и обнаружил, что единственное, что очень похоже на хук или функцию, которую я могу вызвать, находится в wp-content/plugins/event-tickets-plus/src/Tickets_Plus/Commerce/Attendee_Registration/Hooks. php
строки 171–182
`
Код: Выделить всё
public function update_attendee_meta_my_tickets_page( $attendee_id, $data_to_save, $data, $order_id, $ticket_id, $post_id, $provider ) {
$args = [
'fields' => $data,
];
$ticket = tribe( Commerce\Ticket::class )->get_ticket( $ticket_id );
// Always inject IAC after Fields.
$args = $this->container->make( Attendee::class )->inject_individual_collection_args( $args, $ticket );
$attendee = tec_tc_attendees()->by( 'id', $attendee_id )->set_args( $args )->save();
}`
Подробнее здесь: https://stackoverflow.com/questions/791 ... -issuing-a