J'essaie d'afficher des commentaires dans la barre latérale à partir de la catégorie actuelle uniquement. Jusqu'ici j'ai ceci:
<?php
// Posts per page setting
$ppp = 8; //get_option('posts_per_page'); // either use the WordPress global Posts per page setting or set a custom one like $ppp = 10;
$custom_offset = 0; // If you are dealing with your custom pagination, then you can calculate the value of this offset using a formula
// category (can be a parent category)
$cat = get_query_var('cat');
$category_parent = $cat;
// lets fetch sub categories of this category and build an array
$categories = get_terms( 'category', array( 'child_of' => $category_parent, 'hide_empty' => false ) );
$category_list = array( $category_parent );
foreach( $categories as $term ) {
$category_list[] = (int) $term->term_id;
}
// fetch posts in all those categories
$posts = get_objects_in_term( $category_list, 'category' );
$sql = "SELECT comment_ID, comment_date, comment_content, comment_post_ID, user_id, comment_author
FROM {$wpdb->comments} WHERE
comment_post_ID in (".implode(',', $posts).") AND comment_approved = 1
ORDER by comment_date DESC LIMIT $ppp OFFSET $custom_offset";
$comments_list = $wpdb->get_results( $sql );
if ( count( $comments_list ) > 0 ) {
$date_format = get_option( 'date_format' );
foreach ( $comments_list as $comment ) {
?>
<li>
<a href="<?php echo ( get_permalink( $comment->comment_post_ID ) ); ?>#comment-<?php echo($comment->comment_ID); ?>"><?php echo get_avatar( $comment->user_id, 50 ); ?></a>
<span><strong><?php echo($comment->comment_author); ?></strong> commented on</span>
<h3><a href="<?php echo ( get_permalink( $comment->comment_post_ID ) ); ?>"><?php echo get_the_title ( $comment->comment_post_ID ); ?></a></h3>
<span><?php echo($comment->comment_date); ?></span>
<p>"<?php comment_excerpt(); ?>" <a href="<?php echo ( get_permalink( $comment->comment_post_ID ) ); ?>#comment-<?php echo($comment->comment_ID); ?>">Read More</a></p>
<div class="clearfloat"></div><!-- Very Important -->
</li>
<?php
}
} else {
echo '<p>No comments</p>';
}
?>
Cela affiche 0 commentaires ou tous les commentaires partout, donc cela ne fonctionne pas. Je ne comprends pas ce que j'ai mal fait ...
Essayez cette fonction:
function get_category_comments($category_id, $limit = 5) {
global $wpdb;
$sql = "
SELECT {$wpdb->comments}.comment_ID
FROM
{$wpdb->comments},
{$wpdb->posts},
{$wpdb->term_taxonomy},
{$wpdb->term_relationships}
WHERE 1=1
AND {$wpdb->comments}.comment_post_ID = {$wpdb->posts}.ID
AND {$wpdb->term_relationships}.object_id = {$wpdb->posts}.ID
AND {$wpdb->term_relationships}.term_taxonomy_id = {$wpdb->term_taxonomy}.term_taxonomy_id
AND {$wpdb->comments}.comment_approved = '1'
AND {$wpdb->term_taxonomy}.term_id = '{$category_id}'
ORDER BY {$wpdb->comments}.comment_date DESC
LIMIT 0, {$limit}
";
$comments = array();
foreach ($wpdb->get_results($sql) as $c)
$comments[] = get_comment($c->comment_ID);
return $comments;
}
Ensuite, vous pouvez avoir une autre fonction pour afficher les commentaires:
function display_category_comments() {
global $cat;
if (!$category_id = intval($cat))
return false;
$comments = get_category_comments($category_id);
?>
<ul>
<?php foreach ($comments as $c) : $post = get_post($i = $c->comment_post_ID); ?>
<li>
<?php echo $c->comment_author; ?> - <a href="<?php echo get_permalink($post->ID); ?>" title="Permalink to <?php echo $post->post_title; ?>"><?php echo $post->post_title; ?></a>
</li>
<?php endforeach; ?>
</ul>
<?php
}