Страница индивидуальных заказов WooCommerce добавляет настраиваемое поле роли клиента

Это своего рода дополнительный вопрос к вопросу, на который недавно был успешно дан ответ в На странице заказов WooCommerce добавьте пользовательский столбец роли клиента код ответа.

Я пытаюсь посмотреть, можно ли добавить на мой сайт какой-нибудь собственный PHP-код, чтобы роль клиента можно было видеть на странице отдельных заказов. Можно ли отредактировать приведенный ниже код, чтобы он также отображал эти данные на отдельной странице заказа? В идеале я бы хотел, чтобы эта роль была видна только администраторам, а не самим пользователям.

🤔 А знаете ли вы, что...
С PHP можно легко интегрировать с другими технологиями, такими как JavaScript и HTML.


50
1

Ответ:

Решено

Следующий код может отображать роли пользователей на странице редактирования заказа.

function get_user_role_name( $user_id ) {
    // Get the user object
    $user = new WP_User( $user_id );

    // Get the user's roles
    $roles = $user->roles;

    // Get the global WordPress roles object
    global $wp_roles;

    // Initialize an array to hold role names
    $role_names = array();

    // Loop through the user's roles and get the display names
    foreach ( $roles as $role ) {
        if ( isset( $wp_roles->roles[$role] ) ) {
            $role_names[] = $wp_roles->roles[$role]['name'];
        }
    }

    // Return the role names
    return $role_names;
}

add_action( 'woocommerce_admin_order_data_after_payment_info', 'gs_woocommerce_admin_order_data_after_payment_info' );
function gs_woocommerce_admin_order_data_after_payment_info($order){
    if ( $order->get_user_id() == 0 ) {
        echo '<b>This order was placed by a guest.</b>';
        
    } else {
        $role_names = get_user_role_name( $order->get_user_id() );
        
        // Display the role names
        if ( !empty( $role_names ) ) {
            echo '<b>User Roles:</b> ' . implode( ', ', $role_names );
        } 
    }
    
}

Мы используем хук действия woocommerce_admin_order_data_after_payment_info, поэтому роли пользователей будут отображаться так, как показано на скриншоте выше.


Интересные вопросы для изучения