Вывод отзывов ВК на сайт WordPress?

Ссылка скопирована
1 ответ

Есть группа ВК, там есть обсуждение с отзывами. Хочу через VK API подгружать последние 30 комментариев-отзывов на страницу "Отзывы" на сайте WP. Плагинов не нашел.
Сформировал get запрос к API. Отдает всё нормально, в json.

Я хочу, чтобы при загрузке страницы "Отзывы" информация на ней каждый раз динамически подгружалась через VK API.

Мои мысли как это сделать: в теме WP найти файл, который отвечает за шаблон записей (что то типа single.php). В шаблоне создать условие проверки: если текущий id страницы == id страницы отзывов, то отправляю get запрос с url, обрабатываю результат и вывожу на экран.

Что скажете? Так будет правильно, или как то по другому это нужно реализовать?

Дополнительно:

Вывод отзывов ВК на сайт Wordpress?

1. Страница и запись (пост) - разные сущности. И шаблоны разные: у записей это single.php, у страниц - page.php. Хотя ход мыслей в общем правильный. Но есть и другие варианты, например использовать хуки, если они есть в Теме, или сделать шаблон для одной отдельной страницы (см. Template Hierarchy). Кроме того, вносить изменения в шаблоны правильнее в дочерней Теме, если Тема не своя самодельная или сделанная на заказ. Иначе при обновлении Темы изменения потеряются.

2. Каждый раз при показе страницы дергать API стороннего сайта - плохая идея. Потому что операция не быстрая, страница будет тормозить, а может и вообще не загрузиться, если по каким-то причинам та сторона не ответит. Поэтому правильнее использовать кэширование либо страницы целиком, либо только внешних данных в зависимости от требуемой частоты обновления.

  • Спасибо за подсказки.

    Тема elementor Hello. Через elementor builder собрал свои шаблоны блоков и страниц.

    Попробую сделать отдельную страницу + кэширование.

  • правильнее использовать кэширование

    абсолютно не правильно. для таких целей есть планировщик(системный, например crontab). кеширование - зло

  • Владимир Брумер, Планировщик - не более чем один из способов запуска скрипта формирования кэша (то же кэширование, только в профиль). К тому же способ далеко не всегда целесообразный.

    С cron/crontab отдельная история, но это уже оффтоп.

  • YBB,

    Планировщик - не более чем один из способов запуска скрипта формирования кэша

    ))) любые данные, которые подтягиваются через апи, например прогноз погоды, должны обновляться. Иначе какой смысл в этом?!! Кеширование будет вам показывать не актуальные данные всегда.
    Через планировщик же вы можете каждые несколько минут данные дергать и это будет не заметно.
    М/у кешированием и планировщиком разца, что м/у небом и землей...

  • Кеширование будет вам показывать не актуальные данные всегда.

    Владимир Брумер, Что значит "всегда"? Не всегда, а только в период между обновлением исходных данных и обновлением кэша. Такова цена экономии ресурсов и уменьшения времени реакции. Поэтому время жизни кэша и способ его обновления критически зависят от конкретной ситуации.

    Через планировщик же вы можете каждые несколько минут данные дергать и это будет не заметно.

    Все зависит от конкретной задачи. В моей практике были случаи, когда устаревание информации на минуту было уже критичным.

    М/у кешированием и планировщиком разца, что м/у небом и землей...

    Это да. И даже больше! Потому что не стоит сравнивать теплое с мягким :) Кэш - способ хранения данных ("легкодоступно и недолго"), планировщик - способ обновления данных в кэше.

  • YBB, Вы не верно меня поняли. в ответе Вы говорите человеку:

    Поэтому правильнее использовать кэширование, либо страницы целиком, либо только внешних данных

    но вопрос стоит - то в том, как эти данные лучше получить, а не ускорить загрузку станицы. тем более, что судя по вопросу ему надо при каждом открытии станицы свежимие данные...

    Я хочу, чтобы при загрузке страницы "Отзывы" информация на ней каждый раз динамически подгружалась через VK API

    далее Вы сами пишите

    Все зависит от конкретной задачи. В моей практике были случаи, когда устаревание информации на минуту было уже критичным.

    так при чем тут кеш - то.?! прежде чем эти данные кешировать их надо получить как - то. да и вопрос логичный, на мой взглад: при высокой частоте запроса имеет смысл вовсе кешировать..?

  • что судя по вопросу ему надо при каждом открытии станицы свежимие данные...

    Кто знает, кто знает. Многие и не догадываются, что им надо, пока не покажешь, что можно и так :)

    так при чем тут кеш - то.?!

    При том, что данные полученные по таймеру, сохраняются в кэше - легкодоступной памяти с ограничением по сроку жизни этих данных.

    при высокой частоте запроса имеет смысл вовсе кешировать..?

    В далекие 90-е один залетный дятел, вставивший отвертку в клавишу F5, отучил меня делать запрос на удаленный сервер при каждом запросе к странице с "импортом". С тех пор сам делаю с кэшом, хотя бы с минимально сроком жизни, и другим советую.

    В теории все просто. Кэшировние имеет смысл, если за время жизни кэша он может быть использован более одного раза, а время жизни/частота обновления определяется частотой обновления исходных данных и требованиями к их актуальности при выдаче клиенту. На практике, кончено, все гораздо сложнее.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Мария Код Ответ

Подгружать отзывы ВК напрямую при каждом открытии страницы технически можно, но это плохая схема: страница станет зависеть от скорости и лимитов 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();
});

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].

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно