• Всем добрый день! Вопрос к программистам. Нашел в интернете код, который вроде бы как должен решить проблему с объединением комментариев на мультиязычном сайте с плагином polylang.

    //Remove the filter
    function polylang_remove_comments_filter() {
    global $wp_filter;
    global $polylang;
    remove_filter(‘comments_clauses’, array(&$polylang, ‘comments_clauses’));
    }

    function sort_merged_comments($a, $b) {
    return $a->comment_ID – $b->comment_ID;
    }

    //Get the comments from the same posts in different languages
    function merge_comments($comments, $post_ID) {
    global $sitepress;
    remove_filter( ‘comments_clauses’, array( $sitepress, ‘comments_clauses’ ) );
    // get all the languages for which this post exists
    $languages = icl_get_languages(‘skip_missing=1’);
    $post = get_post( $post_ID );
    $type = $post->post_type;
    foreach($languages as $code => $l) {
    // in $comments are already the comments from the current language
    if(!$l[‘active’]) {
    $otherID = icl_object_id($post_ID, $type, false, $l[‘language_code’]);
    $othercomments = get_comments( array(‘post_id’ => $otherID, ‘status’ => ‘approve’, ‘order’ => ‘ASC’) );
    $comments = array_merge($comments, $othercomments);
    }
    }
    if ($languages) {
    // if we merged some comments in we need to reestablish an order
    usort($comments, ‘sort_merged_comments’);
    }
    //
    add_filter( ‘comments_clauses’, array( $sitepress, ‘comments_clauses’ ) );

    return $comments;
    }

    //Add comments for the same posts in different languages
    function merge_comment_count($count, $post_ID) {
    // get all the languages for which this post exists
    $languages = icl_get_languages(‘skip_missing=1’);
    $languages = pll_the_languages(array(‘raw’=>1 ));
    $post = get_post( $post_ID );
    $type = $post->post_type;

    foreach($languages as $l) {
    // in $count is already the count from the current language
    if(!$l[‘active’]) {
    $otherID = icl_object_id($post_ID, $type, false, $l[‘language_code’]);
    if($otherID) {
    // cannot use call_user_func due to php regressions
    if ($type == ‘page’) {
    $otherpost = get_page($otherID);
    } else {
    $otherpost = get_post($otherID);
    }
    if ($otherpost) {
    // increment comment count using translation post comment count.
    $count = $count + $otherpost->comment_count;
    }
    }
    }
    }
    return $count;
    }

    //Trigger the functions
    add_action(‘wp’,’polylang_remove_comments_filter’);
    add_filter(‘comments_array’, ‘merge_comments’, 100, 2);
    add_filter(‘get_comments_number’, ‘merge_comment_count’, 100, 2);

    При добавлении в funcion.php пишет Ваши изменения в коде PHP были отменены из за ошибки на строке 173 файла wp-content/themes/flatsome-child/functions.php. Исправьте и попробуйте пересохранить.

    syntax error, unexpected ‘–’ (T_STRING), expecting ‘;’

    В 173 строке вот это return $a->comment_ID – $b->comment_ID;
    Заранее спасибо!

    Страница, с которой нужна помощь: [войдите, чтобы увидеть ссылку]

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Добрый.

    А так?

    function sort_merged_comments($a, $b) {
        return $a->comment_ID - $b->comment_ID;
    }

    Теперь
    Ваши изменения в коде PHP были отменены из за ошибки на строке 181 файла wp-content/themes/flatsome-child/functions.php. Исправьте и попробуйте пересохранить.

    syntax error, unexpected ‘=’, expecting ‘)’

    181 строка
    $languages = icl_get_languages(‘skip_missing=1’);

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Ну это Вам, видимо, нужно во всём коде заменить одинарные кавычки на верные.
    Вместо должно быть '.

    Поменял
    //Remove the filter
    function polylang_remove_comments_filter() {
    global $wp_filter;
    global $polylang;
    remove_filter(‘comments_clauses’, array(&$polylang, ‘comments_clauses’));
    }

    function sort_merged_comments($a, $b) {
    return $a->comment_ID – $b->comment_ID;
    }

    //Get the comments from the same posts in different languages
    function merge_comments($comments, $post_ID) {
    global $sitepress;
    remove_filter( ‘comments_clauses’, array( $sitepress, ‘comments_clauses’ ) );
    // get all the languages for which this post exists
    $languages = icl_get_languages(‘skip_missing=1’);
    $post = get_post( $post_ID );
    $type = $post->post_type;
    foreach($languages as $code => $l) {
    // in $comments are already the comments from the current language
    if(!$l[‘active’]) {
    $otherID = icl_object_id($post_ID, $type, false, $l[‘language_code’]);
    $othercomments = get_comments( array(‘post_id’ => $otherID, ‘status’ => ‘approve’, ‘order’ => ‘ASC’) );
    $comments = array_merge($comments, $othercomments);
    }
    }
    if ($languages) {
    // if we merged some comments in we need to reestablish an order
    usort($comments, ‘sort_merged_comments’);
    }
    //
    add_filter( ‘comments_clauses’, array( $sitepress, ‘comments_clauses’ ) );

    return $comments;
    }

    //Add comments for the same posts in different languages
    function merge_comment_count($count, $post_ID) {
    // get all the languages for which this post exists
    $languages = icl_get_languages(‘skip_missing=1’);
    $languages = pll_the_languages(array(‘raw’=>1 ));
    $post = get_post( $post_ID );
    $type = $post->post_type;

    foreach($languages as $l) {
    // in $count is already the count from the current language
    if(!$l[‘active’]) {
    $otherID = icl_object_id($post_ID, $type, false, $l[‘language_code’]);
    if($otherID) {
    // cannot use call_user_func due to php regressions
    if ($type == ‘page’) {
    $otherpost = get_page($otherID);
    } else {
    $otherpost = get_post($otherID);
    }
    if ($otherpost) {
    // increment comment count using translation post comment count.
    $count = $count + $otherpost->comment_count;
    }
    }
    }
    }
    return $count;
    }

    //Trigger the functions
    add_action(‘wp’,’polylang_remove_comments_filter’);
    add_filter(‘comments_array’, ‘merge_comments’, 100, 2);
    add_filter(‘get_comments_number’, ‘merge_comment_count’, 100, 2);

    Ваши изменения в коде PHP были отменены из за ошибки на строке 173 файла wp-content/themes/flatsome-child/functions.php. Исправьте и попробуйте пересохранить.

    syntax error, unexpected ‘–’ (T_STRING), expecting ‘;’

    Это 173 строка

    return $a->comment_ID – $b->comment_ID;

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Это уже исправляли. У вас снова тире вместо дефиса.
    Ваш вариант:
    return $a->comment_ID – $b->comment_ID;
    Должно быть:
    return $a->comment_ID - $b->comment_ID;

    Добрый день! Код наконец-то вставился без ошибок, но теперь на странице тавара в комментах появилось следующее

    Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in /beardbro.com.ua/www/wp-includes/class-wp-hook.php on line 289

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Объединение комментариев с Polylang» закрыта для новых ответов.