【问题标题】:Show WooCommerce custom checkout fields using a WP_Query使用 WP_Query 显示 WooCommerce 自定义结帐字段
【发布时间】:2021-05-28 15:57:02
【问题描述】:

我使用插件来创建一些自定义 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 上添加.=,但没有成功。

【问题讨论】:

    标签: php wordpress woocommerce checkout custom-fields


    【解决方案1】:

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

    简单替换:

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

    与:

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

    现在它可以工作了。

    【讨论】:

    • 你摇滚!我永远不会想到我必须在那里使用另一个->post。谢谢!
    【解决方案2】:
    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');

    【讨论】:

      猜你喜欢
      • 2016-11-07
      • 2023-04-10
      • 2017-03-21
      • 2013-07-07
      • 2015-12-16
      • 1970-01-01
      • 2019-07-28
      • 2021-07-08
      相关资源
      最近更新 更多