Woocommerce에서 주문을 위한 메타 추가
웹 사이트의 사용자 지정 플러그인을 만들고 있습니다.
이 플러그인의 일부에서 추가 메타를 저장해야 합니다.wp_postmeta
각 주문에 대해
플러그인 클래스에 다음을 추가했습니다.
add_action ('woocommerce_before_checkout_process', array( &$this, 'add_item_meta', 10, 2) );
그리고 이것은.add_item_meta()
기능:
function add_item_meta( $item_id, $values ) {
wc_add_order_item_meta($item_id, '_has_event', 'yes' );
}
이 기능은 완전하지 않습니다만, 이 코드에서는 아무 일도 일어나지 않습니다.다른 훅을 사용해야 할 것 같습니다만, 제대로 된 훅을 찾을 수 없습니다.
이것에 대해 아는 사람 있나요?
또 다른 문제가 있습니다.$item_id
: 이것은 woocommerce 글로벌 변수이지만 내 플러그인에서 볼 수 없습니다!
내 플러그인이나 이와 같은 것에서는 이 변수에 액세스할 수 없습니다.
2018년 방식:
Guido W.P. answer를 기반으로 한 보다 가볍고 효과적인 버전 코드로 액션 훅을 대신 사용할 수 있습니다(WC 3+ CRUD 방법 사용).
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order->update_meta_data( '_custom_meta_key', 'value' );
}
코드가 기능합니다.php 파일에는 액티브한 아이 테마(또는 활성 테마).
WooCommerce 3+에서 테스트 및 동작합니다(만).
설명:
작업 후크는 주문 데이터를 저장하기 전에 한 단계만 수행하면 됩니다.아래 발췌를 참조해 주세요.WC_Checkout
create_order()
방법(양쪽 후크 포함):
/**
* Action hook to adjust order before save.
* @since 3.0.0
*/
do_action( 'woocommerce_checkout_create_order', $order, $data );
// Save the order.
$order_id = $order->save();
do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data );
return $order_id;
대체를 사용하는 이유:
- 사용할 필요가 없기 때문입니다.
$order = wc_get_order( $order_id );
이미 후크함수에서 인수로 나온 것처럼요.- 사용할 필요가 없습니다.
$order->save();
이 조작은, 그 직후에 행해집니다(소스 코드 참조).- 이 훅은 WooCommerce 버전 3부터 출시되었으며 동일한 목적으로 제작되어 사용 가능한 모든 것을 사용할 수 있습니다.
WC_Order
방법들.이 기능은 기능 내의 코드 한 줄에 대해서만 동작합니다.
Mo Saedi의 답변을 바탕으로 이 스니펫은 WooCommerce 3.0에 의해 도입된 새로운 CRUD 접근법에 더 부합한다고 생각합니다.
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'my_custom_meta_key', 'my data' );
$order->save();
} , 10, 2);
WordPress 포럼의 다음 스레드도 참조하십시오.
답은 다음과 같습니다.woocommerce_checkout_update_order_meta
add_action을 위해, 그리고 나는 간단히 사용해야 한다.update_post_meta()
주문에 메타를 추가하다
function add_item_meta( $order_id ) {
//global $woocommerce;
update_post_meta( $order_id, '_has_event', 'yes' );
}
2016년 방식:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
update_post_meta( $order_id, 'my_custom_meta_key', 'my data' );
} , 10, 2);
$order_id
주문 ID로 커스텀 투고 타입으로 저장됩니다.$posted
모든 데이터가$_POST
언급URL : https://stackoverflow.com/questions/25626058/add-extra-meta-for-orders-in-woocommerce
'source' 카테고리의 다른 글
HATEOAS에서 '_embedded'의 의미와 사용방법 (0) | 2023.03.18 |
---|---|
*ngFor에 필터를 적용하는 방법 (0) | 2023.03.18 |
컨트롤러를 글로벌하게 하지 않고 Angular에서 유닛 테스트 지시 컨트롤러 (0) | 2023.03.18 |
GraphQL에서 "edge"와 "node"의 의미는 무엇입니까? (0) | 2023.03.18 |
관찰 가능한 서브스크립션이 포함된 함수의 값을 반환하려면 어떻게 해야 합니까? (0) | 2023.03.18 |