Пользовательские поля пользовательских товаров, отображаемые в корзине и выписке

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

Вот мой код:

// Insert a Custom Admin Field function woo_add_custom_general_fields() { echo '<div class="options_group">'; woocommerce_wp_text_input( array( 'id' => 'days_manufacture', 'label' => __( 'Days for Manufacture', 'woocommerce' ), 'placeholder' => '', 'description' => __( 'Insert here', 'woocommerce' ), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => '1' ) ) ); echo '</div>'; } add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); // Save field function woo_add_custom_general_fields_save( $post_id ){ $woocommerce_number_field = $_POST['days_manufacture']; if( !empty( $woocommerce_number_field ) ) update_post_meta( $post_id, 'days_manufacture', esc_attr( $woocommerce_number_field ) ); } add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); function save_days_field( $cart_item_data, $product_id ) { if( isset( $_REQUEST['days_manufacture'] ) ) { $cart_item_data[ 'days_manufacture' ] = get_post_meta( $post->ID, 'days_manufacture',true ); /* below statement make sure every add to cart action as unique line item */ $cart_item_data['unique_key'] = md5( microtime().rand() ); } return $cart_item_data; } add_action( 'woocommerce_add_cart_item_data', 'save_days_field', 10, 2 ); function render_meta_on_cart_and_checkout( $cart_data, $cart_item = null ) { $custom_items = array(); /* Woo 2.4.2 updates */ if( !empty( $cart_data ) ) { $custom_items = $cart_data; } if( isset( $cart_item['days_manufacture'] ) ) { $custom_items[] = array( "name" => 'Days:', "value" => $cart_item['days_manufacture'] ); } return $custom_items; } add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 ); 

Но это не работает, поскольку я не могу отобразить значение настраиваемого поля на страницах корзины и проверки.

Как я могу это достичь?

благодаря

Я проверил ваш код и исправил некоторые порции, чтобы создать настраиваемое поле продукта на страницах корзины и выписки.

Вот исправленный код:

 // Insert a Custom Admin Field add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' ); function woo_add_custom_general_fields() { echo '<div class="options_group">'; woocommerce_wp_text_input( array( 'id' => 'days_manufacture', 'label' => __( 'Days for Manufacture', 'woocommerce' ), 'placeholder' => '', 'description' => __( 'Insert here', 'woocommerce' ), 'type' => 'number', 'custom_attributes' => array( 'step' => 'any', 'min' => '1' ), ) ); echo '</div>'; } // Save the field add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' ); function woo_add_custom_general_fields_save( $post_id ){ $woocommerce_number_field = $_POST['days_manufacture']; if( !empty( $woocommerce_number_field ) ) update_post_meta( $post_id, 'days_manufacture', esc_attr( $woocommerce_number_field ) ); } // Store custom field add_action( 'woocommerce_add_cart_item_data', 'save_days_field', 10, 2 ); function save_days_field( $cart_item_data, $product_id ) { $special_item = get_post_meta( $product_id , 'days_manufacture',true ); if(!empty($special_item)) { $cart_item_data[ 'days_manufacture' ] = $special_item; // below statement make sure every add to cart action as unique line item $cart_item_data['unique_key'] = md5( microtime().rand() ); WC()->session->set( 'days_manufacture', $special_item ); } return $cart_item_data; } // Render meta on cart and checkout add_filter( 'woocommerce_get_item_data', 'rendering_meta_field_on_cart_and_checkout', 10, 2 ); function rendering_meta_field_on_cart_and_checkout( $cart_data, $cart_item ) { $custom_items = array(); // Woo 2.4.2 updates if( !empty( $cart_data ) ) { $custom_items = $cart_data; } if( isset( $cart_item['days_manufacture'] ) ) { $custom_items[] = array( "name" => __( "Days", "woocommerce" ), "value" => $cart_item['days_manufacture'] ); } return $custom_items; } 

Естественно, это идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код проверен и работает.

Ссылка: WooCommerce: добавьте пользовательскую страницу Metabox на страницу администрирования