Коментар без потоку відповідає посиланням на оригінальний коментар


10

Я поясню, що я намагаюся досягти.

Я хотів би мати регулярні (не плоскі / класичні) коментарі з посиланням на відповіді на кожен коментар. Коли хтось відповість на коментар, коментар з відповіддю закінчиться вгорі (або внизу) як останній коментар так само, як і в коментарях, що не мають потоку за замовчуванням. оригінальний коментар / автор.

На форумі 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 (або аналогічний в вашому браузері вибору)?
mor7ifer

Я вирішив проблему після безлічі спроб і помилок. Трюк полягав у тому, щоб отримати фрагменти коду в потрібному порядку та місця у файлах коментарів та функцій. sВ %1$sозначає , що аргумент трактується , як і представлені у вигляді рядка. Це докладно пояснено у посібнику php для функції sprintf: php.net/manual/en/function.sprintf.php
sarytash

3
Ви повинні подати те, що ви зробили як рішення, щоб зберегти організацію сайту та допомогти всім, хто звертається за вами з тим самим питанням, подолати його швидко та ефективно.
mor7ifer

Так, якщо ви можете опублікувати робоче рішення, яке було б чудово.
Борек Бернард

1
погодився, хотів би бачити це в дії.
helgatheviking

Відповіді:


4

Це моє рішення, а не запропоноване рішення, запропоноване на форумах WordPress. Це виявляється досить легко, але передбачає кілька кроків.

1) Перейдіть до wp-admin-> Settings-> Обговорення та вимкніть потокові коментарі. Це дозволить вимкнути нитку, яку ми хочемо, але також видалить можливість "відповісти" на конкретний коментар. Ми повинні це повернути.

2) Додайте нижче скрипт до функції теми.php теми або до плагіна.

function load_script_for_fake_threading() {
    if (is_singular()) wp_enqueue_script('comment-reply');
}
add_action('wp_enqueue_scripts','load_script_for_fake_threading');

3) Друк коментарів обробляється зворотним дзвінком до wp_list_comments . TwentyEleven використовує функцію twentyeleven_comment()у своєму functions.php. Якщо ваша тема не має зворотного дзвінка, вам потрібно буде створити її. За замовчуванням використовується вміст методу start_el класу Walker_Comment у "wp-include / comment-template.php". Скопіюйте це або скопіюйте зворотний дзвінок теми та перейменуйте функцію у fake_threaded_comment.

3) Знайдіть функцію wp_list_comments у своїй темі comments.phpта змініть зворотний дзвінок. Він повинен виглядати так:

wp_list_comments(array('callback'=>'fake_threaded_comment'));

4) Зараз ми будемо трохи обманювати. У цьому зворотному дзвінку "fake_threaded_comment" слід викликати функцію comment_reply_link . Нам потрібно відредагувати так, щоб ми передавали жорстко кодовані аргументи "глибина" та "max_depth". Ми встановлюємо «глибину» до 1, а максимальна - до 2. Це поверне нашу кнопку «Відповісти» / посилання.

comment_reply_link( 
  array_merge( 
    $args, 
      array( 
        'reply_text' => __( 'Reply <span>&darr;</span>', 
        'themetextdomainname' ), 
        'depth' => 1, 
        'max_depth' => 2 
)));

5) Налаштуйте посилання на батьківський коментар. На боці функції зворотного дзвінка, на яку ви, можливо, помітили посилання на $comment. $comment->comment_parent- це ідентифікатор відповіді на коментар і get_comment_link($comment->comment_parent)дає URL-адресу батьківського коментаря (не повної розмітки якоря). get_comment($comment->comment_parent)отримає дані батьківських коментарів. Отже, щось на кшталт ...

$pcom = get_comment($comment->comment_parent);
echo '<a href="'.get_comment_link($comment->comment_parent).'">This is a reply to '.$pcom->comment_author.'</a>';

Це воно. Тепер ви можете коментувати конкретні коментарі, але колись опублікований коментар з’явиться в кінці або на початку списку коментарів, залежно від порядку завантаження.

Перевірена з TwentyEleven на WordPress 3.4.1 (трохи застаріла, але це вже на моєму сервісі розробників). Я впевнений, що є такі речі, які теми або плагіни можуть зробити, щоб зламати це, але я не думаю, що добре поведена тема чи плагін можуть її зламати.

Це моя добра справа за день. Будь ласка, дайте мені знати, якщо щось піде не так.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.