Вывод отзывов ВК на сайт WordPress?
Есть группа ВК, там есть обсуждение с отзывами. Хочу через VK API подгружать последние 30 комментариев-отзывов на страницу "Отзывы" на сайте WP. Плагинов не нашел.
Сформировал get запрос к API. Отдает всё нормально, в json.
Я хочу, чтобы при загрузке страницы "Отзывы" информация на ней каждый раз динамически подгружалась через VK API.
Мои мысли как это сделать: в теме WP найти файл, который отвечает за шаблон записей (что то типа single.php). В шаблоне создать условие проверки: если текущий id страницы == id страницы отзывов, то отправляю get запрос с url, обрабатываю результат и вывожу на экран.
Что скажете? Так будет правильно, или как то по другому это нужно реализовать?
Дополнительно:
1. Страница и запись (пост) - разные сущности. И шаблоны разные: у записей это single.php, у страниц - page.php. Хотя ход мыслей в общем правильный. Но есть и другие варианты, например использовать хуки, если они есть в Теме, или сделать шаблон для одной отдельной страницы (см. Template Hierarchy). Кроме того, вносить изменения в шаблоны правильнее в дочерней Теме, если Тема не своя самодельная или сделанная на заказ. Иначе при обновлении Темы изменения потеряются.
2. Каждый раз при показе страницы дергать API стороннего сайта - плохая идея. Потому что операция не быстрая, страница будет тормозить, а может и вообще не загрузиться, если по каким-то причинам та сторона не ответит. Поэтому правильнее использовать кэширование либо страницы целиком, либо только внешних данных в зависимости от требуемой частоты обновления.
- Спасибо за подсказки.
Тема elementor Hello. Через elementor builder собрал свои шаблоны блоков и страниц.
Попробую сделать отдельную страницу + кэширование.
-
правильнее использовать кэширование
абсолютно не правильно. для таких целей есть планировщик(системный, например crontab). кеширование - зло
- Владимир Брумер, Планировщик - не более чем один из способов запуска скрипта формирования кэша (то же кэширование, только в профиль). К тому же способ далеко не всегда целесообразный.
С cron/crontab отдельная история, но это уже оффтоп.
- YBB,
Планировщик - не более чем один из способов запуска скрипта формирования кэша
))) любые данные, которые подтягиваются через апи, например прогноз погоды, должны обновляться. Иначе какой смысл в этом?!! Кеширование будет вам показывать не актуальные данные всегда.
Через планировщик же вы можете каждые несколько минут данные дергать и это будет не заметно.
М/у кешированием и планировщиком разца, что м/у небом и землей... -
Кеширование будет вам показывать не актуальные данные всегда.
Владимир Брумер, Что значит "всегда"? Не всегда, а только в период между обновлением исходных данных и обновлением кэша. Такова цена экономии ресурсов и уменьшения времени реакции. Поэтому время жизни кэша и способ его обновления критически зависят от конкретной ситуации.
Через планировщик же вы можете каждые несколько минут данные дергать и это будет не заметно.
Все зависит от конкретной задачи. В моей практике были случаи, когда устаревание информации на минуту было уже критичным.
М/у кешированием и планировщиком разца, что м/у небом и землей...
Это да. И даже больше! Потому что не стоит сравнивать теплое с мягким :) Кэш - способ хранения данных ("легкодоступно и недолго"), планировщик - способ обновления данных в кэше.
- YBB, Вы не верно меня поняли. в ответе Вы говорите человеку:
Поэтому правильнее использовать кэширование, либо страницы целиком, либо только внешних данных
но вопрос стоит - то в том, как эти данные лучше получить, а не ускорить загрузку станицы. тем более, что судя по вопросу ему надо при каждом открытии станицы свежимие данные...
Я хочу, чтобы при загрузке страницы "Отзывы" информация на ней каждый раз динамически подгружалась через VK API
далее Вы сами пишите
Все зависит от конкретной задачи. В моей практике были случаи, когда устаревание информации на минуту было уже критичным.
так при чем тут кеш - то.?! прежде чем эти данные кешировать их надо получить как - то. да и вопрос логичный, на мой взглад: при высокой частоте запроса имеет смысл вовсе кешировать..?
-
что судя по вопросу ему надо при каждом открытии станицы свежимие данные...
Кто знает, кто знает. Многие и не догадываются, что им надо, пока не покажешь, что можно и так :)
так при чем тут кеш - то.?!
При том, что данные полученные по таймеру, сохраняются в кэше - легкодоступной памяти с ограничением по сроку жизни этих данных.
при высокой частоте запроса имеет смысл вовсе кешировать..?
В далекие 90-е один залетный дятел, вставивший отвертку в клавишу F5, отучил меня делать запрос на удаленный сервер при каждом запросе к странице с "импортом". С тех пор сам делаю с кэшом, хотя бы с минимально сроком жизни, и другим советую.
В теории все просто. Кэшировние имеет смысл, если за время жизни кэша он может быть использован более одного раза, а время жизни/частота обновления определяется частотой обновления исходных данных и требованиями к их актуальности при выдаче клиенту. На практике, кончено, все гораздо сложнее.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Подгружать отзывы ВК напрямую при каждом открытии страницы технически можно, но это плохая схема: страница станет зависеть от скорости и лимитов VK API. Правильнее получать отзывы через API, кэшировать их в WordPress transient/options и обновлять по расписанию или по кнопке в админке.
Для отдельной страницы не нужно править
single.php: страницы WordPress используютpage.phpили отдельный шаблон по Template Hierarchy, напримерpage-reviews.php. Ещё лучше сделать шорткод, чтобы вывод не зависел от конкретной темы.add_shortcode('vk_reviews', function () { $reviews = get_transient('vk_reviews_cache'); if ($reviews === false) { $response = wp_remote_get('https://api.vk.com/method/board.getComments?...', [ 'timeout' => 15, ]); if (is_wp_error($response)) { return '<p>Отзывы временно недоступны.</p>'; } $reviews = json_decode(wp_remote_retrieve_body($response), true); set_transient('vk_reviews_cache', $reviews, HOUR_IN_SECONDS); } ob_start(); echo '<div class="vk-reviews">'; foreach (($reviews['response']['items'] ?? []) as $item) { echo '<p>' . esc_html($item['text'] ?? '') . '</p>'; } echo '</div>'; return ob_get_clean(); });
Токен VK API нельзя светить в JS. Храните его на сервере, экранируйте вывод через
esc_html(), добавьте обработку пустого ответа и лимитов API. На странице «Отзывы» достаточно вставить шорткод[vk_reviews].