Woocommerce обрабатывает отправку форм, создавая классы, которые затем подключаются к действиям wp
или template_redirect
.Вы можете убедиться в этом сами, посмотрев WC_Form_Handler .
В зависимости от вашего подхода, вы можете следовать аналогичной стратегии и создать класс или функцию, которые подключаются заранее для обработки данных формы.Например,
add_action('wp', 'my_form_handler');
function my_form_handler() {
// read in my post data
// process my data.
// optionally redirect
}
Одна из проблем, с которой вы здесь столкнетесь, заключается в том, что этот хук будет запускаться каждый раз, когда вызывается wp
или template_redirect
, то есть загрузка каждой отдельной страницы.Woocommerce решает эту проблему путем поиска одноразовых номеров, полей записей и использования функций is_ *.Одна из стратегий, которую я использую, состоит в том, чтобы начать свою функцию с
if(filter_input(INPUT_SERVER, 'REQUEST_METHOD') !== 'POST') {
return;
}
. Это приведет к выходу из функции, если мы не обнаружим действие POST на странице.
Если вы решите выполнитьПри проверке формы вы столкнетесь с проблемами при составлении отчетов об ошибках, если решите использовать wc_add_notice
, особенно если вы решите перенаправить после обработки формы.Если вы выполните перенаправление после использования wc_add_notice
, ваше уведомление будет потеряно, так как уведомления не сохраняются при загрузке страницы.