Понимание задачи: расширяем REST API WordPress для обсуждений
Стандартный REST API WordPress предоставляет базовые методы для работы с комментариями, однако они не поддерживают диалоговую структуру обсуждений, где комментарии могут иметь вложенные ответы и улучшенную навигацию. В этой статье мы рассмотрим, как расширить REST API для поддержки полноценной структуры обсуждений с использованием GPT для автоматизации модерации и подсказок при ответах.
Это решение актуально для сайтов с активными сообществами, где важно не просто отображать комментарии, а структурировать их и улучшать взаимодействие пользователей с помощью искусственного интеллекта.
Расширение REST API: добавляем вложенные комментарии и метаданные
По умолчанию WordPress не предоставляет в REST API вложенную структуру комментариев. Чтобы это исправить, создадим кастомный эндпоинт, который вернёт комментарии вместе с их вложенными ответами.
Для начала зарегистрируем новый маршрут в REST API, который будет возвращать обсуждения с вложенными комментариями:
add_action('rest_api_init', function () {
register_rest_route('wpgpt/v1', '/discussions/(?P<post_id>\d+)', [
'methods' => 'GET',
'callback' => 'wpgpt_get_discussions',
'args' => [
'post_id' => [
'validate_callback' => 'is_numeric',
],
],
]);
});Затем реализуем функцию wpgpt_get_discussions, которая будет получать комментарии с их дочерними:
function wpgpt_get_discussions($request) {
$post_id = (int) $request['post_id'];
$comments = get_comments([
'post_id' => $post_id,
'parent' => 0,
'status' => 'approve',
'orderby' => 'comment_date_gmt',
'order' => 'ASC'
]);
$result = [];
foreach ($comments as $comment) {
$result[] = wpgpt_prepare_comment_tree($comment);
}
return rest_ensure_response($result);
}
function wpgpt_prepare_comment_tree($comment) {
$data = [
'id' => $comment->comment_ID,
'author' => $comment->comment_author,
'content' => $comment->comment_content,
'date' => $comment->comment_date_gmt,
'children' => []
];
$children = get_comments([
'parent' => $comment->comment_ID,
'status' => 'approve',
'orderby' => 'comment_date_gmt',
'order' => 'ASC'
]);
foreach ($children as $child) {
$data['children'][] = wpgpt_prepare_comment_tree($child);
}
return $data;
}Так мы получаем дерево комментариев с вложениями, удобное для фронтенда и дальнейшей обработки.
Интеграция GPT: помощь в модерации и генерации ответов
Используя возможности GPT, можно автоматизировать процесс модерации комментариев и даже предлагать пользователям подсказки для ответов, улучшая вовлечённость.
Для примера реализуем простую функцию, которая отправляет комментарий на проверку в GPT API, чтобы выявить нежелательный контент и предложить исправления.
function wpgpt_moderate_comment_with_gpt($comment_content) {
$api_key = 'ВАШ_API_КЛЮЧ';
$endpoint = 'https://api.openai.com/v1/chat/completions';
$data = [
'model' => 'gpt-4',
'messages' => [
[
'role' => 'system',
'content' => 'Проверь комментарий на наличие оскорблений, спама и токсичности. Предложи исправленный вариант без нарушений.'
],
[
'role' => 'user',
'content' => $comment_content
]
]
];
$args = [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Bearer ' . $api_key,
],
'body' => json_encode($data),
'timeout' => 15,
];
$response = wp_remote_post($endpoint, $args);
if (is_wp_error($response)) {
return null;
}
$body = wp_remote_retrieve_body($response);
$result = json_decode($body, true);
if (!empty($result['choices'][0]['message']['content'])) {
return $result['choices'][0]['message']['content'];
}
return null;
}Теперь можно использовать эту функцию при сохранении комментария, чтобы автоматически фильтровать и корректировать текст. Это значительно упростит модерацию и повысит качество обсуждений.
Пример добавления фильтра для проверки комментариев
Добавим хук, который будет проверять комментарии перед публикацией:
add_filter('preprocess_comment', function($commentdata) {
$corrected_content = wpgpt_moderate_comment_with_gpt($commentdata['comment_content']);
if ($corrected_content !== null) {
$commentdata['comment_content'] = $corrected_content;
}
return $commentdata;
});Практические советы по реализации и оптимизации
Чтобы обеспечить стабильную работу и удобство, рекомендуем:
- Кэшировать результаты запроса REST API с обсуждениями, чтобы снизить нагрузку на сервер.
- Ограничивать частоту вызовов API GPT, чтобы не превысить лимиты и не увеличить задержки.
- Реализовать пользовательский интерфейс с ленивой загрузкой вложенных комментариев — это улучшит производительность.
- Использовать готовые плагины, например Clearfy Pro для оптимизации REST API и безопасности.
Таким образом, вы сможете создать продвинутую систему обсуждений на базе WordPress, которая будет не просто отображать комментарии, а создавать удобный и интеллектуальный диалог, используя возможности GPT и расширенного REST API.