Как заменить нативный comment_count совокупным счетчиком комментариев Evolved

Что я пытаюсь сделать

Я использую плагин под названием Comments Evolved, который собирает комментарии с вкладками из 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, плагине 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, хотя подтягивает и агрегирует все остальное:

Комментарии Evolved конструирует 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 (я думаю — не уверен).

См. также:  Как передать значение параметра из конвейера Gitlab CI / CD через Terraform в сценарий user_data в AWS?

Что работало, но не кажется эффективным/удовлетворительным

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);

… хотя я не точно уверен, почему.

Я попробовал этот способ, потому что (а) я понял, что что-то в плагине мешает общему счету до применения фильтра и (б) потому что я подумал, что, возможно, приоритеты были какой-то проблемой.

ОБНОВЛЕНИЕ 2

На самом деле я пробовал оба вышеуказанных метода на двух разных сайтах. На 1 сайте все отлично работает любым способом.

На сайте 2 ему не удается подтянуть количество Facebook к общему совокупному количеству. Любые идеи?

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. Andre Bulatov

    Кажется, это работает:

    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. На другом все работает отлично.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: