2011-07-20 29 views
1

当我在我的functions.php文件中调用下面的评论计数函数时,即使该文章有评论,我也会得到“0”。当我从另一个页面模板(<?php echo fb_comment_count(); ?>)调用该功能时,显示正确的注释编号。functions.php中的调用函数返回不需要的值

我试图调试检查fb_comment_count函数内部$岗位的价值和它生成以下:

id = 818 id = 818 id = 818 id = 818 id = 818 id = 818 id = 818 id = 818

这是不对的,因为每个这些ID应该是每一个附件的不同图像打开的页面。 818是整个图库页面本身的标识。我想这就是为什么我不断收到评论数“0”,因为画廊页面(ID 818)本身没有评论。

为了更好地了解我正在尝试做什么,下面是图库页面的模板。每个图像链接到它们各自的附件页面。包含数字的白色框是评论数。

gallery

如果有人可以帮助我弄清楚如何检索每个画廊中的图像的正确评论数,我会非常感激。谢谢。

这里是fb_comment_count函数。

// FB Comment Count (by Zack Austin) 
function fb_comment_count($link = 'link') { 
    global $post; 
    $url = 'https://graph.facebook.com/'; 
    $posturl = get_permalink($post->ID); 
    $url .= $posturl; 

    $filecontent = wp_remote_retrieve_body(wp_remote_get($url, array('sslverify'=>false))); 
    $json = json_decode($filecontent); 
    $count = $json->comments; 
    if ($count == 0 || !isset($count)) { 
    $count = 0; 
    } 

    $comments = $count; 
    if ($count == 1) { 
    $comments .= ''; 
    } 
    elseif ($count == 0) { 
    $comments = '0'; 
    } 
    elseif ($count > 1) { 
    $comments .= ''; 
    } 
    if ($link == 'nolink') { 
    return $comments; 
    } 
    else { 
    return '<a href="'.$posturl.'#comments" title="Comments for '.$post->post_title.'">'.$comments.'</a>'; 
    } 
} 

而且这里是我打电话以上(从底部约22行)fb_comment_count功能自定义库的代码。下面的代码和上面的代码都在我的functions.php文件中。

// Custom Gallery 
add_filter('post_gallery', 'my_post_gallery', 10, 2); 
function my_post_gallery($output, $attr) { 
    global $post, $wp_locale; 

    static $instance = 0; 
    $instance++; 

    // We're trusting author input, so let's at least make sure it looks like a valid orderby statement 
    if (isset($attr['orderby'])) { 
     $attr['orderby'] = sanitize_sql_orderby($attr['orderby']); 
     if (!$attr['orderby']) 
      unset($attr['orderby']); 
    } 

    extract(shortcode_atts(array(
     'order'  => 'ASC', 
     'orderby' => 'menu_order ID', 
     'id'   => $post->ID, 
     'itemtag' => 'dl', 
     'icontag' => 'dt', 
     'captiontag' => 'dd', 
     'columns' => 3, 
     'size'  => 'thumbnail', 
     'include' => '', 
     'exclude' => '' 
    ), $attr)); 

    $id = intval($id); 
    if ('RAND' == $order) 
     $orderby = 'none'; 

    if (!empty($include)) { 
     $include = preg_replace('/[^0-9,]+/', '', $include); 
     $_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 

     $attachments = array(); 
     foreach ($_attachments as $key => $val) { 
      $attachments[$val->ID] = $_attachments[$key]; 
     } 
    } elseif (!empty($exclude)) { 
     $exclude = preg_replace('/[^0-9,]+/', '', $exclude); 
     $attachments = get_children(array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } else { 
     $attachments = get_children(array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } 

    if (empty($attachments)) 
     return ''; 

    if (is_feed()) { 
     $output = "\n"; 
     foreach ($attachments as $att_id => $attachment) 
      $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; 
     return $output; 
    } 

    $itemtag = tag_escape($itemtag); 
    $captiontag = tag_escape($captiontag); 
    $columns = intval($columns); 
    $itemwidth = $columns > 0 ? floor(100/$columns) : 100; 
    $float = is_rtl() ? 'right' : 'left'; 

    $selector = "gallery-{$instance}"; 

    $output = apply_filters('gallery_style', " 
     <style type='text/css'> 
      #{$selector} { 
       margin: auto; 
      } 
      #{$selector} .gallery-item { 
       float: {$float}; 
       margin-top: 10px; 
       text-align: center; 
       width: {$itemwidth}%;   } 
      #{$selector} img { 
       border: 2px solid #cfcfcf; 
      } 
      #{$selector} .gallery-caption { 
       margin-left: 0; 
      } 
     </style> 
     <!-- see gallery_shortcode() in wp-includes/media.php --> 
     <div id='$selector' class='gallery galleryid-{$id}'>"); 

    $i = 0; 
    foreach ($attachments as $id => $attachment) { 
     $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); 

     $output .= "<{$itemtag} class='gallery-item'>"; 
     $output .= "<span class='photos-comment-number-wrap'><span class='comment-number'>". fb_comment_count() ."</span></span>"; 
     $output .= " 
      <{$icontag} class='gallery-icon'> 
       $link 
      </{$icontag}>"; 
     if ($captiontag && trim($attachment->post_excerpt)) { 
      $output .= " 
       <{$captiontag} class='gallery-caption'> 
       " . wptexturize($attachment->post_excerpt) . " 
       </{$captiontag}>"; 
     } 
     $output .= "</{$itemtag}>"; 
     if ($columns > 0 && ++$i % $columns == 0) 
      $output .= '<br style="clear: both" />'; 
    } 

    $output .= " 
      <br style='clear: both;' /> 
     </div>\n"; 

    return $output; 
} 

更新:

// FB Comment Count (by Zack Austin) 
function fb_comment_count($link = 'link', $post) { 
    $url = 'https://graph.facebook.com/'; 
    $posturl = get_permalink($post->ID); 
    $url .= $posturl; 

    $filecontent = wp_remote_retrieve_body(wp_remote_get($url, array('sslverify'=>false))); 
    $json = json_decode($filecontent); 
    $count = $json->comments; 
    if ($count == 0 || !isset($count)) { 
    $count = 0; 
    } 

    $comments = $count; 
    if ($count == 1) { 
    $comments .= ''; 
    } 
    elseif ($count == 0) { 
    $comments = '0'; 
    } 
    elseif ($count > 1) { 
    $comments .= ''; 
    } 
    if ($link == 'nolink') { 
    return $comments; 
    } 
    else { 
    return '<a href="'.$posturl.'#comments" title="Comments for '.$post->post_title.'">'.$comments.'</a>'; 
    } 
} 

// Custom Gallery 
add_filter('post_gallery', 'my_post_gallery', 10, 2); 
function my_post_gallery($output, $attr) { 
    global $post, $wp_locale; 

    static $instance = 0; 
    $instance++; 

    // We're trusting author input, so let's at least make sure it looks like a valid orderby statement 
    if (isset($attr['orderby'])) { 
     $attr['orderby'] = sanitize_sql_orderby($attr['orderby']); 
     if (!$attr['orderby']) 
      unset($attr['orderby']); 
    } 

    extract(shortcode_atts(array(
     'order'  => 'ASC', 
     'orderby' => 'menu_order ID', 
     'id'   => $post->ID, 
     'itemtag' => 'dl', 
     'icontag' => 'dt', 
     'captiontag' => 'dd', 
     'columns' => 3, 
     'size'  => 'thumbnail', 
     'include' => '', 
     'exclude' => '' 
    ), $attr)); 

    $id = intval($id); 
    if ('RAND' == $order) 
     $orderby = 'none'; 

    if (!empty($include)) { 
     $include = preg_replace('/[^0-9,]+/', '', $include); 
     $_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 

     $attachments = array(); 
     foreach ($_attachments as $key => $val) { 
      $attachments[$val->ID] = $_attachments[$key]; 
     } 
    } elseif (!empty($exclude)) { 
     $exclude = preg_replace('/[^0-9,]+/', '', $exclude); 
     $attachments = get_children(array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } else { 
     $attachments = get_children(array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } 

    if (empty($attachments)) 
     return ''; 

    if (is_feed()) { 
     $output = "\n"; 
     foreach ($attachments as $att_id => $attachment) 
      $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; 
     return $output; 
    } 

    $itemtag = tag_escape($itemtag); 
    $captiontag = tag_escape($captiontag); 
    $columns = intval($columns); 
    $itemwidth = $columns > 0 ? floor(100/$columns) : 100; 
    $float = is_rtl() ? 'right' : 'left'; 

    $selector = "gallery-{$instance}"; 

    $output = apply_filters('gallery_style', " 
     <style type='text/css'> 
      #{$selector} { 
       margin: auto; 
      } 
      #{$selector} .gallery-item { 
       float: {$float}; 
       margin-top: 10px; 
       text-align: center; 
       width: {$itemwidth}%;   } 
      #{$selector} img { 
       border: 2px solid #cfcfcf; 
      } 
      #{$selector} .gallery-caption { 
       margin-left: 0; 
      } 
     </style> 
     <!-- see gallery_shortcode() in wp-includes/media.php --> 
     <div id='$selector' class='gallery galleryid-{$id}'>"); 

    $i = 0; 
    foreach ($attachments as $att_id => $attachment) { 
     $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); 

     $output .= "<{$itemtag} class='gallery-item'>"; 
     $output .= "<span class='photos-comment-number-wrap'><span class='comment-number'>". fb_comment_count('link', $attachment) ."</span></span>"; 
     $output .= " 
      <{$icontag} class='gallery-icon'> 
       $link 
      </{$icontag}>"; 
     $output .= "</{$itemtag}>"; 
     if ($columns > 0 && ++$i % $columns == 0) 
      $output .= '<br style="clear: both" />'; 
    } 

    $output .= " 
      <br style='clear: both;' /> 
     </div>\n"; 

    return $output; 
} 

