使用 WP_Query 显示 WooCommerce 自定义结帐字段

Show WooCommerce custom checkout fields using a WP_Query

我使用插件创建一些自定义 B2B 字段。现在我需要在结帐页面显示这些自定义字段。

function add_custom_b2b_fields_checkout( $fields ){

  $args = array(
    'post_type'           => 'afreg_fields',
    'post_status'         => 'publish',
    'posts_per_page'      => '99',
    'orderby'             => 'name',
  );

  $get_b2b_fields = new WP_Query( $args );

  if ($get_b2b_fields->have_posts()) : while ($get_b2b_fields->have_posts()) : $get_b2b_fields->the_post();
    $fields['billing'][$get_b2b_fields->post_name] = array(
        'type'              => 'text',
        'label'             => get_the_title(),
        'placeholder'       => __(" ", "woocommerce"),
        'class'             => array('b2b-field'),
        'required'          => false,
    );
    endwhile;
    return $fields;
  endif;
}
add_filter( 'woocommerce_checkout_fields', 'add_custom_b2b_fields_checkout' );

代码几乎可以正常工作。但它只显示最后一个字段,就好像 while 运行 正确但 return $fields 只显示第一个自定义字段而不是所有字段。

如何显示所有字段而不是一个字段?我尝试在 $fields 处添加一个 .= 但那没有用。

add_filter( 'woocommerce_checkout_fields', 'add_custom_b2b_fields_checkout' );

改为

add_action( 'woocommerce_checkout_fields', 'add_custom_b2b_fields_checkout' );

并在要显示的页面上添加do_action('woocommerce_checkout_fields');

您的代码中有一个小错误,因为 $get_b2b_fields->post_name 是空的。

只需替换:

$fields['billing'][$get_b2b_fields->post_name] = array(

与:

$fields['billing'][$get_b2b_fields->post->post_name] = array(

现在可以使用了。