วิธีแสดงฟิลด์ที่กำหนดเองในคำสั่งซื้อของ woocommerce ในแผงการดูแลระบบ


13

ขณะนี้ฉันเพิ่มฟิลด์การเรียกเก็บเงินที่กำหนดเองใน woocommerce โดย

function custom_override_checkout_fields( $fields ) {
     $fields['billing']['billing_phone_new'] = array(
        'label'     => __('Phone 2', 'woocommerce'),
    'placeholder'  => _x('Phone 2', 'placeholder', 'woocommerce'),
    'required'  => false,
    'class'     => array('form-row-wide'),
    'clear'     => true
     );

     return $fields;
}

add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');

ฉันต้องการแก้ไขค่าฟิลด์นี้ในด้านผู้ดูแลระบบ ขณะนี้ฉันสามารถแก้ไขค่าอื่น ๆ ทั้งหมดในที่อยู่สำหรับการเรียกเก็บเงินได้ แต่ค่านี้ไม่ปรากฏในส่วนผู้ดูแลระบบ ฉันใช้รหัสต่อไปนี้เพื่อดูค่าในส่วนผู้ดูแลระบบเท่านั้น

function order_phone_backend($order){
    echo "<p><strong>Billing phone 2:</strong> " . get_post_meta( $order->id, '_billing_phone_new', true ) . "</p><br>";
} 

add_action( 'woocommerce_admin_order_data_after_billing_address', 'order_phone_backend', 10, 1 );

ผมอ่านเอกสารhttps://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/ แต่ทุกอย่างในเอกสารนี้ทำงานได้อย่างถูกต้องคาดว่าการเรียกเก็บเงินโทรศัพท์ / โทรศัพท์จะเห็นโน้ตในฟิลด์กำหนดเอง ฉันตรวจสอบตัวเลือกหน้าจอ แต่ฉันเลือกช่องที่กำหนดเองแล้ว ฟิลด์ที่กำหนดเองอื่น ๆ และค่าของมันสามารถมองเห็นและแก้ไขได้

ฉันจะแก้ไขค่านี้ในส่วนหลังได้อย่างไร กรุณาช่วย .


บล็อกรหัสแรกในคำถามของคุณจะแก้ไขฟิลด์ 'หมายเลขโทรศัพท์' ที่เป็นค่าเริ่มต้น มันไม่ได้เพิ่มเขตข้อมูลใหม่ใด ๆ ในแบบฟอร์มการชำระเงิน ช่องชำระเงินจะไม่สามารถใช้งานได้ภายใต้ "ช่องที่กำหนดเอง" ดังนั้นโปรดอย่าค้นหาที่นั่น หากคุณต้องการแก้ไขฟิลด์ใด ๆ จากที่อยู่เรียกเก็บเงินหรือที่อยู่จัดส่งให้ไปที่แบ็กเอนด์และคลิกคำสั่งซื้อใด ๆ ภายใต้รายการสั่งซื้อ จากนั้นคุณจะเห็นไอคอนแก้ไขเล็ก ๆ นอกเหนือจากหัวข้อ 'รายละเอียดการเรียกเก็บเงิน' และ 'รายละเอียดการจัดส่ง' การคลิกที่จะทำให้คุณสามารถแก้ไขรายละเอียดเหล่านั้นได้ ฉันหวังว่านี่จะช่วยได้.
Prasad Nevase

โปรดตรวจสอบรหัสของฉันตอนนี้
Ron

คำตอบ:


22

รหัสที่คุณระบุไม่สมบูรณ์ ไม่แน่ใจว่าเป็นรหัสเดียวที่คุณใช้เพื่อให้บรรลุสิ่งที่คุณต้องการ ดังนั้นนอกเหนือจากการบล็อกโค้ดแรกที่คุณให้ไว้ซอลเบลฉันกำลังเพิ่มโค้ดที่เหลือทั้งหมดซึ่งจะต้องแสดงฟิลด์ใหม่ในแบ็กเอนด์ในกล่อง 'รายละเอียดการสั่งซื้อ' และทำให้สามารถแก้ไขได้ผ่านฟิลด์ที่กำหนดเอง _billing_new_phoneโปรดทราบว่าในการป้องกันรหัสที่สองของคุณที่คุณได้รับการตั้งชื่อคีย์ข้อมูลเป็น ชื่อคีย์ฟิลด์ที่กำหนดเองใด ๆ ที่เริ่มต้นด้วย _ (ขีดล่าง) เป็นฟิลด์ที่กำหนดเองที่ซ่อนอยู่และจะไม่แสดงในแบ็กเอนด์ภายใต้ "ฟิลด์ที่กำหนดเอง"

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

function my_custom_checkout_field_process() {
    // Check if set, if its not set add an error.
    if ( ! $_POST['billing_phone_new'] )
        wc_add_notice( __( 'Phone 2 is compulsory. Please enter a value' ), 'error' );
}


/**
 * 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['billing_phone_new'] ) ) {
        update_post_meta( $order_id, 'billing_phone_new', sanitize_text_field( $_POST['billing_phone_new'] ) );
    }
}


/**
 * Display field value on the order edit page
 */
add_action( 'woocommerce_admin_order_data_after_billing_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('Phone 2').':</strong> <br/>' . get_post_meta( $order->get_id(), 'billing_phone_new', true ) . '</p>';
}

WooCommerce ไม่ได้ทำให้ฟิลด์เช็คเอาต์ใหม่สามารถแก้ไขได้ภายใต้ช่อง 'รายละเอียดการสั่งซื้อ' มาตรฐาน จะสามารถใช้งานได้ในโหมด 'ดูเท่านั้น' ในกล่องนั้น แต่คุณสามารถแก้ไขได้เหมือนกันผ่านทางบล็อกที่กำหนดเองมาตรฐานของ WordPress ดูภาพหน้าจอด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่


"" ชื่อคีย์ฟิลด์ที่กำหนดเองใด ๆ ที่เริ่มต้นด้วย _ (ขีดเส้นใต้) เป็นฟิลด์ที่กำหนดเองที่ซ่อนอยู่และจะไม่แสดงในแบ็กเอนด์ภายใต้ "ฟิลด์ที่กำหนดเอง" "" คุณรับข้อมูลนี้จากที่ใด
Ron


โปรดช่วยแก้คำถามเพื่อนของฉันstackoverflow.com/questions/49505056/…
Ron

ในกรณีของฉันฉันได้ผลลัพธ์โดยใช้ get_post_meta ($ order-> get_id (), '_billing_phone_new', จริง) ฉันต้องใส่เครื่องหมายขีดล่างหน้าชื่อตัวแปรในฟังก์ชั่น get_post_meta
Dashrath

1

นี่คือวิธีแก้ไข: ไม่อนุญาตให้เข้าถึงข้อมูลผลิตภัณฑ์โดยตรงเช่น

$product->id

วิธีที่ถูกต้องก้าวไปข้างหน้าคือ:

$product->get_id()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.