J'utilise get_comments pour afficher les derniers commentaires, à savoir:
<?php
global $comments, $comment;
$comments = get_comments( array( 'number' => '5', 'status' => 'approve', 'post_status' => 'publish' ) );
foreach ( (array) $comments as $comment) {
echo '<li>'.$comment->comment_author.' said '.$comment->comment_content .'</li>'
}
;?>
Est-il possible de remplacer les commentaires de l'administrateur?! Je sais cette astuce en utilisant SQL mais peut-être que je veux quelque chose dans cette fonction?
Merci pour l'aide.
Code mis à jour Placez ce code à chaque fois que le fichier de modèle tel que sidebar.php
, footer.php
et répertorie les derniers commentaires (en affichant les commentaires de l'administrateur difficiles).
Remarque -
Il utilise les valeurs stockées dans la variable globale -
wp_query
. Habituellement, la variablewp_query
contient les commentaires de la publication en cours lors de la navigation.
Utilisation -
$comments = wpse61072_hide_admin_comment(5); // 5=max comments
foreach ( $comments as $comment ) {
echo '<li>'.$comment->comment_author.' - said : '.$comment->comment_content.'</li>';
}
Functions.php -
/*
* Usage : $comments = wpse61072_hide_admin_comment($post->ID, 5);
* Show Count : echo count(wpse61072_hide_admin_comment($post->ID, 5));
* This goes into functions.php
*/
function wpse61072_hide_admin_comment ( $post_id, $no ) {
global $wp_query; // uses global variable
$woa_comments = $wp_query->comments;
//thanks @kaiser for loop
foreach ( $woa_comments as $woa_comment => $woac ) {
$author = get_userdata( $woac->user_id );
if (user_can( $author, 'manage_options' )) {
unset( $woa_comments[ $woa_comment ] );
}
}
//make sure we're returing only specified elements
return (array_slice($woa_comments,0,$no));
}
- Testé sur wordpress 3.4.1 avec le thème TwentyTen .
Totalement non testé, mais vous devriez pouvoir utiliser le filtre pre_get_comments:
function exclude_admin_comments($query) {
$query->query_vars['user_id'] != 1;
}
add_action('pre_get_comments', 'exclude_admin_comments');
Enveloppant le résultat de la requête de commentaires $wpdb
directement dans un rappel de filtre (et un plugin), c'est le moyen agréable de gérer les commentaires.
/* Plugin Name: »Kaisers« Comments without admin comments */
! defined( 'ABSPATH' ) AND exit;
add_filter( 'comments_array', 'wpse_61072_comments_without_admin', 20, 2 );
function wpse_61072_comments_without_admin( $comments, $post_id )
{
foreach ( (array) $comments as $index => $c )
{
// Add a limit
if ( 5 <= absint( $index + 1 ) )
return (object) $comments;
// Get the authors user data
$author = get_userdata( $c->user_id );
// Unset based on the standard/default capability
if ( user_can( $author->ID, 'manage_options' ) )
unset( $comments[ $index ] );
}
return (object) $comments;
}
Celui-ci devrait fonctionner (non testé).