我正在使用一个名为Comments Evolved的插件,该插件聚合了Faceook、G+和WordPress native的选项卡式评论。
我正在尝试替换本地人comments_number
使用插件聚合计数中的数字进行编号。
问题是,我想通过函数来实现这一点。php,但我有麻烦,因为它似乎只是拉Facebook的评论计数。我怀疑我的过滤器没有工作,因此它只会拉WordPress native会拉的东西。
我尝试的内容当前我正在使用此筛选器:
// 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选项卡中的评论数。
在我的索引中。php,我用它来获取评论:
<?php comments_number( \'Say somethin\\\'!\', \'1 comment\', \'% comments\' ) ?>
我也试过了
add_filter
但这似乎没有任何作用,因为评论根本就没有输出。我到处都搜索过,论坛,WordPress codex,插件GitHub,甚至还搜索过处理Discus评论的类似线程,但我找不到我的过滤器失败的原因。
我做错了什么?
更新1已尝试用户birgire的answer 这比我能想到的任何答案都要清晰、合乎逻辑、更好,但由于某些原因,它只能部分起作用。
在测试中,它似乎没有拉动Facebook的评论计数,尽管它拉动并聚合了所有其余的评论。
注释演化构造comments_evolved_get_total_count()
如下所示:函数comments\\u evolved\\u get\\u total\\u count(){$total\\u 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)我在应用birgire的过滤器之前,插件中的某些东西弄乱了聚合计数,(b)因为我认为优先级可能是个问题。
你能告诉我为什么我的凌乱函数能工作,但birgire的不能,如果有什么方法可以使它更有效?
更新2用户birgire的回答确实完整且正确,但Facebook的评论数根本没有被纳入,因为我所处理的域超过了Open Graph API调用限制。
我通过从Facebook返回的JSOn对象得到的错误是:
stdClass Object ( [error] => stdClass Object ( [message] => (#4) Application request limit
reached [type] => OAuthException [is_transient] => 1 [code] => 4 [fbtrace_id] => AgE3COAZ+tj ) )
我提供了
detailed answer here 关于FB OG API限制。