첫 주문시 부착되었을 때 작동하지만 동일한 고객이 연속 주문에 표시되지 않는 맞춤 체크 아웃 필드는 힘든시기입니다.Woocommerce 체크 아웃의 사용자 지정 새 필드가 연속 주문에 대해 작동하지 않습니다.
요약하면 카드 번호 인 맞춤 입력란이 있습니다. 고객 등록시 고객이 쇼핑 카드를 받고 싶어하는지 묻는 메시지가 나타납니다. 고객이 옵션에 플래그를 지정하면 "y"가있는 필드가 user_meta 테이블에 추가됩니다. 그런 다음 상점 주인이 이메일을 통해 고객에게 카드 번호를 보냅니다.
고객이 처음 주문한 경우 체크 아웃 페이지에서 card_number 맞춤 입력란이 표시됩니다. 고객이 상점에서 얻은 카드 번호를 추가해야합니다. 주문은 카드 번호 (작동)와 함께 나타나며 카드 번호는 user_meta 테이블에도 저장됩니다. 내가 전에 말했듯이
/**
* Add the field to the checkout
*/
add_action ('woocommerce_after_order_notes', 'checkout_w55_card_number');
function checkout_w55_card_number($checkout) {
//extracts the value of the w55_card_number field
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
//condition is the w55_card_number field is empty or not
if (!empty($w55_card)) : echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2><div style="padding:15px; background-color: #FCFCFC; border: 1px solid #efccb9"><p>' .$w55_card . '</p></div></div>';
else :
echo '<div id="checkout_w55_card_number"><h2>' . __('N. tessera W55') . '</h2>';
woocommerce_form_field('w55_card_number', array(
'type' => 'text',
'class' => array('w55-card-number-class form-row-wide'),
'label' => __('Inserisci n. tessera W55'),
'placeholder' => __('Inserisci numero'),
), $checkout->get_value('w55_card_number'));
echo '</div>';
endif;
}
/**
* Update the order meta with field value
*/
add_action('woocommerce_checkout_update_order_meta', 'w55_card_number_update_order_meta');
function w55_card_number_update_order_meta($order_id) {
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
if (!empty($_POST['w55_card_number'])) {
update_post_meta($order_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
}
/**
* Update the user meta with W55 number if filled
*/
function w55_card_number_woocommerce_checkout_update_user_meta($customer_id) {
if (! empty($_POST['w55_card_number'])) {
update_user_meta($customer_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
}
add_action('woocommerce_checkout_update_user_meta', 'w55_card_number_woocommerce_checkout_update_user_meta', 10, 2);
/**
* Display field value on the order edit page
*/
add_action('woocommerce_admin_order_data_after_billing_address', 'w55_card_number_checkout_field_display_admin_order_meta', 10, 1);
function w55_card_number_checkout_field_display_admin_order_meta($order){
echo '<p><strong>'.__('w55_card_number').':</strong> ' . get_post_meta($order->id, 'w55_card_number', true) . '</p>';
}
이 모든 것이 첫 번째 순서에 대해 잘 작동 :
는 여기에 내가 체크 아웃 절차에 사용되는 코드를 다음과 같습니다. 그러나 동일한 고객이 온라인 상점으로 돌아가서 다른 것을 사 때 문제점은 존재합니다. 체크 아웃 필드의 지점에서 카드 번호가 표시되지만 새로운 주문 (post_meta 테이블)에는 더 이상 저장되지 않습니다. 몇 마디로 필드 값으로 주문 메타를 업데이트하는 코드가 더 이상 작동하지 않습니다. 거기에 저장되지 않으므로 주문 수정 페이지뿐만 아니라 주문 전자 메일에도 나타나지 않습니다.
"업데이트 순서 메타"섹션에서 작성한 코드는 $ _POST를 통해 도착하는 값만 있다고 가정합니다. 그래서 user_id 메타 테이블에서 값을 취해야하는 다음 조건을 추가하려고했지만 여전히 작동하지 않습니다.
/**
* Update the order meta with field value
*/
add_action('woocommerce_checkout_update_order_meta', 'w55_card_number_update_order_meta');
function w55_card_number_update_order_meta($order_id) {
$user_id = get_current_user_id();
$w55_card = '';
if ($user_id)
{
//extracts the value of the w55_card_number field
$w55_card = get_user_meta($user_id, 'w55_card_number', true);
}
if (!empty($_POST['w55_card_number'])) {
update_post_meta($order_id, 'w55_card_number', sanitize_text_field($_POST['w55_card_number']));
}
elseif (!empty ($card_number))
{
update_post_meta($order_id, 'w55_card_number', $card_number, false);
}
}
어떤 종류의 제안입니까? 대단히 감사합니다 !!