Вопрос или проблема
У меня есть этот код, который получает последние комментарии на моем сайте:
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 аргументов.
$args
массив необязательных аргументов, который переписывает значения по умолчанию$comment
необязательныйcomment_id
или объект WP_Comment, на который комментарий должен отвечать.$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
в WordPress
Если функция 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 и актуальными обновлениями, чтобы быть в курсе изменений и улучшений, которые могут повлиять на функциональность ваших скриптов.