2017-09-27 7 views
1

사용자 정의 체크 아웃 필드의 일부 문자를 바꿔야합니다.WooCommerce 체크 아웃 필드 : 게시 메타 필드 값에 str_replace 사용

이 내 사용자 정의 체크 아웃 필드의 전체 코드,

/* Add the field to the checkout */ 
add_action('woocommerce_after_checkout_billing_form', 'my_custom_checkout_field'); 
function my_custom_checkout_field($checkout) { 

echo '<div id="my_custom_checkout_field">'; 

woocommerce_form_field('phone_sabet', array(
    'type'   => 'tel', 
    'required'  => true, 
    'clear'  => true, 
    'class'   => array('my-field-class form-row-first'), 
    'label'   => __(''), 
    'placeholder' => __(''), 
    'description'  => '', 
    ), $checkout->get_value(('phone_sabet'))); 

echo '</div>'; 
} 

이 사용자 정의 필드 업데이트가는 코드의 일부이다 (어쩌면 우리는 여기 않는 str_replace를 사용할 수 있습니다)

/* Update the order meta with field value */ 
add_action('woocommerce_checkout_update_order_meta','my_custom_checkout_field_update_order_meta'); 

function my_custom_checkout_field_update_order_meta($order_id) { 
if (! empty($_POST['phone_sabet'])) { 
    update_post_meta($order_id, 'Phone', sanitize_text_field($_POST['phone_sabet'])); 
} 
} 

나는 str_replace를 사용하기에 지쳐서 운이 없다.

add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta'); 

function my_custom_checkout_field_update_order_meta($order_id) { 
if (! empty($_POST['phone_sabet'])) { 
    update_post_meta($order_id, 'Phone', sanitize_text_field($_POST['phone_sabet'])); 

    $getMeta = get_post_meta(get_the_ID(), 'Phone', true); 
    $newMeta = str_replace(array('۱'), '1', $getMeta); 
    update_post_meta(get_the_ID(), 'Phone', $newMeta); 
} 
} 

는 이것이 결제 필드가 처리하려고 할 때의 부분이다. 우리가 여기에 str_replace로 그것을 할 수 있다면 괜찮습니까. 어떤 플러그인 파일도

## Save the order meta with custom field value 
add_action('woocommerce_checkout_update_order_meta', 'custom_update_order_meta'); 
function custom_update_order_meta($order_id) { 
    if (! empty($_POST['phone_sabet'])) { 
     // Replace before saving translating) 
     $phone_sabet = str_replace(array('۱'), array('1'), $_POST['phone_sabet']); 
     update_post_meta($order_id, 'phone', sanitize_text_field($phone_sabet)); 
    } 
} 

코드 활성 자식 테마 (또는 테마)의 function.php 파일이되거나 : 당신이 시도 할 수 있도록

/* Process the checkout */ 
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process'); 

function my_custom_checkout_field_process() { 
if ($_POST['phone_sabet']) 
    // do something 
} 

답변

1

올바른 후크, woocommerce_checkout_update_order_meta입니다 .

테스트를 거쳐 작동합니다.

+1

감사합니다. 매력처럼 일했다. – Mostafa

+1

일반 결제 전화 번호 필드에도 사용할 수 있으므로'$ _POST [ 'billing_phone']'을 대상으로 교체를 할 수 있지만 사용자 전화 데이터를 테스트하고 그 값을 주문에 저장해야합니다 메타 데이터 (키는''_billing_phone ''). – LoicTheAztec