具有动态选项的 Woocommerce 的自定义结帐字段

如何解决具有动态选项的 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?