Автозаполнение входных данных на основе сопоставления / запроса пользовательского типа сообщения - PullRequest
5 голосов
/ 21 ноября 2019

Я недавно столкнулся с проблемой, из-за которой я немного запутался. В моей настройке WP у меня есть базовое решение WooCommerce (для темы я использую стартовую тему Timber, чтобы использовать шаблоны веточек). Кроме того, я использую пользовательский тип записи под названием «сайты». Сайты представляют собой список строительных площадок, которые не следует путать с сайтами.

CPT Сайтов имеет X полей расширенных настраиваемых полей, а также стандартное название, поля ACF:

  • Номер PO (номер_позиции) -> Строка -> обязательно / не равно нулю
  • Номер задания (номер_ообщества) -> Строка -> обязательно / не равно нулю
  • Адрес улицы (street_address) -> Строка -> обязательный / не нулевой
  • Название офиса (office_name) -> Строка -> обязательный / не нулевой
  • Город (город) -> Строка -> обязательно / не пусто
  • округ (графство) -> Строка -> необязательно / обнуляемо
  • Почтовый индекс (почтовый индекс) -> String -> обязательный / не нулевой

Таким образом, требуется большинство из вышеперечисленного со стороны администраторов, поэтому мы знаем, что данные будут присутствовать.

Проблема, с которой я сталкиваюсь, заключается в том, что при оформлении заказа нам нужны поля, соответствующие вышеуказанному, а также поле адреса электронной почты (обязательно) и поле контактного номера (обязательно).

Цель состоит в том, чтобы, когда клиент вводит свой «Номер задания» и нажимает кнопку «Найти», запускается запрос на сопоставление этого номера задания с полем «Номер задания» в пользовательском типе записи, а также в случае совпадения. найдены, остальные поля из этой записи заполняются в оставшейся части формы оформления заказа.


С точки зрения опробования решения, единственное, что я мог сказать, - это запрос к базе данных для сопоставления и возврата данных, но я довольно новичок в WP в целом и, похоже,В таких понятиях, как Ajax, имеющий конкретный вариант использования в WP, структура БД кажется довольно сложной, поэтому я подумал, что я хотел бы спросить здесь и посмотреть, есть ли у кого-нибудь решение.

На данный момент нет кода, который можно было бы показать иначе, и я бы сказал, что с точки зрения шаблонов WooCommerce они все стандартные и не были изменены.

Просто подытожим, цельis:

Клиент переходит к оформлению заказа -> вводит свой уже известный номер задания и нажимает «Найти» -> Запускается какой-то запрос, чтобы сопоставить этот номер задания с полем CPT ACF номера задания -> Еслисовпадение найдено, верните эти поля и заполните поля Woo Checkout этими данными.

Любые идеи решения или предложения приветствуются, заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 02 декабря 2019

Вы можете делать все, что захотите, используя пользовательский код, а также некоторые из ваших лучших логик, как я объясню ниже.

Следуйте логике / шагу ниже.

Создание настраиваемого поля оформления заказа

сначала создание настраиваемого поля на странице оформления заказа woo-commerce: настраиваемое поле

https://wisdmlabs.com/blog/add-custom-fields-woocommerce-checkout-page/

, а также не забудьте добавить кнопку проверки

создать вызов ajax (WP-ajax) и настроить кнопку.

Создатьвызов ajax, нажав на кнопку, и получить информацию о пользователе по идентификатору задания

Вы должны написать код, чтобы получить данные пользователя из job_number функции ajax, являющейся возвращающим пользователем, который соответствуетфункция ajax. (вы)

получить метаданные пользователя по методу пользователя (вам нужно сохранить job_number с метадой пользователя, чтобы получить детализацию пользователя по job_number) get_user_meta : вы получите идентификатор пользователя из метаинформации пользователя.

Когда вы получите идентификатор пользователя, вы можете легко найти метаданные пользователя woocommerce, которые выглядят как адрес доставки, адрес выставления счета и т. Д., И вы предполагаете вернуть эти данные с помощью пользовательского вызова ajax и установить его в поле извлечения woocommerce, используяjquery.

Надеюсь, вы поняли идею из моей логики и шагов.

Спасибо.

1 голос
/ 28 ноября 2019

Если у вас есть только несколько сотен «сайтов», просто локализуйте скрипт.

https://developer.wordpress.org/reference/functions/wp_localize_script/

Затем, когда у вас есть эта переменная CDATA, доступная в DOM, вы можетепросто используйте jQuery / javascript, чтобы найти подходящую работу и заполните поля формы. Оттуда я рекомендую использовать документацию WC и их хуки / фильтры, чтобы добавить поля к оформлению заказа и проверить эти поля при оформлении заказа. Вот ссылка, которая также объясняет этот процесс.

https://docs.woocommerce.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/

Итог? Если у вас есть несколько сотен полей, просто локализуйте данные в переменной, которую можно прочитать на внешнем интерфейсе. Если еще много, то вы можете использовать AJAX. Но все, что меньше пары сотен, на самом деле будет меньше ресурсов, используемых на сервере, и быстрее загружать.

...