Как добавить свое настраиваемое поле в процесс заказа Woocommerce (Форма для проверки, детали заказа и процесс отправки по электронной почте) - PullRequest
0 голосов
/ 07 июня 2019

Я создаю обычное поле данных для моего продукта woocommerce. Я хотел бы отображать эту информацию (дату, время и место) на каждом этапе бронирования. На странице проверки, детали заказа и адрес электронной почты. Не могли бы вы мне помочь ? Найдите ниже код, который я использую для пользовательских полей md. Большое спасибо

add_action( 'woocommerce_product_options_inventory_product_data', 'woocom_inventory_product_data_custom_field' );


function woocom_Inventory_product_data_custom_field() {
  // Create a custom text field

  // Text Field
  woocommerce_wp_text_input( 
    array( 
      'id' => 'venue', 
      'label' => __( 'Venue', 'woocommerce' ), 
      'placeholder' => 'Venue',
      'desc_tip' => 'true',
      'description' => __( 'Enter the location here.', 'woocommerce' ) 
    )
  );

  woocommerce_wp_text_input( 
    array( 
      'id' => 'date', 
      'label' => __( 'Date', 'woocommerce' ), 
      'placeholder' => 'date',
      'desc_tip' => 'true',
      'description' => __( 'Enter the date here.', 'woocommerce' ) 
    )
  );

woocommerce_wp_text_input( 
    array( 
      'id' => 'time', 
      'label' => __( 'Time', 'woocommerce' ), 
      'placeholder' => 'time',
      'desc_tip' => 'true',
      'description' => __( 'Enter the time here.', 'woocommerce' ) 
    )
  );        
}



// Hook to save the data value from the custom fields
add_action( 'woocommerce_process_product_meta', 'woocom_save_inventory_proddata_custom_field' );

/** Hook callback function to save custom fields information */
function woocom_save_inventory_produdata_custom_field( $post_id ) {
  // Save Text Field
  $text_field = $_POST['venue'];
  if( ! empty( $text_field ) ) {
     update_post_meta( $post_id, 'venue', esc_attr( $text_field ) );
  }

    $text_field = $_POST['date'];
  if( ! empty( $text_field ) ) {
     update_post_meta( $post_id, 'date', esc_attr( $text_field ) );
  }

     $text_field = $_POST['time'];
  if( ! empty( $text_field ) ) {
     update_post_meta( $post_id, 'time', esc_attr( $text_field ) );
  }

}

1 Ответ

3 голосов
/ 07 июня 2019

Добавление настраиваемого поля в серверной части:

Это добавит новое поле в раздел «Данные продукта» продукта 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 действие.

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