I was trying to figure out the best way to separate trackbacks/pings from the comments here on the site. I’ve seen a number of tutorials out there, but none seemed to do exactly what I wanted. The code is piece-mealed from a couple of places, but this is how I accomplished it here on the site:
Backup your existing comments.php
file associated with your theme! I cannot stress this enough.
Assuming you’re using the default theme, or some variation thereof, you’re going to want to look for this in your comments.php
file:
[php]
< ?php if ($comments) : ?>
[/php]
You’re basically going to replace the logic on comments.php
from where it says < ?php if ($comments) : ?>
(Line 20) to < ?php endif; ?>
(Line 61) with the logic below.
Define the number of pings and comments (Source: Sandbox theme):
[php]
< ?php /* NUMBERS OF PINGS AND COMMENTS */
$ping_count = $comment_count = 0;
foreach ( $comments as $comment )
get_comment_type() == "comment" ? ++$comment_count : ++$ping_count;
?>
[/php]
Then check to see whether comment_status
is set to 'open'
. If it is 'open'
, we then check to make sure the comment_count
isn’t equal to zero. Once these conditions are met, I then display only the comments. Some other conditional logic is included, like checking whether the comment’s being held for moderation:
[php]
< ?php if ('open' == $post-> comment_status) : ?>
< ?php if ( $comment_count ) : ?>
< ?php if ($comments) : ?>
Stuff said in regard to this entry:
< ?php comment_author_link() ?> < ?php _e('said'); ?>:
< ?php /* Changes every other comment to a different class */
if ('alt' == $oddcomment) $oddcomment = '';
else $oddcomment = 'alt';
?>
< ?php } ?>
< ?php endforeach; /* end for each comment */ ?>
< ?php else : ?>
< ?php endif ?>
< ?php else : ?>
Hey, there’s no comments on this post!
How about being the first?
< ?php endif /* if ( $comment_count ) */ ?>
< ?php else : // comments are closed ?>
< ?php /* Comments are closed */ ?>
Sorry dude, comments are closed on this post. If you had stuff you liked to say about this entry,
feel free to contact me.
< ?php endif; /* if ('open' == $post-> comment_status) */ ?>
[/php]
Then we do the same thing for trackback/pings:
[php]
< ?php if ( pings_open() ) : ?>
< ?php if ( $ping_count ) : ?>
Trackback/Ping Stuff:
< ?php foreach ($comments as $comment) : ?>
< ?php if (get_comment_type() != "comment") : ?>
< ?php
/* Changes every other comment to a different class */
if ('alt' == $oddcomment) $oddcomment = '';
else $oddcomment = 'alt';
?>
< ?php endif; ?>
< ?php endforeach; /* end for each comment */ ?>
< ?php else : /* if ( $ping_count ) */ ?>
< ?php endif /* if ( $ping_count ) */ ?>
< ?php else : // pings are a no-go bro. ?>
< ?php /* Pings are a no-go, bro. */ ?>
Pings are a no-go, bro.
Maybe next time?
< ?php endif /* if ( pings_open() ) */ ?>
[/php]
Save the changes and you should be good to go.
Hopefully this is a pretty straightforward implementation… If you have any better ideas, I’d love to hear ’em.
< ?php if (get_comment_type() == "comment"){ ?>