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?
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:
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
Essayez plutôt d’utiliser current_user_can () .
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; ?>