source

Woocommerce에서 주문을 위한 메타 추가

ittop 2023. 3. 18. 09:22
반응형

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_metaadd_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

반응형