#php #wordpress #woocommerce #checkout #custom-fields
#php #wordpress #woocommerce #Оформить покупку #пользовательские поля
Вопрос:
Я использую плагин для создания некоторых пользовательских полей 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
показывает только первое настраиваемое поле вместо всех.
Как я могу показать все поля вместо одного? Я попытался добавить a .=
в $fields
, но это не сработало.
Ответ №1:
В вашем коде есть небольшая ошибка, так как $get_b2b_fields->post_name
он пуст.
Просто замените:
$fields['billing'][$get_b2b_fields->post_name] = array(
с:
$fields['billing'][$get_b2b_fields->post->post_name] = array(
Теперь это будет работать.
Комментарии:
1. Ты молодец! Я бы никогда не подумал, что мне пришлось использовать
->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');
на страницу, где вы хотите показать