Intereting Posts
Штрих-код Enclosing не работает в шаблоне Пользовательские правила перезаписи отправляют все в index.php Значения сохранения метабакса Добавить переменную между do_shortcode Замена термина-заполнителя значением переменной сеанса в таксономическом фильтре Как изменить URL-адрес приложения wordpress и защитить его? Избавьтесь от поля «комментарий» на страницах, отличных от блога Пользовательская кнопка tinymce Страница виджета перестала загружаться Как определить контекст главной страницы для WordPress mu sub-blog Внутренняя ошибка (500) по локальной и фатальной ошибке в режиме реального времени при попытке доступа к экрану редактирования типа публикации Сохранить и вернуть тип ввода – это текст в настраиваемом типе сообщений Выпадающее меню категории «Тип почтового запроса» Как я могу удалить все неприкрепленные изображения с помощью WP-CLI или другого автоматизированного процесса? Как ссылаться на PHP в Javascript

Строки запроса и Woocommerce

У меня есть сайт WordPress, и я использую WooCommerce для продажи регистраций для приложений, которые я разрабатываю. Чтобы упростить процесс регистрации, я хотел бы, чтобы пользователи могли щелкнуть кнопку регистрации в приложении и перейти непосредственно на мою страницу проверки WooCommerce с уже загруженным в корзину зарегистрированным продуктом и автоматически ввести имя пользователя (сгенерированное приложением) в поле имени пользователя страницы проверки (которое я добавил).

То, что у меня есть до сих пор, – когда пользователь нажимает кнопку регистрации приложений, приложение отправляет пользователя в свой браузер к URL-адресу, который выглядит так:

http://www.example.com/checkout/?add-to-cart=532&username=myname 

В моем файле function.php я перенаправляюсь на страницу проверки при добавлении в корзину, так что это открывает страницу проверки с id = 532 продукта id = 532 уже находящимся в корзине. Отлично.

Чтобы сделать переменную имени пользователя общедоступной, я добавил в свой файл functions.php :

 add_filter( 'query_vars', 'add_query_vars_filter' ); function add_query_vars_filter( $vars ){ $vars[] = "username"; return $vars; } 

Чтобы записать имя пользователя из строки запроса и ввести его в созданном поле имени пользователя, я также добавил следующее в файл functions.php :

 add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' ); function custom_override_checkout_fields( $fields ) { $thename = get_query_var( 'username', 'defaultName' ); $fields['billing']['billing_username'] = array( 'label' => __($label, 'woocommerce'), 'placeholder' => _x($placeholder, 'placeholder', 'woocommerce'), 'required' => true, 'class' => array('form-row-wide'), 'clear' => true, 'default' => $thename ); return $fields; } 

К сожалению, defaultName вводится в поле имени пользователя. Если я удалю add-to-cart=532 из URL-адреса, тогда будет введено myname . Я думаю, что проблема в том, что к моменту открытия страницы проверки username=myname удаляется из URL-адреса. Кажется, мне нужно использовать $thename = get_query_var( 'username', 'defaultName' ) ранее в процессе открытия страницы проверки (и одна из проблем заключается в том, что я не полностью понимаю этот процесс) и каким-то образом сделать ее доступной в функции custom_override_checkout_fields в моем файле functions.php . Итак, вопрос в том, как это сделать?

Думаю, я понял это. В моем файле functions.php у меня была функция внизу, чтобы перенаправить на страницу проверки, когда продукт добавлен в корзину. Итак, я записал переменную имени пользователя и добавил ее на перенаправленный URL:

 add_filter ('add_to_cart_redirect', 'redirect_to_checkout'); function redirect_to_checkout() { global $woocommerce; $checkout_url = $woocommerce->cart->get_checkout_url(); if ( ! empty( $_REQUEST['username'] ) ) { $thename = $_REQUEST['username']; $checkout_url = esc_url( add_query_arg('username', $thename, $checkout_url ) ); } return $checkout_url; } 

Любопытно, что ни get_query_var ('username'), ни $ wp_query-> query_vars ['username'] не работали. Я не знаю, почему.