dougpaul
  • 0
Новичок

Как сделать динамически создаваемый контент доступным для поиска в WordPress?

  • 0

Я пишу плагин для WordPress, который динамически генерирует контент из электронной таблицы Google Documents. В частности, плагин предоставляет шорткод, который создает красивый список сотрудников. Работает, но есть две проблемы:

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

Я могу решить первую проблему с некоторым уровнем кэширования, но что я могу сделать со второй проблемой? Я упомянул первую проблему, потому что считаю идеальным решением то, при котором WordPress индексирует кешированную копию страницы.

Еще одно решение, которое я могу придумать, — это периодически создавать содержимое страницы с помощью плагина. Таким образом, страница может быть найдена и не будет динамически генерироваться каждый раз. Тем не менее, это кажется странной парадигмой для плагина, полностью контролирующего содержимое страницы… есть ли другие плагины, которые делают это? Кроме того, этот подход усложняет работу пользователя, чего не должно быть. (Им пришлось бы редактировать содержимое страницы со страницы плагина вместо обычного места.)

Вот пример того, как выглядит часть разметки страницы:

<h2>General Management</h2>

[staff-directory department="General Management"]

Электронная таблица для попадания настраивается отдельно. «Отдел» указывает рабочий лист. (Я бы показал вам, как выглядят результаты, но у меня недостаточно представителей, чтобы опубликовать изображение.)

Ваши предложения очень ценятся.

Share
  1. В wp_posts таблице есть post_content_filtered столбец, который плагины могут использовать для кеширования дорогостоящих фильтров пост-контента. Идея состоит в том, что когда вы показываете страницу, вы не читаете post_content, а читаете post_content_filtered . Это хорошо, но это не решит вашу проблему с поиском, потому что WordPress по умолчанию смотрит только на post_content и post_title .

    Однако вы можете сделать это наоборот: сохранить содержимое редактора post_content_filtered и отображаемую страницу post_content (периодически обновлять его с помощью задания cron). Есть фильтры, которые вызываются перед редактированием поста, их можно использовать для прохождения post_content_filtered вместо post_content редактора. Таким образом, пользователь не увидит разницы, но производительность и удобство поиска будут улучшены.

    • 0
    • Потрясающий. Мне действительно не нравится использовать эти таблицы в обратном порядке от их намерения, но я думаю, что это самое чистое решение на столе прямо сейчас.

      • 0
    • На самом деле, если я в конечном итоге установлю плагин для кэширования, может ли это свести на нет или сильно усложнить этот подход? Отвечают ли подключаемые модули кэширования за создание post_content_filtered и/или размещают ли они страницы из этой таблицы?

      • 0
    • @Doug: я не уверен, но я думаю, что классические плагины кеша не используют это поле, потому что они кэшируют не только отдельные сообщения (также архивные страницы и т. д.). Я предполагаю, что они сохраняют сгенерированный вывод HTML в виде файлов в каталоге кеша и читают их оттуда. Но вы можете просто попробовать его в тестовой среде: установите плагин кеша, зайдите на сайт и посмотрите, post_content_filtered приживется ли.

      • 0
    • Скорость не является огромным фактором, но достаточно важным, чтобы я не мог открывать электронную таблицу каждый раз, когда посетитель выполняет поиск (я думаю, это то, что вы говорите во втором предложении). Что касается вашего первого предложения, как кэширование решает обе проблемы? Где мне «кэшировать», чтобы искать кешированную версию?

      • 0
  2. я вижу два пути

    Если важна скорость, то кэширование решит обе ваши проблемы. Если вы можете каким-то образом добавить метку времени последней модификации в кеш и URL-адрес/получить получение данных, с помощью простого алгоритма хеширования вы можете быть уверены, что кешированная версия актуальна.

    Если скорость не так актуальна, вы можете использовать API, чтобы запросить электронную таблицу. Например, вам может не понадобиться PHP, вместо этого вы можете использовать JavaScript и JSON для очень быстрого поиска, как при извлечении данных в этом примере.

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

    • 0

Оставить ответ

You must login to add an answer.