Maison >interface Web >tutoriel CSS >WordPress Multi-multisite: une étude de cas

WordPress Multi-multisite: une étude de cas

Joseph Gordon-Levitt
Joseph Gordon-Levittoriginal
2025-03-07 17:06:11507parcourir

WordPress Multi-Multisite: A Case Study

Le défi: Créer un tableau de bord d'administration WordPress pour afficher efficacement les données Google Analytics à partir d'environ 900 blogs répartis sur 25 instances multisites. La clé était de surmonter les obstacles de performance inhérents au traitement d'un ensemble de données aussi important.

Cet article détaille le processus de développement, mettant en évidence les décisions et les défis clés rencontrés. Nous explorerons l'API WordPress REST, le débat PHP contre JavaScript, les limitations de l'environnement de production, les considérations de sécurité, la conception de la base de données et même le rôle de l'IA.

Terminologie clé

Avant de plonger, clarifions certains termes:

  • WordPress MultiSite: Une fonctionnalité WordPress principale permettant la gestion de plusieurs blogs à partir d'une seule installation. Les blogs partagent les fichiers de base et la base de données, mais ont des dossiers de médias individuels et des tables de base de données spécifiques au blog.
  • WordPress Multi- MultiSite: Un terme pour gérer plusieurs instances d'installations multisites WordPress. Cette approche évite les complexités de partage d'une seule multisite entre différents clients.
  • Site de tableau de bord: Le site hébergeant le tableau de bord personnalisé pour afficher les données d'analyse agrégées.
  • Sites clients: Les 25 instances multisites WordPress à partir desquelles les données sont collectées.

Stratégie de mise en œuvre

La solution impliquait un seul plugin WordPress installé sur le site du tableau de bord et les 25 sites clients. Ce plugin a deux fonctions principales:

  1. expose les données via des points de terminaison de l'API personnalisés sur les sites clients.
  2. Arrache les données des sites clients sur le site du tableau de bord, le met en cache et l'affiche sur le tableau de bord.

L'API WordPress REST: The Foundation

L'API WordPress REST était au cœur de ce projet. Son extensibilité a permis à la création de points de terminaison personnalisés d'exposer les données nécessaires.

Extrait de code: enregistrement des points de terminaison API

<?php [...]
function register(\WP_REST_Server $server) {
  $endpoints = $this->get();
  foreach ($endpoints as $endpoint_slug => $endpoint) {
    register_rest_route(
      $endpoint['namespace'],
      $endpoint['route'],
      $endpoint['args']
    );
  }
}
// ... (rest of the endpoint definitions) ...

PHP vs JavaScript: l'avantage asynchrone

Initialement, une approche basée sur PHP a été prise en compte. Cependant, le traitement synchrone PHP et les limites de temps d'exécution côté serveur rendent cela impraticable. Les capacités asynchrones de JavaScript offraient une solution supérieure, permettant la récupération concomitante de données de tous les sites.

L'implémentation JavaScript a considérablement réduit le temps de récupération des données: de 925 secondes estimées (synchrone) à environ 2 secondes (asynchrones). Cependant, les limites de demande de navigateur et de serveur ont nécessité un délai de 150 millierscondes entre les demandes.

Extrait de code: les données asynchrones récupérant

async function getBlogsDetails(blogs) {
  let promises = [];
  blogs.forEach((blog, index) => {
    // ... (code for delayed fetch requests) ...
  });
  // ... (code for Promise.all and error handling) ...
}

Connexion PHP et JavaScript

Les points de terminaison PHP et le code JavaScript ont été intégrés à l'aide de wp_localize_script(), passant de manière transparente des URL de point de terminaison et d'autres données nécessaires au javascript.

Sécurité: authentification et CORS

La sécurité a été traitée via les mots de passe de l'application pour l'authentification de l'API et les en-têtes CORS (partage de ressources croisées) afin d'autoriser les demandes de domaine transversal du site du tableau de bord vers les sites clients. Le principe du moindre privilège a été suivi, restreignant l'accès aux COR uniquement aux points de terminaison nécessaires.

Extrait de code: implémentation de l'en-tête CORS

<?php [...]
function register(\WP_REST_Server $server) {
  $endpoints = $this->get();
  foreach ($endpoints as $endpoint_slug => $endpoint) {
    register_rest_route(
      $endpoint['namespace'],
      $endpoint['route'],
      $endpoint['args']
    );
  }
}
// ... (rest of the endpoint definitions) ...

Cache de base de données

Pour améliorer les performances, les données sont mises en cache dans une table de base de données personnalisée sur le site du tableau de bord, en utilisant un modèle de base de données relationnel. Le schéma de la base de données a été initialement conçu à l'aide de DocBlocks puis affiné avec l'aide d'un LLM.

Extrait de code: Création de table de base de données SQL

async function getBlogsDetails(blogs) {
  let promises = [];
  blogs.forEach((blog, index) => {
    // ... (code for delayed fetch requests) ...
  });
  // ... (code for Promise.all and error handling) ...
}

Résultats et considérations futures

Le MVP est fonctionnel, fournissant des informations précieuses sur les modèles de trafic de blog. Les améliorations futures pourraient inclure l'utilisation d'un framework JavaScript moderne et explorer des solutions sans serveur comme AWS Lambda pour une évolutivité et des performances améliorées. L'utilisation de travaux cron pour la compilation de données préventives est également une amélioration potentielle.

Cet article donne un aperçu de haut niveau du processus de développement. Les défis et solutions spécifiques rencontrés offrent des informations précieuses aux développeurs travaillant avec des déploiements multi-multisites WordPress à grande échelle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn