我想做的事
我正在使用一个名为评论进化的插件,它聚合了来自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的数量拉入到整个总数中。
2条答案
按热度按时间j2cgzkjk1#
这似乎行得通:
然而,在我尝试过的一个网站上,Facebook的数量没有被拉进来。在另一个网站上,一切都很完美。
wfveoks02#
谢谢大家,你们的讨论帮助我通过使用
get_comments_number
钩从前端隐藏评论头的总数,以及我通过comments_array
钩隐藏所有评论。