Intereting Posts
Публикация сообщений с помощью wp-cli Показывать будущие события на основе настраиваемого поля И порядок по дате Плагин для удаления пунктов меню администратора на основе роли пользователя? Есть ли способ использовать латекс \ cite {reference} в wordpress? Как отключить электронную почту подтверждения для WordPress для новых пользователей обратный следующий / предыдущий порядок страницы Только показать автору свои пользовательские типы сообщений Проверка многопользовательской активации темы «Чейт»? Ошибка при загрузке изображений после обновления 3,4 Устранить параметры из перенаправления Плагин для локализации одного языка Как сохранить несколько параметров из раскрывающегося списка в профиле пользователя получить определенное название таксономии meta_query compare = '! =' с несколькими настраиваемыми полями Поиск разъяснений по жизненному циклу запроса страницы

Woocommerce: пользовательские поля и короткие текстовые коды электронной почты, ec_custom_field

Как добавить пользовательское поле в продукт Woocommerce, и появится ли это поле в письмах, полученных при покупке?

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

После долгих ворчаний мы поняли это. Вот документация, которую мы написали для себя. Очень огорчительно, что Woocommerce не удосужились написать свою собственную документацию для этого (вместо этого, только ссылку на дорогостоящий плагин).

Я не добавил детали, которые говорят о настройке шаблона для заказа продукта, я не делал этого.


Предпосылки: PHP создает кучу кода для генерации страницы. Перед запуском большого количества фильтров выполняется «обработка» данных и их настройка, а затем в конце выполняется 1 действие, чтобы в основном распечатать HTML на полученной странице.

Перед началом рендеринга страницы запускается «фильтр». Выполняется «действие». Чтобы написать страницу, т.е. записать сгенерированный HTML-код для отправки клиенту веб-браузера.

Вы можете добавлять свои собственные фильтры и действия в определенные моменты, которые предлагает Woocommerce (например, чтобы распечатать кнопку перед кнопкой проверки). Есть определенные пункты, на которые нужно «подключиться», где WordPress / Woocommerce будут выполнять ваши пользовательские функции.

Чтобы добавить свои собственные вещи, вы редактируете файл: public_html / wp-content / themes / Divi-child / functions.php и вызываете add_filter () или add_action (), с помощью: * ключевого имени крюка woocommerce * текстовое имя вашей функции, которую вы хотите запустить во время этой точки перехвата. Ваша функция добавляется в список, который Woocommerce будет запускать в определенный момент времени во время выполнения.


Итак, шаги для настраиваемого поля. Например, «цвет глаз», заголовок экрана будет «Цвет глаз», а ключ – «eye_colour».

Шаг 1: добавьте «действие» на страницу проверки, чтобы отобразить это новое поле.

//////////////////// // (run this after 'order notes') (call it custom_WHATEVERKEY_checkout_field - same as function name) // | | // | | // vv add_action( 'woocommerce_after_order_notes', 'custom_eye_colour_checkout_field' ); // function name must match text above in add_action function custom_eye_colour_checkout_field( $checkout ) { // div id can be anything, you use this id to match CSS styling // 'echo' will 'print' out HTML to the resulting page... this is the point of 'actions' echo '<div id="custom_eye_colour_checkout_field"><h2>' . __('Eye Colour') . '</h2>'; // 'eye_colour' is the key... 'class' will be the CSS styling class // Label is displayed in the order page, // Placeholder is what is written in the little text box before user starts typing. // woocommerce_form_field( 'eye_colour', array( 'type' => 'text', // could be a number or something else, page will help validate 'class' => array('my-field-class form-row-wide'), // CSS style class 'label' => __('Eye Colour (whatever you like in the title)'), 'placeholder' => __('Enter the eye colour you would like, display in the entry text box'), ), $checkout->get_value( 'eye_colour' )); // note the eye_colour key at the bottom line here // and finish the little HTML enclosing div. echo '</div>'; } 

Шаг 2: Сосать набранный «цвет глаз» от пользователя и сохранить его с деталями заказа.

Пользователь нажмет «Place Order», который является обычной формой HTML, и будет отправлять все введенные детали через HTTP POST-поля, как обычно в веб-мире.

Поэтому мы должны принести это поле и «прикрепить» его к порядку с помощью ключа. Это делается с помощью «действия», а не точно от механизма или когда это выполняется.

Обратите внимание, что ниже, текстовый ключ ** здесь,

 update_post_meta( $order_id, ' ** eye_colour ** ', sanitize_text_field( $_POST['eye_colour'] ) ); 

Не обязательно должен быть таким же, как ключ POST, его ключ, прикрепленный к заказу. Но пусть это будет продолжаться и дальше. Обратите внимание, что мы обычно используем this_kind_of_naming для ключей как конвенцию.

 add_action( 'woocommerce_checkout_update_order_meta', 'custom_eye_colour_checkout_field_update_order_meta' ); function custom_eye_colour_checkout_field_update_order_meta( $order_id ) { if ( ! empty( $_POST['eye_colour'] ) ) { update_post_meta( $order_id, 'eye_colour', sanitize_text_field( $_POST['eye_colour'] ) ); } } 

Шаг 3 – покажите это поле на странице редактирования заказа, которое, как я полагаю, находится в бэкэнде WordPress.

 add_action( 'woocommerce_admin_order_data_after_billing_address', 'custom_eye_colour_checkout_field_display_admin_order_meta', 10, 1 ); function custom_eye_colour_checkout_field_display_admin_order_meta($order){ echo '<p><strong>'.__('Eye Colour').':</strong> ' . get_post_meta( $order->id, 'eye_colour', true ) . '</p>'; } 

Шаг 4 – покажите это по электронной почте!

Штрих-код магии

 [ec_custom_field key="eye_colour"] 

Поместите это в «Основной текст» в «Настройщик электронной почты Woocommerce», и он заменит этот кусок текстом, который пользователь напечатал в форме заказа.

Шаг 5 – показать это на странице редактирования заказа

(Отображение в бэкэнд, где вы смотрите на все заказы, которые прошли люди)

Опять же, мы добавим крючок в functions.php. Обратите внимание, что имя крюка называется «woocommerce_admin_order_data_after_billing_address», поэтому эта информация появится ПОСЛЕ раздела «платежный адрес». Вероятно, есть множество других крючков, чтобы вы могли отображать эту информацию в другой точке страницы.

 add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 ); function my_custom_checkout_field_display_admin_order_meta($order){ echo '<p><strong>'.__('Eye Colour').':</strong> ' . get_post_meta( $order->id, 'eye_colour', true ) . '</p>'; } 

Шаг 6 – Уровень бонуса – какие поля доступны для ec_custom_field?

Непонятно, какой код требуется в части [ec_custom_field key = "???"]. Таким образом, вы можете отобразить список этих полей на странице заказа продукта в бэкэнд WordPress (т.е. раздел «Администратор», где вы можете увидеть все заказы на продукт, которые прошли люди).

Опять же, мы добавим крючок в functions.php. На этот раз мы распечатаем список всех полей, прикрепленных к заказу (похоже, он прикреплен к HTTP-сообщению).

 add_action( 'woocommerce_admin_order_data_after_billing_address', 'debug_checkout_field_display_admin_order_meta', 10, 1 ); function debug_checkout_field_display_admin_order_meta($order){ echo '<p><strong>'.__('(debug) List fields').':</strong>'; $vals = get_post_meta( $order->id ); // Assume each value is a 1 element array, seems to be the situation. foreach($vals as $key => $val) { echo '<br/>* <strong>' . $key . ':</strong> ' . $val[0]; } /* To print out all the elements in the value-keys... foreach($vals as $key => $val) { echo '<br/>* <strong>' . $key . ':</strong> ' . $val; foreach($val as $key2 => $val2) { echo '<br/>** <strong>' . $key2 . ':</strong> ' . $val2; } } */ echo '<br/>Thats it.<br/>'; echo '</p>'; } 

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