回答

0

可以使交WordPress的问题了函数fb_comment_count调用一个可选变量,在这里我将其称为$ id,它将包含附件的标识(可选,因此它不会破坏站点其他区域的功能)。然后使用该ID,我们可以通过get_attachment_link获取附件页面的URL,在该页面中我们将找到附件的注释。代码应该是这样的:

<?php 
// FB Comment Count (by Zack Austin) 
// Changes by Bruno Cantuaria ([email protected]) 
function fb_comment_count($link = 'link', $id = 0) { 
    global $post; 

    $url = 'https://graph.facebook.com/'; 
    if ($id > 0) 
     $posturl = get_attachment_link($id); 
    else 
     $posturl = get_permalink($post->ID); 
    $url .= $posturl; 

    $filecontent = wp_remote_retrieve_body(wp_remote_get($url, array('sslverify'=>false))); 
    $json = json_decode($filecontent); 
    $count = $json->comments; 
    if ($count == 0 || !isset($count)) { 
    $count = 0; 
    } 

    $comments = $count; 
    if ($count == 1) { 
    $comments .= ''; 
    } 
    elseif ($count == 0) { 
    $comments = '0'; 
    } 
    elseif ($count > 1) { 
    $comments .= ''; 
    } 
    if ($link == 'nolink') { 
    return $comments; 
    } 
    else { 
    return '<a href="'.$posturl.'#comments" title="Comments for '.$post->post_title.'">'.$comments.'</a>'; 
    } 
} 

