web-dev-qa-db-fra.com

Comment rendre le contenu généré dynamiquement consultable dans WordPress?

J'écris un plugin pour WordPress qui génère dynamiquement le contenu d'un tableur Google Documents. Plus précisément, le plugin fournit un shortcode qui génère une belle liste de personnel. Cela fonctionne, mais il y a deux problèmes:

  1. Les pages qui utilisent le shortcode chargent un peu lentement, car elles doivent faire plusieurs demandes à un autre serveur
  2. Étant donné que le contenu est généré lors du chargement de la page, le contenu de la liste du personnel n'apparaît pas dans les résultats de la recherche sur le site.

Je peux résoudre le premier problème avec un certain niveau de mise en cache, mais que puis-je faire à propos du second problème? Je mentionne le premier problème car je pense que la solution idéale est celle dans laquelle WordPress indexe la copie en cache de la page.

Une autre solution à laquelle je peux penser serait d’avoir le contenu de la page composé d’un plugin périodiquement. De cette façon, la page pourrait être recherchée et ne serait pas générée dynamiquement à chaque fois. Cependant, cela semble être un paradigme étrange pour un plugin de contrôler complètement le contenu d'une page ... existe-t-il d'autres plugins qui le font? En outre, cette approche expose l'utilisateur à une complexité qu'il ne devrait pas avoir à le faire. (Ils devraient éditer le contenu de la page à partir d'une page de plugin au lieu de l'endroit habituel.)

Voici un exemple de la partie du balisage de la page:

<h2>General Management</h2>

[staff-directory department="General Management"]

La feuille de calcul à consulter est configurée séparément. Le "département" spécifie la feuille de calcul. (Je vous montrerais à quoi ressemblent les résultats, mais je n'ai pas assez de représentant pour publier une image.)

Vos suggestions sont grandement appréciées.

5
Doug Paul

La table wp_posts a une colonne post_content_filtered que les plugins peuvent utiliser pour mettre en cache des filtres de contenu de publication coûteux . L'idée est que lorsque vous affichez la page, vous ne lisez pas post_content mais vous lisez post_content_filtered. C'est bien, mais cela ne résoudra pas votre problème de recherche, car WordPress ne considère par défaut que post_content et post_title.

Vous pouvez toutefois le faire à l'inverse: stockez le contenu de l'éditeur dans post_content_filtered et la page rendue dans post_content (mettez-le à jour périodiquement avec un travail cron). Certains filtres sont appelés avant la publication du message. Vous pouvez les utiliser pour transmettre post_content_filtered au lieu de post_content à l'éditeur. Ainsi, l'utilisateur ne verra aucune différence, mais les performances et l'expérience de recherche seront améliorées.

1
Jan Fabry

Je vois deux façons

Si la vitesse est importante, la mise en cache résoudrait vos deux problèmes. Si vous pouvez en quelque sorte ajouter un horodatage de la dernière modification au cache et l'url/get de récupération des données, avec un simple algorithme de hachage, vous pouvez être sûr que la version mise en cache est à jour.

Si la rapidité n’est pas aussi pertinente, vous pouvez utiliser l’API pour demander la feuille de calcul. Par exemple, vous n’avez peut-être pas besoin de PHP, mais vous pouvez utiliser JavaScript et JSON pour une recherche très rapide, comme les données extraites dans cet exemple .

À votre place, je me contenterais de la mise en cache des données, en calculant si Google Docs n'est pas disponible au moment de la requête de recherche.

0
petermolnar