Wordpress Themes - WP Forum at BFA

Wordpress Themes - WP Forum at BFA (http://forum.bytesforall.com/index.php)
-   Comments, trackbacks & pings (http://forum.bytesforall.com/forumdisplay.php?f=19)
-   -   [SOLVED] pingbacks not acknowledged in (http://forum.bytesforall.com/showthread.php?t=12229)

derekwbeck Jan 13, 2011 10:02 PM

[SOLVED] pingbacks not acknowledged in
 
I can't figure this out, and am now wondering if it is an ATA 3.5.3 issue: In comments.php I've added in the separate trackbacks/comments section the following code: (see my related post)

Code:

if ( ! empty($comments_by_type['pings']) ) : //only placed in if there are indeed pingbacks
       
                        echo "inside";
                       
                        echo "<BR><h3 id='comments'>Pingbacks:</h3>";
                        echo "<div id='pings'>";

                        wp_list_comments('type=pings&callback=list_pings');
               
                        echo "</div>";
                       
                endif;
                //end add-in

This is apparently the standard way to go about this with others, but it my if statement is being completely ignored here. That is, it never gets inside, even on pages with pingbacks. (Note, the code inside the if statement works as expected if I get rid of the if statement.) So, something is wrong with the if statement, and I don't think it is the code or logic itself. Rather, I wonder if ATA 3.5.3 does not have the function

Code:

! empty($comments_by_type['pings'])
Does anyone have insights on this?

Thanks,
Derek
http://www.1775thebook.com

derekwbeck Jan 15, 2011 02:39 AM

I'm more and more convinced some variable is missing within the ATA framework... see how I deduced this at

http://wordpress.org/support/topic/w...uble?replies=5

juggledad Jan 15, 2011 05:22 AM

Where did you set $comment_by_type? Is it a local or global variable?

derekwbeck Jan 15, 2011 11:30 AM

code at the very tail of functions.php:

Code:

<?php 

//add-in by derek beck for
//from www.wphacks.com/separating-trackbacks-from-comments-in-wordpress-2-7/
               
function list_pings($comment, $args, $depth) {
$GLOBALS['comment'] = $comment;
?>
<li id="comment-<?php comment_ID(); ?>"><?php comment_author_link(); ?>
<?php } ?>
<?php
add_filter('get_comments_number', 'comment_count', 0);
function comment_count( $count ) {
if ( ! is_admin() ) {
global $id;
$comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
return count($comments_by_type['comment']);
} else {
return $count;
}
}
//end add-in
?>

following the instructions from http://wphacks.com/separating-trackb...wordpress-2-7/

derekwbeck Jan 15, 2011 05:07 PM

Juggledad, got your reply by email, but it somehow did not post here. In the email you wrote:

Quote:

So you have created a local variable in function.php and another in comments.php. They are independent of each other. Try making them both a global.
How do I set a global variable?

juggledad Jan 16, 2011 04:53 AM

Do a google search

derekwbeck Jan 21, 2011 01:32 AM

I added

global $comments_by_type;

just after

global $id;

in the code above, in functions.php, but nothing changes... any ideas?

juggledad Jan 21, 2011 04:58 AM

doing that will make it a global in functions.php, but what about in comments.php? without naming it a global there, it is still a local variable and different from the global even though they have the same name.

derekwbeck Jan 21, 2011 10:55 AM

I figured merely adding

global $comments_by_type;

to comments.php would solve it... which I added just before the if statement above that is not successfully being entered, but that did not solve it.

Am I declaring these globals right?

juggledad Jan 21, 2011 11:55 AM

looks like it, I add some echo statements in to see if the value you think should be there is really there.
HTML Code:

echo '<strong>comments_by_type='.$comments_by_type.'</strong><br>';

derekwbeck Jan 21, 2011 06:51 PM

hmm... I've tried such echo statements too... I get nothing for the variable. Using your code, I simply get:

comments_by_type=


so perplexing...

thank you for your steadfast assistance juggledad!

derekwbeck Jan 27, 2011 01:18 AM

Okay, I've figured it out... comments_by_type requires a strange explicit declaration, in the comments.php, as follows:

Code:

                $comments_by_type = &separate_comments($comments); //strangely, this has to be declared explicitly

                if ( ! empty($comments_by_type['pings']) ) { //only placed in if there are indeed pingbacks


Thus, the entire code to separate out trackbacks (be sure to select "Yes" for this in the ATA theme under comments!!) is as follows:

In the comments.php, where you find the following:

Code:

                wp_list_comments(array(
                        'avatar_size'=>$bfa_ata['avatar_size'],
                        'reply_text'=>__(' &middot; Reply','atahualpa'),
                        'login_text'=>__('Log in to Reply','atahualpa'),
                        'callback' => bfa_comments,
                        'type' => 'pings'
                        ));

        } else {

comment that portion out, and replace it with all of the following:

Code:


                //wp_list_comments(array(
                        //'avatar_size'=>$bfa_ata['avatar_size'],
                        //'reply_text'=>__(' &middot; Reply','atahualpa'),
                        //'login_text'=>__('Log in to Reply','atahualpa'),
                        //'callback' => bfa_comments,
                        //'type' => 'pings'
                        //));
                       
                //above commented out and this portion replaced by derek beck
               
                $comments_by_type = &separate_comments($comments); //strangely, this has to be declared explicitly

                if ( ! empty($comments_by_type['pings']) ) { //only placed in if there are indeed pingbacks
       
                        echo "<BR><h3 id='comments'>Pingbacks:</h3>";
                        echo "<div id='pings'>";

                        wp_list_comments('type=pings&callback=list_pings');
               
                        echo "</div>";
                       
                }

                //end add-in

        } else {

Then, in functions.php, add the following to the very bottom:

Code:

<?php 

//add-in by derek beck for trackback separation
               
function list_pings($comment, $args, $depth) { //this function is a callback set in comments.php to check for the number of pings within the comments
        $GLOBALS['comment'] = $comment;
?>
        <li id="comment-<?php comment_ID(); ?>"><?php comment_author_link();
}

add_filter('get_comments_number', 'comment_count', 0);

function comment_count( $count ) { //this function updates the comment count so that it does not include in the total the number of pings
        if ( ! is_admin() ) {
                global $id;
                $comments_by_type = &separate_comments(get_comments('status=approve&post_id=' . $id));
                return count($comments_by_type['comment']);
        } else {
                return $count;
        }
}
       
//end add-in
?>

That makes it work. Note with the <div id='pings'> declaration you can style the pings as you desire.

See my site below for examples in the blog entries... Hope this is useful for someone!

Derek Beck
www.derekbeck.com/1775


All times are GMT -6. The time now is 09:48 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.