Расширенные пользовательские поля (ACF) в WooCommerce Checkout - PullRequest
0 голосов
/ 06 декабря 2018

Я использую плагин ACF для управления различными пользовательскими метаданными на веб-сайте WooCommerce.Одна из функций, которую я пытаюсь настроить, - это добавление настраиваемых полей на страницу оформления заказа WooCommerce.Я придерживаюсь общей концепции, изложенной на странице документации WC , которая позволяет добавлять пользовательские формы в форму проверки WC с помощью хука woocommerce_after_order_notes.Оттуда я ввожу форму acf с помощью функции acf_form () с формой, установленной в false, чтобы позволить ей не включать элементы формы ACF (то есть кнопку отправки ACF).Это похоже на работу, потому что я успешно смог заставить настраиваемые поля ACF отображаться в поле оформления заказа в соответствующем месте.

Оттуда я пытаюсь использовать функцию ACF update_field () в сочетании с хуком woocommerce_checkout_update_order_met.В соответствии с рекомендациями сообщества ACF здесь .Вот мой код, который я до сих пор помещаю в мой файл functions.php:

Эта часть работает, как надо.

add_action( 'woocommerce_after_order_notes', 'my_custom_budgetcenter_field' ); //This runs the my_custom_budgetcenter_field funtion within the chekout form.

function my_custom_budgetcenter_field( ) { 
    echo '<div id="my_custom_budget center_field"><h2>' . __('Budget Center Field') . '</h2></div>'; // This Line Adds A header Line the the bottom of the WC Checkout Page. 
    acf_form(array('form' => false,'fields' => array('acf_selected_budget_center'))); //This line outputs the ACF form with form value set to false so its included in the woocommerce checkout form.  It then sets the fields to equal my the acf_selected_budget_center field group
}

Это часть, с которой у меня возникают проблемы:

add_action( 'woocommerce_checkout_update_order_meta', 'my_custom_budgetcenter_field_update_order_meta' ); //This line runs the  my_custom_budgetcenter_field_update_order_meta when woocomerce updates the order meta when submiting the form.

function my_custom_budgetcenter_field_update_order_meta( $order_id ) { 
        $valueofbc = get_field( "field_5c005d0c5f829" );
        $bcfieldkey = "field_5c005d0c5f829";
        update_field( $bcfieldkey, $valueofbc, $order_id  );

} ;

Когда я вручную устанавливаю строку $ valueofbc (Пример: $valueofbc = "001 - Activities" ;), все работает.Я могу отправить заказ, и это поле будет обновлено жестко закодированной строкой.Однако, когда я установил его на параметр функции get_field , чтобы он использовал пользовательский файл ACF (выборочное значение), он не сохраняет значение.После некоторых копаний мне кажется, что мне нужно (ed) установить acf_form_head () над функцией wordpress get_header () в порядке шаблона страницы оформления заказа, чтобы ACF извлекал и публиковал данные.Однако, когда я сделал это и прошел процесс оформления заказа, а затем нажал «отправить заказ» на странице оформления заказа woocomerce, я получил «покинуть сайт? - внесенные вами изменения могут не сохраниться» - оставить - отменить «Уведомление JavaScript пристраница пытается обработать заказ. Когда я нажимаю «Выйти», он переходит на страницу подтверждения заказа, но не сохраняет мета-значение. Когда я нажимаю «Отмена», обработчик заказов просто вращается бесконечно и никогда не обновляет страницу.

На данный момент я на грани своего ума, пытаясь заставить это работать. Мне нужно использовать ACF из-за некоторой продвинутой условной логики в том, что такое отображение, и того, как данные будут работать с другими данными в других формах.Базовая форма оформления заказа добавить плагин, а не вариант. Кроме того, поддержка ACF может занять несколько недель, поэтому я публикую здесь. Любая помощь будет принята с благодарностью.

Спасибо,

1 Ответ

0 голосов
/ 07 декабря 2018

Разобрался.Функция acf_form_head () представляет собой комбинацию нескольких действий.Одно из этих действий (acf / submit_form) включает функцию перенаправления, которая, очевидно, не работает при отправке через другую форму.Решение состоит в том, чтобы использовать действие acf / save_post вместо submit_form.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...