如何解决具有动态选项的 Woocommerce 的自定义结帐字段
我想为我的结帐下拉字段提供动态选项。选项必须是 wordpress 用户中具有特定角色的用户。我怎样才能实现它?下面是我正在使用的代码。在第一个函数中,我们可以获取所有管理员用户。我希望用户在结帐选择字段中的下拉选项中。
**User Roles**
function get_users_by_role($role,$orderby,$order) {
$args = array(
'role' => 'administrator','orderby' => 'user_nicename','order' => 'ASC'
);
$users = get_users( $args );
return $users;
}
**Dropdown Field**
function everest_custom_dropdown_fields( $fields ) {
$fields['everestmerchant_extra_dropdown_fields']['dropdown'] = array(
'label' => __('leader Name','woocommerce'),'placeholder' => _x('leader Name','placeholder','required' => true,'class' => array( 'wps-drop' ),'clear' => true,'type' => 'select','options' => array(
'option 1' => __('option 1','woocommerce' ),'option 2' => __('option 2','woocommerce'
)//end of options
);
return $fields;
}
add_filter( 'woocommerce_checkout_fields','everest_custom_dropdown_fields' );
解决方法
获取所有领导
function get_leaders($role) {
$args = array(
'role' => $role,'orderby' => 'user_nicename','order' => 'ASC'
);
$leaders = ['' => 'Please Select'];
$users = get_users( $args );
if($users){
foreach($users as $user){
$leaders[$user->data->ID] = $user->data->display_name;
}
}
return $leaders;
}
在结帐页面添加领导字段
function leader_name_select_field( $checkout ){
woocommerce_form_field( 'leader_name',array(
'type' => 'select','required' => true,'class' => array('form-row-wide'),'label' => 'Leader Name','options' => get_leaders('administrator')
),$checkout->get_value( 'leader_name' ) );
}
add_action( 'woocommerce_after_checkout_billing_form','leader_name_select_field' );
在数据库中保存选定的字段。
function save_leader_name_of_order( $order_id ){
if( !empty( $_POST['leader_name'] ) )
update_post_meta( $order_id,'leader_name',sanitize_text_field( $_POST['leader_name'] ) );
}
add_action( 'woocommerce_checkout_update_order_meta','save_leader_name_of_order' );
在仪表板的订单页面中显示保存的字段
function leader_name_show_on_order_detail_page($order){
$leader_id = get_post_meta($order->get_id(),true );
$leader = get_user_by( 'ID',$leader_id );
if($leader_id && $leader){
echo '<p class="form-field form-field-wide">';
echo '<label>Leader Name</label>';
echo '<p> ' . $leader->data->display_name . '</p>';
echo '</p>';
}
}
add_action( 'woocommerce_admin_order_data_after_order_details','leader_name_show_on_order_detail_page',10,1 );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。