最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

comments - comment_date() & comment_time() not working from functions.php

programmeradmin6浏览0评论

I use the following function to get the latest comment for each one of my posts and display it on archive and index pages under the post content:

function kv_latest_comment($post){
         $args = array(
            'status' => 'approve',
            'number' => '1',
            'post_id' => $post->ID, // use post_id, not post_ID
              );
            $comments = get_comments( $args );
        if($comments){
        foreach($comments as $comment) :
        if($comment->comment_type != 'pingback' and $comment->comment_type != 'trackback') : ?>
        <div class="comment">
           <div class="comment-avatar"><?php echo get_avatar($comment,$size='64'); ?></div><!-- comment-avatar -->
           <div class="comment-right">
           <div class="comment-bubble comment-bubble-left">
           <div class="comment-header">
              <a href="<?php echo site_url().'/author/'.get_the_author_meta( 'user_login'); ?>" title=""><?php printf(__('%s'), get_the_author_meta( 'user_login')) ?></a> on <?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?><?php edit_comment_link(__('(Edit)'),'  ','') ?>
           </div><!-- comment-header -->
           <div class="comment-content">
              <?php echo($comment->comment_content); ?>
           </div><!-- comment-content -->
           </div><!-- comment-bubble -->
           </div><!-- comment-right -->
           <div class="clear"></div>
        </div><!-- comment -->
<?php
        endif;
        endforeach; }
}

I call the function like so in my post template:

<?php kv_latest_comment($post); ?>

When calling the function from functions.php comment_date() and comment_time() return nothing.

But if I paste the code from the function into the template it works as expected...

Why don't the functions return any values when called from the functions.php?

I use the following function to get the latest comment for each one of my posts and display it on archive and index pages under the post content:

function kv_latest_comment($post){
         $args = array(
            'status' => 'approve',
            'number' => '1',
            'post_id' => $post->ID, // use post_id, not post_ID
              );
            $comments = get_comments( $args );
        if($comments){
        foreach($comments as $comment) :
        if($comment->comment_type != 'pingback' and $comment->comment_type != 'trackback') : ?>
        <div class="comment">
           <div class="comment-avatar"><?php echo get_avatar($comment,$size='64'); ?></div><!-- comment-avatar -->
           <div class="comment-right">
           <div class="comment-bubble comment-bubble-left">
           <div class="comment-header">
              <a href="<?php echo site_url().'/author/'.get_the_author_meta( 'user_login'); ?>" title=""><?php printf(__('%s'), get_the_author_meta( 'user_login')) ?></a> on <?php printf(__('%1$s at %2$s'), get_comment_date(),  get_comment_time()) ?><?php edit_comment_link(__('(Edit)'),'  ','') ?>
           </div><!-- comment-header -->
           <div class="comment-content">
              <?php echo($comment->comment_content); ?>
           </div><!-- comment-content -->
           </div><!-- comment-bubble -->
           </div><!-- comment-right -->
           <div class="clear"></div>
        </div><!-- comment -->
<?php
        endif;
        endforeach; }
}

I call the function like so in my post template:

<?php kv_latest_comment($post); ?>

When calling the function from functions.php comment_date() and comment_time() return nothing.

But if I paste the code from the function into the template it works as expected...

Why don't the functions return any values when called from the functions.php?

Share Improve this question edited Jul 25, 2013 at 5:46 fuxia 107k38 gold badges255 silver badges459 bronze badges asked Jul 24, 2013 at 14:55 VigsVigs 5681 gold badge5 silver badges16 bronze badges
Add a comment  | 

3 Answers 3

Reset to default 0

get_comment_date requires a comment id as the second argument. If you don't provide this, it looks to the global $comment variable, which is set when using a WP_Query->the_comment(). Maybe consider changing your loop to be a WP_Query, or just do get_comment_date( '', $comment->ID )

Beacause you are not passing the post object, on a template you have the $post, but if you run the function from the function.php file you have no $post. You can add global $post; to the function like this:

function kv_latest_comment($post) {
    global $post;
    // code
}

lol. I have similar problem. Finally figure this out:

$aa = get_comments( array( 'post_id' => 27 ) );

foreach ($aa as $comment):

echo comment_time( 'H:i:s' );

endforeach;

The most important key part is that $comment is a global variable that I am override into. In the beginning I thought it was just separating out array of comments into individual comment so I can name that variable as $bb or whatever. THAT was wrong, only when it is $comment, all those functions that apply to CURRENT comment works. :)

发布评论

评论列表(0)

  1. 暂无评论