comment_reply_link не работает у меня

Вопрос или проблема

У меня есть этот код, который получает последние комментарии на моем сайте:

function bg_recent_comments($no_comments = 30, $comment_len = 80, $avatar_size = 48) {
                        $comments_query = new WP_Comment_Query();
                        $comments = $comments_query->query( array( 'number' => $no_comments , 'status' => 'approve') );
                        $comm = '';
                        if ( $comments ) : foreach ( $comments as $comment ) :
                            $comm .= '<li id="comment-160546">
                            <br><a href="'.get_permalink($comment->comment_post_ID).'" style="font-family:droid arabic kufi;text-align: center;font-style: italic;font-weight: bold;font-size: 15px;">'.get_the_title($comment->comment_post_ID).'</a><br><br>
                                <div class="comment byuser comment-author-hasan-ly odd alt thread-odd thread-alt depth-1 comment-wrap">
                                    <div class="comment-avatar">'.get_avatar( $comment->comment_author_email, $avatar_size ).'</div>
                                    <div class="comment-content">
                                        <div class="author-comment">
                                            <cite class="fn">'.get_comment_author( $comment->comment_ID ).'</cite>                  
                                            <div class="comment-meta commentmetadata"><a href="' . get_permalink( $comment->comment_post_ID ) . '#comment-' . $comment->comment_ID . '">Ссылка на запись</a></div><!-- .comment-meta .commentmetadata -->
                                            <div class="clear"></div>
                                        </div>
                                        <p>' . $comment->comment_content . '</p>
                                    </div>
                                </div><!-- #comment-##  --><br>
                            </li>';
                        endforeach; else :
                            $comm .= 'Нет комментариев.';
                        endif;
                        echo $comm; 
                    }

Теперь моя проблема в том, что когда я добавляю comment_reply_link, чтобы пользователь мог ответить на этот комментарий, форма ответа сейчас не отображается.

Когда я использую var_dump для comment_reply_link, он возвращает мне NULL.

Как я могу это решить

Функция comment_reply_link вызывает функцию get_comment_reply_link. Если вы посмотрите на исходный код, вы увидите, что для правильной работы необходимо до 3 аргументов.

  1. $args массив необязательных аргументов, который переписывает значения по умолчанию
  2. $comment необязательный comment_id или объект WP_Comment, на который комментарий должен отвечать.
  3. $post необязательный post_id или объект WP_Post, на котором будет отображаться комментарий.

Если функция возвращает null, она не может определить соответствующий $post. Попробуйте добавить этот параметр к вашему вызову функции, например, comment_reply_link(null, null, $post_id) или $comm.= get_comment_reply_link(null, $comment); (внутри вашего цикла foreach).

Если функция возвращает false, комментарии отключены для этой записи.

Источник: developer.wordpress.org

Ответ или решение

Если функция comment_reply_link не работает у вас, и вместо ожидаемой ссылки на ответ вы получаете NULL, есть несколько моментов, которые стоит учитывать при ее использовании. Рассмотрим, как правильно реализовать данную функцию и устранить проблемы, которые могут возникнуть.

1. Параметры функции

Как вы уже упомянули, функция comment_reply_link полагается на несколько аргументов. Как минимум, следует передать:

  • $args — массив дополнительных аргументов, которые могут переопределять стандартные значения.
  • $comment — объект WP_Comment или ID комментария, на который вы хотите ответить.
  • $post — объект WP_Post или ID поста, к которому принадлежит комментарий.

Если функция возвращает NULL, это может означать, что WordPress не может корректно определить, к какому посту относится комментарий. Чтобы решить эту проблему, необходимо убедиться, что вы передаете правильные параметры.

2. Пример реализации

Вот как можно изменить вашу функцию bg_recent_comments, чтобы корректно получать ссылку для ответа на комментарий:

function bg_recent_comments($no_comments = 30, $comment_len = 80, $avatar_size = 48) {
    $comments_query = new WP_Comment_Query();
    $comments = $comments_query->query(array('number' => $no_comments, 'status' => 'approve'));
    $comm = '';

    if ($comments) :
        foreach ($comments as $comment) :
            $post_id = $comment->comment_post_ID; // Получаем ID поста
            $comm .= '<li id="comment-' . $comment->comment_ID . '">
                <br><a href="' . get_permalink($post_id) . '" style="font-family:droid arabic kufi;text-align: center;font-style: italic;font-weight: bold;font-size: 15px;">' . get_the_title($post_id) . '</a><br><br>
                <div class="comment byuser comment-author-hasan-ly odd alt thread-odd thread-alt depth-1 comment-wrap">
                    <div class="comment-avatar">' . get_avatar($comment->comment_author_email, $avatar_size) . '</div>
                    <div class="comment-content">
                        <div class="author-comment">
                            <cite class="fn">' . get_comment_author($comment->comment_ID) . '</cite>                  
                            <div class="comment-meta commentmetadata"><a href="' . get_permalink($post_id) . '#comment-' . $comment->comment_ID . '">Post URL</a></div>
                            <div class="clear"></div>
                        </div>
                        <p>' . $comment->comment_content . '</p>
                        ' . comment_reply_link( array('reply_text' => __('Reply'), 'depth' => 1, 'max_depth' => get_option('thread_comments_depth')), $comment, $post_id ) . '
                    </div>
                </div><br>
            </li>';
        endforeach;
    else:
        $comm .= 'No comments.';
    endif;

    echo $comm; 
}

3. Проверка настроек комментариев

Если функция comment_reply_link все еще не возвращает ожидаемого результата, убедитесь, что комментарии включены для данного поста. Это можно сделать, проверив настройки поста или связанные с ним параметры в админ-панели WordPress. Если комментарии отключены, функция вернет false, и это также будет причиной отсутствия ссылки.

Заключение

Внедрив указанные изменения и проверив настройки, вы сможете устранить проблемы с comment_reply_link. Эта функция имеет огромное значение для улучшения взаимодействия с пользователями на вашем сайте, предоставляя возможность легко отвечать на комментарии. Настоятельно рекомендую также следить за документацией WordPress и актуальными обновлениями, чтобы быть в курсе изменений и улучшений, которые могут повлиять на функциональность ваших скриптов.

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

Капча загружается...