카트, 체크아웃 및 보기 순서에서 제품 사용자 정의 필드 및 표시 값 설정
function.php를 통해 제품 페이지에 보증을 위한 사용자 정의 필드를 만들었습니다.
add_action( 'woocommerce_product_options_general_product_data', 'test_custom_fields' );
function test_custom_fields() {
// Print a custom text field
woocommerce_wp_text_input( array(
'id' => '_warranty',
'label' => 'i.e. 15 years',
'description' => '',
'desc_tip' => 'true',
'placeholder' => 'i.e. 15 years'
) );
}
add_action( 'woocommerce_process_product_meta', 'test_save_custom_fields' );
function test_save_custom_fields( $post_id ) {
if ( ! empty( $_POST['_warranty'] ) ) {
update_post_meta( $post_id, '_warranty', esc_attr( $_POST['_warranty'] ) );
}
}
이 사용자 지정 필드를 카트/주문 제품(플러그인 없음)에 따라 관리자 주문 페이지의 자체 생성 사용자 지정 필드에 키와 값으로 "복제"하고 싶습니다.
그래서 주문 페이지에 이 커스텀 필드가 있으면 드디어 WooCommerce PDF Invoice 플러그인으로 pdf 송장에 "waranty"를 표시할 수 있게 되었습니다.
또 다른 설명:
- 관리자로서 '상품1'페이지에 _보증가치를 기입합니다
- "product1"이 주문되어 있을 때 관리자 주문 보기에서 product1 페이지에서 "_waranty + value"가 포함된 커스텀 필드를 보고 싶습니다.
- 그래서 관리자로서 WooCommerce PDF Invoice 플러그인에 "Warranty : 15년"을 표시하도록 설정할 수 있었습니다.
도와주셔서 대단히 고맙습니다.
나는 방금 다음의 경우를 테스트했습니다: 주문 세부 정보의 주문 항목 표에 상품 메타를 표시합니다.
그러나 이것은 사용자 정의 필드를 제공하지 않기 때문에 값의 너비를 구할 수 없었습니다.
내가 뭘 잘못하고 있는 거지?
어떻게 하면 이것을 이룰 수 있을까요?
감사해요.
첫번째: "관리 주문 페이지의 자체 생성 사용자 지정 필드에 이 사용자 지정 필드를 키 및 값과 함께 복제" 좋은 접근법이 아닙니다.
당신이 기대하는 것을 달성하기 위해, 당신은 몇 가지 작은 것들을 놓쳤습니다.다음을 수행해야 합니다.
- 카트에 사용자 정의 필드 저장(제품을 카트에 추가할 경우)
- 카트 및 체크아웃 페이지에서 렌더링
- 정보를 순서대로 메타데이터로 추가(주문의 일부로 만들기
포인트 3을 사용하면 WooCommerce PDF Invoice 플러그인에서 "Warranty : 15년"을 표시할 수 있습니다.
필요한 코드는 다음과 같습니다.
// create the custom field on product admin tab
add_action( 'woocommerce_product_options_general_product_data', 'create_warranty_custom_field' );
function create_warranty_custom_field() {
// Create a custom text field
woocommerce_wp_text_input( array(
'id' => '_warranty',
'type' => 'text',
'label' => __('Warranty', 'woocommerce' ),
'description' => '',
'desc_tip' => 'true',
'placeholder' => __('i.e. 15 years', 'woocommerce' ),
) );
}
// save the data value from this custom field on product admin tab
add_action( 'woocommerce_process_product_meta', 'save_warranty_custom_field' );
function save_warranty_custom_field( $post_id ) {
$wc_text_field = $_POST['_warranty'];
if ( !empty($wc_text_field) ) {
update_post_meta( $post_id, '_warranty', esc_attr( $wc_text_field ) );
}
}
// Store custom field in Cart
add_filter( 'woocommerce_add_cart_item_data', 'store_warranty_custom_field', 10, 2 );
function store_warranty_custom_field( $cart_item_data, $product_id ) {
$warranty_item = get_post_meta( $product_id , '_warranty', true );
if( !empty($warranty_item) ) {
$cart_item_data[ '_warranty' ] = $warranty_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', $warranty_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['_warranty'] ) ) {
$custom_items[] = array( "name" => __( "Warranty", "woocommerce" ), "value" => $cart_item['_warranty'] );
}
return $custom_items;
}
// Add the information in the order as meta data
add_action('woocommerce_add_order_item_meta','add_waranty_to_order_item_meta', 1, 3 );
function add_waranty_to_order_item_meta( $item_id, $values, $cart_item_key ) {
// Retrieving the product id for the order $item_id
$product_id = wc_get_order_item_meta( $item_id, '_product_id', true );
// Getting the warranty value for this product Id
$warranty = get_post_meta( $product_id, '_warranty', true );
// Add the meta data to the order
wc_add_order_item_meta($item_id, 'Warranty', $warranty, true);
}
당연히 이것은 제 기능을 합니다.활성 하위 테마(또는 테마)의 php 파일 또는 플러그인 파일에 있습니다.
이 코드는 테스트되고 작동합니다.
참조:
코드 끝에 오류가 있습니다. 변수를 호출합니다.$prod_id
처음엔, 그 다음엔$product_id
. 정확하고 작동하는 코드는 다음과 같습니다.
// Add the information in the order as meta data
add_action('woocommerce_add_order_item_meta','add_waranty_to_order_item_meta', 1, 3 );
function add_waranty_to_order_item_meta( $item_id, $values, $cart_item_key ) {
// Retrieving the product id for the order $item_id
$prod_id = wc_get_order_item_meta( $item_id, '_product_id', true );
// Getting the warranty value for this product Id
$warranty = get_post_meta( $prod_id, '_warranty', true );
// Add the meta data to the order
wc_add_order_item_meta($item_id, 'Warranty', $warranty, true);
}
언급URL : https://stackoverflow.com/questions/39297027/set-product-custom-field-and-display-value-in-cart-checkout-and-view-order
'programing' 카테고리의 다른 글
Groovy XmlSlurper 대 XmlParser (0) | 2023.09.20 |
---|---|
PHP 파일이 이미지인지 확인 (0) | 2023.09.15 |
하위 쿼리를 사용하는 쿼리는 하위 쿼리 대신 고정 데이터가 있는 동일한 쿼리보다 더 긴 시간이 필요합니다. (0) | 2023.09.15 |
null 값을 외부 키 필드에 전달하는 방법? (0) | 2023.09.15 |
utf-8 인코딩된 텍스트를 MySQL 테이블에 로드하는 중 (0) | 2023.09.15 |