【问题标题】:Add custom field in checkout and display it in WooCommerce admin order pages在结帐中添加自定义字段并将其显示在 WooCommerce 管理订单页面中
【发布时间】:2020-08-03 03:32:55
【问题描述】:

在 WooCommerce 中,我正在尝试使用 "Customizing checkout fields using actions and filters" 官方文档添加自定义字段以进行结帐。所以我可以看到该字段并且效果很好,但问题是当我试图在管理面板中查看客户输入的信息时。

我正在使用simply show hooks 来查看触发了哪些钩子等等。而且我看不到woocommerce_admin_order_data_after_shipping_address 开火。我错过了什么?!这是我在functions.php 文件中的代码:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
     unset($fields['billing']['billing_address_2']);
     unset($fields['shipping']['shipping_address_2']);
          $fields['billing']['shipping_time'] = array(
            'type' => 'select',
        'label'     => __('Laikas', 'woocommerce'),
    'placeholder'   => _x('Laikas', 'placeholder', 'woocommerce'),
    'required'  => true,
    'class'     => array('form-row-wide'),
    'clear'     => true,
    'options' => array(
        'option_1' => 'nesvarbu',
        'option_2' => '8-12',
        'option_3' => '12-16',
        'option_4' => '16-20'
        )
     );


     return $fields;
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta($order){
    global $post_id;
    $order = new WC_Order( $post_id );
    echo '<p><strong>'.__('Laikas').':</strong> ' . get_post_meta($order->get_id(), '_shipping_ftime', true ) . '</p>';
}

【问题讨论】:

  • $order 已经作为参数传递给函数时,为什么要通过$postid 获取$order。只需使用$order-&gt;get_meta( '_shipping_time' );
  • 我用的是你的方法,然后我测试了这个,因为它不起作用。
  • 因此我的回答只包含部分解决方案,它是为您指出错误的方法

标签: php wordpress woocommerce hook-woocommerce orders


【解决方案1】:

add_filter( 'woocommerce_checkout_fields', 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
    unset( $fields[ 'billing' ][ 'billing_address_2' ] );
    unset( $fields[ 'shipping' ][ 'shipping_address_2' ] );
    $fields[ 'billing' ][ 'shipping_time' ] = array(
        'type'           => 'select',
        'label'          => __( 'Laikas', 'woocommerce' ),
        'placeholder'    => _x( 'Laikas', 'placeholder', 'woocommerce' ),
        'required'       => true,
        'class'          => array( 'form-row-wide' ),
        'clear'          => true,
        'options'        => array(
            'option_1'   => 'nesvarbu',
            'option_2'   => '8-12',
            'option_3'   => '12-16',
            'option_4'   => '16-20'
        )
    );


    return $fields;
}

add_action( 'woocommerce_admin_order_data_after_shipping_address', 'my_custom_checkout_field_display_admin_order_meta', 10, 1 );

function my_custom_checkout_field_display_admin_order_meta( $order ) {
    global $post_id;
    $order = new WC_Order( $post_id );
    $options         = array(
            'option_1'   => 'nesvarbu',
            'option_2'   => '8-12',
            'option_3'   => '12-16',
            'option_4'   => '16-20'
        );
    echo '<p><strong>' . __( 'Laikas' ) . ':</strong> ' . $options[get_post_meta( $order->get_id(), '_shipping_time', true )] . '</p>';
}

请试试这个sn-p。

【讨论】:

  • 嗨,我试过你的截图,但遗憾的是结果还是一样
  • @KarolisBeliašas - 请看截图。这就是你正在尝试的对吗?
  • 是的。这就是我想要的。
猜你喜欢
  • 2019-04-14
  • 2021-04-12
  • 2018-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
相关资源
最近更新 更多