web-dev-qa-db-fra.com

Fonction personnalisée pour un rôle d'utilisateur spécifique

J'ai besoin d'exécuter des fonctions/filtres pour des rôles d'utilisateur spécifiques. Ce code filtre la page de commande de l'administrateur (Woocommerce) pour afficher uniquement les commandes libellées en GBP.

add_filter('request', function($vars) {
global $typenow, $wpdb;

// Add logic to determine if the orders list should be filtered, and which
// currency
$currency = 'GBP';

if($typenow == 'shop_order') {
$vars['meta_query']['relation'] = 'AND';
// Only show orders in the specific currency
$vars['meta_query'] = array(
    array(
        'key' => '_order_currency',
        'value' => $currency,
        'compare' => '=',
        ),
    );
}
return $vars;
}, 15 );

Cela fonctionne comme prévu. Ce que je dois faire, c'est que ce code ne soit exécuté que pour certains rôles. Le rôle dont j'ai besoin pour le déclencher est uk_staff. J'ai ensuite besoin de créer la même chose à l'exception de $currency = 'AUD'; et du rôle au_staff.

Quelqu'un peut-il m'aider à rendre cette fonction uniquement activée pour certains rôles?

1
Nik

Le noyau a des fonctions telles que current_user_can pour vérifier la capacité d’un rôle ou vérifier le rôle directement. L'exemple suivant étend votre source pour cette vérification afin que la fonction non (!) soit exécutée, si l'utilisateur actuel n'a pas les droits, la capacité de son rôle.

add_filter('request', function( $vars ) {

// Check the capability of the current user.
if ( ! current_user_can( 'manage_options' ) )
    return;

global $typenow, $wpdb;

// Add logic to determine if the orders list should be filtered, and which
// currency
$currency = 'GBP';

if($typenow == 'shop_order') {
$vars['meta_query']['relation'] = 'AND';
// Only show orders in the specific currency
$vars['meta_query'] = array(
    array(
        'key'     => '_order_currency',
        'value'   => $currency,
        'compare' => '=',
        ),
    );
}
return $vars;
}, 15 );
4
bueltge