// Custom Gallery 
add_filter('post_gallery', 'my_post_gallery', 10, 2); 
function my_post_gallery($output, $attr) { 
    global $post, $wp_locale; 

    static $instance = 0; 
    $instance++; 

    // We're trusting author input, so let's at least make sure it looks like a valid orderby statement 
    if (isset($attr['orderby'])) { 
     $attr['orderby'] = sanitize_sql_orderby($attr['orderby']); 
     if (!$attr['orderby']) 
      unset($attr['orderby']); 
    } 

    extract(shortcode_atts(array(
     'order'  => 'ASC', 
     'orderby' => 'menu_order ID', 
     'id'   => $post->ID, 
     'itemtag' => 'dl', 
     'icontag' => 'dt', 
     'captiontag' => 'dd', 
     'columns' => 3, 
     'size'  => 'thumbnail', 
     'include' => '', 
     'exclude' => '' 
    ), $attr)); 

    $id = intval($id); 
    if ('RAND' == $order) 
     $orderby = 'none'; 

    if (!empty($include)) { 
     $include = preg_replace('/[^0-9,]+/', '', $include); 
     $_attachments = get_posts(array('include' => $include, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 

     $attachments = array(); 
     foreach ($_attachments as $key => $val) { 
      $attachments[$val->ID] = $_attachments[$key]; 
     } 
    } elseif (!empty($exclude)) { 
     $exclude = preg_replace('/[^0-9,]+/', '', $exclude); 
     $attachments = get_children(array('post_parent' => $id, 'exclude' => $exclude, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } else { 
     $attachments = get_children(array('post_parent' => $id, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'order' => $order, 'orderby' => $orderby)); 
    } 

    if (empty($attachments)) 
     return ''; 

    if (is_feed()) { 
     $output = "\n"; 
     foreach ($attachments as $att_id => $attachment) 
      $output .= wp_get_attachment_link($att_id, $size, true) . "\n"; 
     return $output; 
    } 

    $itemtag = tag_escape($itemtag); 
    $captiontag = tag_escape($captiontag); 
    $columns = intval($columns); 
    $itemwidth = $columns > 0 ? floor(100/$columns) : 100; 
    $float = is_rtl() ? 'right' : 'left'; 

    $selector = "gallery-{$instance}"; 

    $output = apply_filters('gallery_style', " 
     <style type='text/css'> 
      #{$selector} { 
       margin: auto; 
      } 
      #{$selector} .gallery-item { 
       float: {$float}; 
       margin-top: 10px; 
       text-align: center; 
       width: {$itemwidth}%;   } 
      #{$selector} img { 
       border: 2px solid #cfcfcf; 
      } 
      #{$selector} .gallery-caption { 
       margin-left: 0; 
      } 
     </style> 
     <!-- see gallery_shortcode() in wp-includes/media.php --> 
     <div id='$selector' class='gallery galleryid-{$id}'>"); 

    $i = 0; 
    foreach ($attachments as $id => $attachment) { 
     $link = isset($attr['link']) && 'file' == $attr['link'] ? wp_get_attachment_link($id, $size, false, false) : wp_get_attachment_link($id, $size, true, false); 

     $output .= "<{$itemtag} class='gallery-item'>"; 
     $output .= "<span class='photos-comment-number-wrap'><span class='comment-number'>". fb_comment_count('link', $id) ."</span></span>"; 
     $output .= " 
      <{$icontag} class='gallery-icon'> 
       $link 
      </{$icontag}>"; 
     $output .= "</{$itemtag}>"; 
     if ($columns > 0 && ++$i % $columns == 0) 
      $output .= '<br style="clear: both" />'; 
    } 

    $output .= " 
      <br style='clear: both;' /> 
     </div>\n"; 

    return $output; 
} 
?> 
0

你应该调用function fb_comment_count($link = 'link') {并传递atachemnt后对象使其看起来像function fb_comment_count($link = 'link', $post) {随即删除global $post

这应该从foreach循环产生的画廊,只是在这里中调用:

foreach ($attachments as $att_id => $attachment) 
     fb_comment_count('link', $attachment); 

也,你应该在wordpress.stackexchange.com

+0

感谢您的帮助!我更改了代码以反映您的回复,但是,我收到“丢失的附件”错误。此外,在我从模板('<?php echo fb_comment_count();?>')调用函数的网站的其他部分,我得到一个“fb_comment_count()缺少参数2”的错误。有什么想法?我通过原文中的方式更新了新代码。另外,我会确保从现在开始只保留我的WordPress问题。 – J82

相关问题