Я объясню, что я пытаюсь сделать.
Я хотел бы иметь регулярные непоточные (плоские / классические) комментарии с ответной ссылкой на каждый комментарий. Когда кто-то отвечает на комментарий, ответный комментарий будет заканчиваться вверху (или снизу) как последний комментарий, так же, как это было бы в комментариях по умолчанию, но в отличие от комментария по умолчанию в ответе должна отображаться ссылка на Оригинальный комментарий / автор.
На WordPress форуме есть предложенное решение:
http://wordpress.org/support/topic/reply-to-link-for-chronological-non-threaded-comments
Я просто не заставляю его работать. Я не уверен, в каких файлах постер размещает разные куски кода. Я попытался использовать код и подключить функцию к comment_post:
add_action('comment_post', 'print_reply_link', 10, 2);
function print_reply_link( $comment_id, $approved ){
if( $approved ){
$comment = get_comment( $comment_id );
if ( $comment->comment_parent ) {
$parent = get_comment( $comment->comment_parent );
$parent_link = esc_url( get_comment_link( $comment->comment_parent ) );
printf( ' in reply to <a href="%1$s">%2$s</a>', $parent_link, $parent->comment_author );
}
}
}
Это вернуло пустую страницу с «в ответ на имя автора ». После перезагрузки сообщения ответный комментарий отображается корректно, но без ссылки на исходный комментарий
Мои навыки кодирования действительно очень просты, поэтому я понятия не имею, как мне поступить. Был бы очень признателен за любую помощь.
href
вa
том , что следует «в ответ в` согласно„инструмент Осмотреть элемент“в Chrome (или аналогичный в вашем браузере выбора)?s
in%1$s
означает, что аргумент обрабатывается как и представляется как строка. Это подробно объясняется в руководстве по php для функции sprintf: php.net/manual/en/function.sprintf.phpОтветы:
Это мое решение, а не предложенное решение, предложенное на форумах WordPress. Оказывается, это довольно легко, но включает в себя несколько шагов.
1) Зайдите в wp-admin-> Настройки-> Обсуждение и отключите комментарии. Это отключит многопоточность, которую мы хотим, но также лишит нас возможности «отвечать» на определенный комментарий. Мы должны это вернуть.
2) Добавьте скрипт ниже в файл functions.php вашей темы или в плагин.
3) Печать комментариев обрабатывается обратным вызовом wp_list_comments . TwentyEleven использует функцию
twentyeleven_comment()
в своемfunctions.php
. Если ваша тема не имеет обратного вызова, вам нужно будет создать его. По умолчанию используется содержимое метода start_el класса Walker_Comment в «wp-includes / comment-template.php». Скопируйте это или скопируйте обратный вызов темы и переименуйте функцию вfake_threaded_comment
.3) Найдите функцию wp_list_comments в вашей теме
comments.php
и измените обратный вызов. Это должно выглядеть так:4) Теперь собираемся немного обмануть. В этом обратном вызове, 'fake_threaded_comment', должен быть вызов функции comment_reply_link . Нам нужно отредактировать его так, чтобы мы передавали жестко закодированные аргументы глубины и max_depth. Мы устанавливаем «глубину» на 1 и max_depth на 2. Это вернет нашу кнопку «Ответить» / ссылку.
5) Настройте ссылку на родительский комментарий. В функции обратного вызова вы могли заметить ссылки
$comment
.$comment->comment_parent
является идентификатором комментария с ответом иget_comment_link($comment->comment_parent)
дает URL родительского комментария (не полную разметку привязки).get_comment($comment->comment_parent)
получит данные родительского комментария. Итак, что-то вроде ...Вот и все. Теперь вы можете комментировать отдельные комментарии, но после публикации комментарий будет отображаться в конце или в начале списка комментариев в зависимости от порядка загрузки.
Протестировано с TwentyEleven на WordPress 3.4.1 (немного устарело, но уже на моем сервере разработки). Я уверен, что есть вещи, которые темы или плагины могут сделать, чтобы сломать это, но я не думаю, что хорошо продуманная тема или плагин сломали бы это.
Это мое доброе дело на сегодня. Пожалуйста, дайте мне знать, если что-то пойдет не так.
источник