2017-10-01 12 views
1

Alors voici ce que j'essaie de faire. Je travaille sur un plugin et je veux vérifier chaque commentaire et voir si l'auteur de ce commentaire a un rôle d '"administrateur" ou "éditeur". S'ils le font, plutôt que d'afficher leur nom d'utilisateur et leur avatar, je voudrais afficher le nom du site Web avec un logo d'entreprise ou quelque chose. Je suis assez nouveau dans le développement de WordPress et je suis coincé dans ce domaine. Je ne peux pas savoir s'il y a un filtre pour cela, ou si j'ai besoin de créer un modèle de commentaires personnalisé. Si quelqu'un pouvait même me faire pointer du doigt dans la bonne direction, ce serait formidable, car pour le moment, je ne suis même pas sûr de savoir par où commencer. Je vous remercie.Afficher le nom de l'utilisateur comme nom de site dans les commentaires s'il correspond à certains rôles | wordpress

Là où je suis, mon processus de pensée:

<?php 
function anonymize_author(){ 
    global $post; 

    //get the id of the comment author 
    $author_id = $post->post_author; 

    //get the userdata of comment author 
    $author_info = get_userdata($author_id); 

    //get the user roles of comment author 
    $author_roles = $author_info->roles; 

    //Array of roles to check against 
    $roles_to_check = ["editor", "administrator"]; 

    //see if user has a role in my $roles_to_check array 
    $results = array_intersect($roles_to_check, $author_roles); 

    if(!empty($results)){ 
     //the user has roles of either "editor" or "administrator" 
     //load custom comments page? 
     //I need to display the author name as the site name 
     //and the avatar as the site logo 
    }else{ 
     //Just a regular user, load the Wordpress Default comments 
    } 
} 

add_filter('some_filter_here', 'anonymize_author'); 

Répondre

0

Lors de l'affichage des commentaires, vérifiez si le nom du commentaire est « admin », quelque chose comme ceci:

// check to see if the comment author name is admin 
if ("admin" == get_comment_author()) { 
    // your condition 
} 

pour que cela fonctionne , lorsque vous commentez en tant qu'administrateur du site, vous devez utiliser le nom admin. Vous pouvez également utiliser get_comment_author_email() pour correspondre pour le courrier électronique admin:

$all_users = get_users(); // get all users 
    // loop through all users 
    foreach ($all_users as $user) { 
     // if the user email matches the commenter's email 
     // and user has admin role 
     if ($user->user_email == get_comment_author_email() && in_array('administrator', (array) $user->roles)) 
     { 
      // your condition 
     } 
    } 
+0

Hey Dolatabadi, Merci d'avoir répondu. Je dois vérifier les rôles, les noms des utilisateurs vont changer et d'autres seront ajoutés. J'ai 2 rôles différents que je dois vérifier: "éditeur", "administrateur". Aussi, où pourrais-je me brancher? Aurais-je utiliser un filtre? – jared10222

0

l'aide d'un filter était le chemin à parcourir. J'ai trouvé deux crochets qui correspondent à mes besoins: get_comment_author_link et get_avatar_url. Voici comment je les ai appliquées à mon problème:

//plugin.php 

/* 
* A function that compares users roles 
*/ 
function check_user_roles($user_roles){ 
    //array of roles to check 
    $roles_to_check = ["editor", "administrator"]; 

    //see if user roles match any $roles_to_check values 
    $results = array_intersect($roles_to_check, (array) $user_roles); 

    if(!empty($results)){ 
     return true; 
    }else{ 
     return false; 
    }   
} 

/* 
* Callback function for the get_comment_author_link filter 
*/ 
function anonymize_author($return, $author, $comment_id){ 
    //find comment data 
    $comment_data = get_comment($comment_id); 

    //find authors user_id 
    $user_id = $comment_data->user_id; 

    //check that author is a registered user before proceeding 
    if($user_id > 0){ 
     //get user data 
     $user = get_user_by('id', $user_id); 

     //get users roles 
     $user_roles = $user->roles; 

     if(check_user_roles($user_roles)){ 
      $author = bloginfo('name'); 
     } 
    } 
    return $author; 
} 

/* 
* Callback function for the get_avatar_url filter 
*/ 
function anonymizer_avatar($url, $id_or_email, $args){ 
    $user = false; 
    if(is_numeric($id_or_email)){ 
     $id = (int) $id_or_email; 
     $user = get_user_by('id', $id); 
    }elseif(is_object($id_or_email)){ 
     if(!empty($id_or_email->user_id)){ 
      $id = (int) $id_or_email->user_id; 
      $user = get_user_by('id', $id); 
     } 
    }else{ 
     $user = get_user_by('email', $id_or_email); 
    } 

    if($user && is_object($user)){ 
     $user_roles = $user->roles; 
     if(check_user_roles($user_roles)){ 
      $url = "URL_TO_MY_IMAGE"; 
     } 
    } 
    return $url; 
} 

add_filter('get_avatar_url', 'anonymize_avatar', 1, 3); 
add_filter('get_comment_author_link', 'anonymize_author', 1, 3);