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로 검색하는 스크린샷입니다.
이제 추가하겠습니다.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
'IT' 카테고리의 다른 글
빈칸을 제거하다빈칸을 제거하다php functon을 통해 wordpress 쇼트 코드에서 태그 생성 (0) | 2023.03.14 |
---|---|
"클래스 WP_Post 개체를 문자열로 변환할 수 없습니다" 가져오기 - 문자열인 경우 (0) | 2023.03.14 |
Word press 이동 후 로그인은 가능하지만 관리자 접근은 더 이상 (0) | 2023.03.14 |
react-redux 종속성을 설치하는 동안 오류가 발생했습니다. (0) | 2023.03.14 |
CSS에서는 h1과 h2의 글꼴사이즈를 어떻게 변경합니까? (0) | 2023.03.14 |