Я пытаюсь внести метаданные в «элементы» заказов WoCommerce.
В конкретных терминах я сначала создал текстовый ввод на «вкладке« Общие »продукта, и цель состоит в том, чтобы показать, что я пишу в этом поле в таблице woocommerce "мой заказ".
Мне удалось создать фрагмент, который добавляет столбцы в таблицу "мой заказ" и заполняет эти поля метаданными элемента ( с order->get_item
, а затем с get_meta
, например, названием продукта). Проблема в том, что мое поле (созданное мной в продукте) не отображается в метаданных "предметов" заказа.
Я все еще не очень хорошо разбираюсь в PHP, и код, который я создал, представляет собой вырезку из других фрагментов, найденных на net.
Заранее спасибо.
/**
* Display the custom text field
* @since 1.0.0
*/
function cfwc_create_custom_field() {
$args = array(
'id' => 'jjj',
'label' => __( 'inserire data del venerdì', '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' );
/**
* Save the custom field
* @since 1.0.0
*/
function cfwc_save_custom_field( $post_id ) {
$product = wc_get_product( $post_id );
$title = isset( $_POST['jjj'] ) ? $_POST['jjj'] : '';
$product->update_meta_data( 'jjj', sanitize_text_field( $title ) );
$product->save();
}
add_action( 'woocommerce_process_product_meta', 'cfwc_save_custom_field' );
//-------------------------------------------------------------------------------------------------------------------------
add_filter( 'woocommerce_before_add_to_cart_button', 'woo_display_variation_dropdown_on_shop_page' );
function woo_display_variation_dropdown_on_shop_page() {
global $product;
$attribute_keys = array_keys( $product->get_meta_data( 'jjj' ) );
}
//-------------------------------------------------------------------------------------------------------------------------
/**
* Add 'jjj' to cart item.
*
* @param array $cart_item_data
* @param int $product_id
* @param int $variation_id
*
* @return array
*/
function iconic_add_jjj_to_cart_item( $cart_item_data, $product_id, $variation_id ) {
$engraving_text = filter_input( INPUT_POST, 'jjj' );
$cart_item_data['jjj'] = $engraving_text;
return $cart_item_data;
}
add_filter( 'woocommerce_add_cart_item_data', 'iconic_add_jjj_to_cart_item', 10, 3 );
//-------------------------------------------------------------------------------------------------------------------------
function adding_custom_data_in_order_items_meta( $item_id, $values, $cart_item_key ) {
if ( isset($values['jjj'])) {
$the_meta = $values['jjj'];
wc_add_order_item_meta($item_id, 'pa-the-meta', $the_meta );
}
}
add_action('woocommerce_add_order_item_meta','adding_custom_data_in_order_items_meta', 10, 3 );
//-------------------------------------------------------------------------------------------------------------------------
/**
* Display jjj in the cart.
*
* @param array $item_data
* @param array $cart_item
*
* @return array
*/
function iconic_display_engraving_text_cart( $item_data, $cart_item ) {
$item_data[] = array(
'key' => __( 'provola', 'default' ),
'value' => wc_clean( $cart_item['jjj'] ),
'display' => '',
);
return $item_data;
}
add_filter( 'woocommerce_get_item_data', 'iconic_display_engraving_text_cart', 10, 2 );
//-------------------------------------------------------------------------------------------------------------------------
/**
* Add engraving text to order.
*
* @param WC_Order_Item_Product $item
* @param string $cart_item_key
* @param array $values
* @param WC_Order $order
*/
add_action( 'woocommerce_checkout_create_order_line_item', 'iconic_add_engraving_text_to_order_items', 10, 4 );
function iconic_add_engraving_text_to_order_items( $item, $cart_item_key, $values, $order ) {
$item->add_meta_data( __( 'provola', 'default' ), $values['jjj'] );
}