IT

woocommerce_merce_update_order_merce 액션이 작동하지 않습니다.

itgroup 2023. 3. 14. 21:34
반응형

woocommerce_merce_update_order_merce 액션이 작동하지 않습니다.

안녕하세요, 저는 오늘 woo-commerce와 함께 작업하고 있었습니다.사용자 요건에 따라 몇 가지 커스텀 체크아웃 필드를 작성했습니다만, 데이터베이스에 저장할 수 없습니다.

커스텀 체크 아웃필드를 작성한 방법...자녀 테마에 있습니다.functions.php

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Over Ridding, Removing, Creating New Fields.
function custom_override_checkout_fields( $fields ) {
     unset($fields['billing']['billing_company']);
     unset($fields['billing']['billing_address_2']);    
     unset($fields['order']['order_comments']);
     unset($fields['billing']['billing_address_1']);
     unset($fields['billing']['billing_city']);
     unset($fields['billing']['billing_postcode']);
     unset($fields['billing']['billing_email']);


     $fields['billing']['your_name'] = array(
    'type'      => 'text',
    'label'     => __('Full Name', 'woocommerce'),
    'placeholder'   => _x('Full Name', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     $fields['billing']['your_phone_number'] = array(
    'type'      => 'text',
    'label'     => __('Your Phone Number', 'woocommerce'),
    'placeholder'   => _x('Your Phone Number', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     $fields['billing']['recipient_name'] = array(
    'type'      => 'text',
    'label'     => __("Recipient's Name", 'woocommerce'),
    'placeholder'   => _x("Recipient's Name", 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     $fields['billing']['recipient_company_name'] = array(
    'type'      => 'text',
    'label'     => __("Recipient's Company (if any)", 'woocommerce'),
    'placeholder'   => _x("Recipient's Company (if any)", 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     $fields['billing']['recipient_phone_number'] = array(
    'type'      => 'text',
    'label'     => __("Recipient's Phone Number", 'woocommerce'),
    'placeholder'   => _x("Recipient's Phone Number", 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     $fields['billing']['recipient_address'] = array(
    'type'      => 'text',
    'label'     => __("Recipient's Address", 'woocommerce'),
    'placeholder'   => _x("Recipient's Address", 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

필드를 찾고 있는 db.그것의.wp_postmeta표. 첨부한 것은 주문 ID로 검색하는 스크린샷입니다.wp_postmeta DB 테이블

이제 추가하겠습니다.checkout_update_order_meta주문 메타를 업데이트하고 커스텀으로 작성된 필드를 저장합니다.그런데 체크인을 할 때 작동이 안 되는 것 같아요.wp_postmeta최근에 작성된 주문 ID를 가진 테이블 커스텀 필드를 찾을 수 없습니다.

add_action( 'woocommerce_checkout_update_order_meta', 'some_custom_checkout_field_update_order_meta' );

function some_custom_checkout_field_update_order_meta( $order_id ) {


if ( ! empty( $_POST['recipient_address'] ) ) {
add_post_meta( $order_id, 'recipient_address', sanitize_text_field( $_POST['recipient_address'] ) );
}
if (!empty($_POST['recipient_phone_number'])) {
        update_post_meta($order_id, 'recipient phone number', sanitize_text_field($_POST['recipient_phone_number']));
    }

}

Woocommerce 코드는 처음이라 많이 검색해서 포기해서 왔어요.이 미스터리를 풀 수 있게 도와주세요.

제가 잘못하고 있는 것을 바로잡아 주세요.또한 이 절차 후 워드프레스 대시보드의 woocommerce > orders > order details 아래에 이러한 커스텀필드를 표시해야 합니다.이러한 커스텀필드가 도움이 되는 링크가 있으면 알려주세요.

잘 부탁드립니다.

방금 전 후크 기능을 조금 변경했는데 (WC 버전 2.6.x 및 3.0+에서) 작동합니다.php 함수는 변수를 사용하는 것이 좋습니다(복고 호환성이 있습니다.
또한 이 함수는 가 이미 존재하는지 확인하고 존재하지 않는 경우 대신 호출되므로 대신 사용하는 것이 좋습니다.

다음은 주문 메타 데이터와 관련된 표의 스크린샷입니다.

가 다음과 같이 밑줄로 시작하지 않으면 Custom fields 메타박스의 여기에 이미지 설명 입력백엔드 순서 편집 페이지에 표시됩니다.

다음은 코드입니다.

add_action( 'woocommerce_checkout_update_order_meta', 'saving_checkout_cf_data');
function saving_checkout_cf_data( $order_id ) {

    $recipient_address = $_POST['recipient_address'];
    if ( ! empty( $recipient_address ) )
        update_post_meta( $order_id, 'recipient_address', sanitize_text_field( $recipient_address ) );

    $recipient_phone_number = $_POST['recipient_phone_number'];
    if ( ! empty( $recipient_phone_number ) )
        update_post_meta($order_id, 'recipient_phone_number', sanitize_text_field( $recipient_phone_number ) );

}

코드가 기능합니다.php 파일 또는 임의의 플러그인 파일에 있는 활성 자식 테마(또는 테마)입니다.

클래식 과금 체크아웃 필드와 같은 시작 필드를 원하는 경우 기능을 변경하기만 하면 됩니다.예를 들어 다음과 같습니다.

update_post_meta( $order_id, '_billing_recipient_address', sanitize_text_field( $recipient_address ) );

단, 이 경우 주문 편집 페이지의 커스텀 필드 메타박스에는 표시되지 않습니다.

여러 필드를 업로드해야 했고 다음과 같은 어레이를 사용했습니다.

add_action('woocommerce_checkout_update_order_meta', 'tu_funcion'); 
function tu_funcion($order_id) 
{ 
$arrEnv = array('billing_cif', 'despliegue_nombre', 'despliegue_apellido', 'despliegue_correo');
foreach ($arrEnv as $valor) :
if (!empty($_POST[$valor]))
update_post_meta($order_id, $valor, sanitize_text_field($_POST[$valor]));
endforeach; }

이전에 나는 그들에게 체크아웃을 소개했습니다:

add_filter ('woocommerce_checkout_fields', 'custom_fields_finish_purchase');
function custom_fields_finish_purchase($fields){
 $fields['billing']['billing_cif'] = array (
     'type' => 'text',
     'label' => 'CIF',
     'placeholder' => 'Write here the CIF of the company',
     'class' => array ('form-row-wide'),
     'required' => true,
 );
// more fields here...
return $fields;
}

주문에 대한 자세한 내용은 다음 fook을 참조하십시오.

add_action('woocommerce_admin_order_data_after_billing_address', 'your_function', 10, 1);
function your_function{
echo '<p><strong>CIF:</strong> ' . get_post_meta($order->get_id(), 'billing_cif', true) . '</p>';}

또한 이메일에 쓰는 경우 다음 add_action 훅을 사용할 수 있습니다.

'woocommerce_email_after_order_table'

언급URL : https://stackoverflow.com/questions/44057357/woocommerce-checkout-update-order-meta-action-is-not-working

반응형