如何在管理面板中的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');

我需要在管理员端编辑此字段值。目前,我可以在帐单邮寄地址中编辑所有其他值,但此值未出现在“管理”部分中。我仅将以下代码用于查看admin部分中的值。

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/。但是该文档中所有正常运行的文档都应注意billing_phone / Phone,请注意在“自定义”字段下。我检查了屏幕选项,但是我已经勾选了自定义字段。其他自定义字段及其值可见且可编辑。

我如何在后端编辑此值。请帮忙 。


您问题中的第一个代码块,修改默认的“电话号码”字段。它不会在结帐表单中添加任何新字段。结帐字段在“自定义字段”下不可用,因此请不要在此处进行搜索。如果要编辑帐单地址或收货地址中的任何字段,请转到后端,然后单击订单列表下的任何订单。然后,您将在“帐单明细”和“发运明细”标题旁边看到一个小的编辑图标。单击该按钮将允许您编辑那些详细信息。我希望这有帮助。
Prasad Nevase

请立即检查我的代码
罗恩(Ron)

Answers:


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的标准自定义字段块进行编辑。请参见下面的屏幕截图。

在此处输入图片说明


“”任何以_(下划线)开头的自定义字段关键字名称都是隐藏的自定义字段,不会显示在“自定义字段”下的后端。您从何处获得此信息?
罗恩

2
在WordPress Codex上。您可能会在这里获得更多信息
Prasad Nevase


就我而言,我通过使用get_post_meta($ order-> get_id(),'_billing_phone_new',true)得到结果。我必须在get_post_meta函数的变量名前加下划线。
达斯拉斯

1

这是解决方案:不允许直接访问产品数据,例如

$product->id

正确的方法是:

$product->get_id()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.