web-dev-qa-db-fra.com

Utilisation de author_can () sur des types de publication personnalisés dans WordPress

J'essaie d'afficher de manière conditionnelle du contenu dans un thème à l'aide de rôles et de fonctionnalités personnalisés. Tout d'abord, je définis un rôle personnalisé:

add_role('free_vendor', 'Free Vendor Listing', array('read', 'edit_posts', 'delete_posts', 'display_map'));

Ceci est exécuté directement à partir de functions.php (dois-je l'ajouter à une action quelque part?)

J'utilise ensuite la capacité display_map que j'ai définie pour afficher la carte de manière conditionnelle:

if (author_can($post, 'display_map')) echo '<li><a href="#map">Map</a></li>';

Le seul problème, c'est que ça ne marche pas! L'utilisation de author_can () avec des types de publication personnalisés pose-t-elle un problème? Est-ce que je n'appelle pas add_role () correctement? Je ne trouve pas vraiment de documentation valable sur l'utilisation de author_can() avec autre chose que les publications Vanilla. N'est-ce pas possible?

1
user2579

d'abord sur le add_role

vous ne devez l'exécuter que une fois. Ainsi, après l'avoir collé dans votre fichier functions.php et enregistré, vous pouvez le supprimer et le sauvegarder à nouveau. Le rôle y sera toujours.

ensuite, à propos de la fonction author_can, je ne l’utilise vraiment jamais pour pouvoir dire ce qui ne va pas, mais vous pouvez utiliser la fonction current_user_can () comme ceci:

mettre à jour

if ( is_user_logged_in() ) {
     //first you get the curent user info
     get_currentuserinfo();
     //then you can check capabilities like this
     if(current_user_can('display_map')){
      echo '<li><a href="#map">Map</a></li>';
      }
}

j'espère que cela t'aides

2
Bainternet

Essayez plutôt d’utiliser current_user_can () .

1
Pippin

Ok, alors voici ce qui semble se passer. Ajouter des fonctionnalités directement au rôle lorsqu'il est créé ne semble pas fonctionner (du moins pour moi). Donc, au lieu de cela:

add_role('free_vendor', 'Free Vendor Listing', array('read', 'edit_posts', 'delete_posts', 'display_map'));

Ce doit être quelque chose comme ça:

$free_vendor_caps = array('read', 'edit_posts', 'delete_posts', 'display_map');
add_role('free_vendor', 'Free Vendor Listing');
$free_vendor = get_role('free_vendor');
foreach ($free_vendor_caps as $cap) {
    $free_vendor->add_cap($cap);
}

Ensuite, je peux faire ce que je dois faire avec author_can():

<?php if (author_can($post->ID, 'display_map')) : ?>
<div id="map">
    <h3>Map</h3>
    <?php the_map(); ?>
</div>
<?php endif; ?>
0
user2579