Добавление настраиваемого поля в серверной части:
Это добавит новое поле в раздел «Данные продукта» продукта WooCommerce.
/**
* Display the custom text field
* @since 1.0.0
*/
function cfwc_create_custom_field() {
$args = array(
'id' => 'custom_text_field_title',
'label' => __( 'Custom Text Field Title', 'cfwc' ),
'class' => 'cfwc-custom-field',
'desc_tip' => true,
'description' => __( 'Enter the title of your custom text field.', 'ctwc' ),
);
woocommerce_wp_text_input( $args );
}
add_action( 'woocommerce_product_options_general_product_data', 'cfwc_create_custom_field' );
Подключение функции настраиваемого поля:
Чтобы убедиться, что настраиваемое поле отображается в правильном месте - в данном случае это просто вкладка «Общие» - нам нужно подключить нашу функцию к правильномуaction: woocommerce_product_options_general_product_data.
Если вы хотите добавить свое настраиваемое поле на другую вкладку, вы можете попробовать выполнить такие действия, как:
- woocommerce_product_options_inventory_product_data
Сохранение значения настраиваемого поля
С помощью этого кода мы получили действительно простой способ добавления настраиваемых полей к продуктам, используя стандартные функции и действия WooCommerce.Все, что нам нужно знать, это сохранять значение поля при обновлении продукта.
/**
* Save the custom field
* @since 1.0.0
*/
function cfwc_save_custom_field( $post_id ) {
$product = wc_get_product( $post_id );
$title = isset( $_POST['custom_text_field_title'] ) ? $_POST['custom_text_field_title'] : '';
$product->update_meta_data( 'custom_text_field_title', sanitize_text_field( $title ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'cfwc_save_custom_field' );
Эта функция запускается при первой публикации продукта или при его обновлении.Он ищет значение в нашем настраиваемом поле, очищает его, а затем сохраняет как метаданные продукта, используя методологию CRUD, представленную в WooCommerce несколько версий назад.
Функция подключается к woocommerce_process_product_meta action.
Добавление пользовательских значений в корзину
Если продукт успешно подтвержден, он будет добавлен в объект корзины WooCommerce.Мы можем добавить наши собственные метаданные к этому объекту, чтобы использовать их позже в процессе, например, на страницах корзины и оформления заказа, а также для заказов и электронных писем.
/**
* Add the text field as item data to the cart object
* @since 1.0.0
* @param Array $cart_item_data Cart item meta data.
* @param Integer $product_id Product ID.
* @param Integer $variation_id Variation ID.
* @param Boolean $quantity Quantity
*/
function cfwc_add_custom_field_item_data( $cart_item_data, $product_id, $variation_id, $quantity ) {
if( ! empty( $_POST['cfwc-title-field'] ) ) {
// Add the item data
$cart_item_data['title_field'] = $_POST['cfwc-title-field'];
}
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'cfwc_add_custom_field_item_data', 10, 4 );
Эта функция переходит на woocommerce_add_cart_item_data , которая фильтрует данные, передаваемые объекту корзины при добавлении товара в корзину.Итак, здесь мы проверяем, что поле cfwc-title-field имеет значение, затем добавляем его к $ cart_item_data.
Отображение пользовательских полей в корзине и оформление заказа
Убедившись, чтонаше пользовательское поле отображается пользователю в формах корзины и оформления заказа, теперь нам нужно передать его значение в заказ, когда пользователь выписывает заказ.
/**
* Add custom field to order object
*/
function cfwc_add_custom_data_to_order( $item, $cart_item_key, $values, $order ) {
foreach( $item as $cart_item_key=>$values ) {
if( isset( $values['title_field'] ) ) {
$item->add_meta_data( __( 'Custom Field', 'cfwc' ), $values['title_field'], true );
}
}
}
add_action( 'woocommerce_checkout_create_order_line_item', 'cfwc_add_custom_data_to_order', 10, 4 );
Мы можем сделать это очень легко, используя woocommerce_checkout_create_order_line_item действие.