Коментарі в WordPress
Коментарі це окрема сутність у структурі даних WordPress. Зв’язують коментарі із записами (постами, таблиця wp_posts ) та користувачами (таблиця wp_users ).
Читайте також:
Структура таблиць коментарів у БД
У базі даних WordPress за коментарі відповідають дві таблиці: wp_comments та wp_commentmeta . Розберемо кожну.
wp_comments
Містить основні дані коментарів.
Поле | Опис та приклад значення |
---|---|
comment_ID | ID коментаря. (7999) |
comment_post_ID | ID запису до якої належить коментар. Рівно колонці ID таблиці wp_posts (4896) |
comment_author | Ім’я автора коментаря. (Mseo) |
comment_author_email | email автора коментаря. ([email protected]) |
comment_author_url | URL автора коментаря. ( http://maeo.ru ) |
comment_author_IP | IP автора коментаря. Автоматично не визначається. (95.79.52.2) |
comment_approved | Схвалений комент чи ні: 1/0. Це рядкове поле і його плагіни можуть записувати інші значення, наприклад, ‘spam’. Правильніше було б назвати це поле comment_status , але воно використовується в таблиці wp_posts . |
comment_agent | User agent автора коментаря. (Mozilla/5.0 (Windows…) |
comment_date | Дата та час відправки коментаря. У MySQL форматі. (2015-09-01 16:28:33) |
comment_date_gmt | Дата та час відправки коментаря в GMT зоні. (2015-09-01 16:28:33) |
comment_content | Текст коментарю. (Вітаю, вище вказаний…) |
comment_karma | Карма коментаря. (0) |
comment_type | Тип коментарю. За замовчуванням ВП використовуються три типи: comment – звичайний комент (до версії 5.0 був порожнім рядком ” ). trackback та pingback . Про них читайте тут . |
comment_parent | ID батьківського коментаря. (7998) |
user_id | ID користувача, що опублікував коментар. Рівно колонці ID у таблиці wp_users (123) |
ВАЖЛИВО! Довжина значення поля comment_type = 20 символів ! Приклад максимально допустимої довжини: new_question_comment
.
Приклад того, як таке обмеження може зіпсувати код: припустимо, у нас є додатковий тип коментаря question_comment
. Деякі з таких коментарів згодом потрапляють до архіву, при цьому нам потрібно додати префікс archive-
до типу. Робимо ми це так:
// $com - це об'єкт оброблюваного коментаря wp_update_comment([ 'comment_ID' => $com->comment_ID, 'comment_type' => "archive-$com->comment_type", // archive-question_comment ]);
В результаті таке оновлення не спрацює і що важливіше ми не побачимо жодної помилки – нічого! Щоб зрозуміти чому не оновлюється, доведеться лізти в нетрі ядра ВП.
wp_commentmeta
Містить додаткові дані коментаря. З коробки в цю таблицю нічого не записується, вона потрібна для розширення функціоналу коментування, щоб додати додаткові дані.
Читайте також: Створюємо нові поля для коментарів
Висновок коментарів у темі
Для виведення коментарів на сторінці потрібно використовувати функцію comments_template() у тому місці, де нам потрібно показати список коментарів. Ця функція зробить запит та збере коментарі для сторінки.
Також у тему потрібно додати файл comments.php
. У ньому потрібно описати висновок коментарів:
- Потрібно перевірити чи є коментарі на сторінці. Робиться це за допомогою змінної $comemnts , яка встановлюється в comments_template() –
$comments = & $wp_query->comments
і доступна в цьому файлі. Також перевірити наявність коментарів на сторінці можна функцією have_comments() . Далі якщо:- коментарі є , потрібно використовувати функцію wp_list_comments() , щоб вивести список коментарів.
- коментарів немає , потрібно вивести повідомлення, що їх немає.
- Потрібно вивести форму коментування. comment_form () .
Приклад файлу comments.php із теми Twenty Twenty:
Встановлення куків коментування для неавторизованих користувачів
Коли неавторизований користувач залишає коментар, WP встановлює куки, в яких зберігаються введені дані. Які куки зберігаються:
'comment_author_' . COOKIEHASH 'comment_author_email_' . COOKIEHASH 'comment_author_url_' . COOKIEHASH // де COOKIEHASH = md5( get_site_option( 'siteurl' ) )
Зберігає ці куки функція wp_set_comment_cookies() .
За промовчанням вона повішена на хук /wp-includes/default-filters.php :
add_action( 'set_comment_cookies', 'wp_set_comment_cookies', 10, 3);
Цей хук спрацьовує коли коментар публікується через форму коментування /wp-comments-post.php :
/** * Perform other actions when comment cookies є set. * * @ Since 3.4.0 * @since 4.9.6 The `$cookies_consent` parameter was added. * * @param WP_Comment $comment Comment object. * @param WP_User $user Comment author's user object. User не може бути. * @param bool $cookies_consent Коментарі автора входять до магазину cookies. */ do_action( 'set_comment_cookies', $comment, $user, $cookies_consent);
Використовуйте wp_get_current_commenter() , щоб отримати дані цих cookies.
Для роботи цієї функції потрібно, щоб була включена опція show_comments_cookies_opt_in
: ” Обговорення ” → чекбокс ” Показувати галочку дозволу установки куки для авторів коментарів “.
Коли ця опція включена, то у формі коментування буде виведена галочка “”, якщо галочка включена, то із запитом відправляється поле $_POST['wp-comment-cookies-consent']
, ця опція надалі передається третій параметр wp_set_comment_cookies() .
Функції коментарів
Це список функцій, що часто використовуються. Повний список дивіться тут .
comments_template() | Підвантажує файл шаблону коментарів на сторінці запису: /comments.php із папки теми. |
wp_list_comments() | Виводить коментарі записів (постів, сторінок). Функція може приймати ряд параметрів і використовується у шаблоні для виведення списку коментарів до посту/сторінки. Деякі параметри можна налаштувати в адмін-панелі. |
comment_form() | Виводить на екран готовий код форми коментування. |
get_comments() | Отримує коментарі за вказаними параметрами у вигляді масиву даних. |
get_comment() | Отримує дані вказаного коментаря із бази даних. Повертає екземпляр класу WP_Comment (умовно можна сказати, що повертаються всі поля таблиці wp_comments ). |
get_comments_number() | Отримує кількість усіх коментарів посту, включаючи повідомлення та пінги. |
wp_count_comments() | Отримує дані про кількість коментарів на сайті або окремо для вказаного посту. Дані збираються окремо за типами коментів (всі варіанти поля comment_approved : approved , spam і т.д.). |
get_comment_date() | Отримує дату вказаного коментаря. |
get_avatar_url() | Отримує посилання на аватар, надісланий email, ID або об’єкт користувача. Також можна передати об’єкт посту чи коментаря. |
comment_reply_link() | Виводить посилання <a> , яке дозволяє відповідати на коментар. Тег використовується в циклі коментарів для кожного коментаря. |
edit_comment_link() | Виводить посилання (HTML тег A) на редагування поточного в циклі коментаря, якщо користувач має право на це. |
comment_link() | Виводить посилання (URL) коментаря. |
paginate_comments_links() | Виводить список посилань на сторінки коментарів (посилання пагінації), поточного посту. |
wp_insert_comment() | Вставляє/додає коментар до бази даних. |
wp_new_comment() | Додає новий коментар до Бази Даних. Фільтрує дані. |