php 如何将原生comment_count替换为Comments Evolved聚合计数

jdg4fx2g  于 2023-01-16  发布在  PHP
关注(0)|答案(2)|浏览(106)

我想做的事

我正在使用一个名为评论进化的插件,它聚合了来自Faceook、G+和WordPress原生标签的评论。
我正在尝试将本机的comments_number数字替换为来自插件的聚合计数的数字。
问题
我想通过functions.php来完成这个操作,但是我遇到了麻烦,因为它似乎只会拉Facebook的评论计数。我怀疑我的过滤器没有工作,因此它只会拉WordPress原生会拉。

我的尝试

当前我使用此筛选器:

// Replace native comment count with Comments Evolved comment in native comments_number function
function comments_evolved_number() {
    $number = comments_evolved_get_total_count();
}
apply_filters('comments_number', 'comments_evolved_number');

但它似乎没有做到这一点,因为它只显示了Facebook标签中的评论数量。
在我的index.php中,我使用这个来提取注解:

<?php comments_number( 'Say somethin\'!', '1 comment', '% comments' ) ?>

我也试过add_filter,但似乎没有任何效果,因为评论根本没有输出。我到处搜索,论坛,WordPress codex,插件GitHub,甚至查看了处理Disqus评论的类似线程,但我找不到我的过滤器失败的原因。
我哪里做错了?

更新1

这似乎行得通:

function wpse_comments_evolved_number( $count ) 
{
    // Override the comment count
    if( function_exists( 'comments_evolved_get_total_count' ) )
        $count = comments_evolved_get_total_count();

    // We must then return the value:
    return $count;
}
add_filter( 'get_comments_number', 'wpse_comments_evolved_number');

......但在测试中,它似乎并不提取Facebook的评论数,尽管它提取并聚合了所有其他评论:
注解comments_evolved_get_total_count()结构的演化过程如下:

function comments_evolved_get_total_count() {
  $total_count = 0;

  $wordpress_count = comments_evolved_get_wordpress_count();
  //$wordpress_count = get_comments_number();

  $gplus_count = comments_evolved_get_gplus_count();
  $trackback_count = comments_evolved_get_trackback_count();
  $facebook_count = comments_evolved_get_facebook_count();
  $disqus_count = comments_evolved_get_disqus_count();

  $total_count = $total_count + $wordpress_count + $gplus_count + $trackback_count + $facebook_count + $disqus_count;
  return $total_count;
}
//add_filter('get_comments_number', 'comments_evolved_get_total_count', 4269);

Facebook的comments_evolved_get_facebook_count()是这样构造的:

function comments_evolved_get_facebook_count($url = "") {
  if(empty($url)){ $url = get_permalink(); }
  $link = 'https://graph.facebook.com/?ids=' . urlencode($url);
  $link_body = wp_remote_retrieve_body(wp_remote_get($link));
  $json = json_decode($link_body);
  return $json->$url->comments;
}

我没有看到任何错误,在其他地方,它拉正确的Facebook计数(我认为-不确定)。

哪些工作有效,但似乎效率不高/不令人满意

function comment_count_agg() {
  $total_count = 0;

  //$wordpress_count = comments_evolved_get_wordpress_count();
  $wordpress_count = get_comments_number();

  $gplus_count = comments_evolved_get_gplus_count();
  $trackback_count = comments_evolved_get_trackback_count();
  $facebook_count = comments_evolved_get_facebook_count();
  $disqus_count = comments_evolved_get_disqus_count();

  $total_count = $total_count + $wordpress_count + $gplus_count + $trackback_count + $facebook_count + $disqus_count;
  return $total_count;
}
add_filter('comments_evolved_get_total_count', 'comment_count_agg', 4270);
add_filter('get_comments_number', 'comments_evolved_get_total_count', 4271);

......虽然我不太清楚为什么。
我尝试这种方式是因为(a)我认为插件中的一些东西在过滤器应用之前扰乱了聚合计数,(b)因为我认为优先级可能是一个问题。

更新2

实际上我在两个不同的网站上都试过了,在一个网站上,任何一种方法都能完美地工作。
在站点2上,它没有将Facebook的数量拉入到整个总数中。

j2cgzkjk

j2cgzkjk1#

这似乎行得通:

function wpse_comments_evolved_number( $count ) 
{
    // Override the comment count
    if( function_exists( 'comments_evolved_get_total_count' ) )
        $count = comments_evolved_get_total_count();

    // We must then return the value:
    return $count;
}
add_filter( 'get_comments_number', 'wpse_comments_evolved_number');

然而,在我尝试过的一个网站上,Facebook的数量没有被拉进来。在另一个网站上,一切都很完美。

wfveoks0

wfveoks02#

谢谢大家,你们的讨论帮助我通过使用get_comments_number钩从前端隐藏评论头的总数,以及我通过comments_array钩隐藏所有评论。

// Hide comments counter
add_filter( 'get_comments_number', 0);
// Hide existing comments
add_filter('comments_array', '__return_empty_array', 10, 2);
// Remove the comment form
add_filter( 'comments_open', '__return_false' );

相关问题