recherche
Maisoninterface Webtutoriel CSSWordPress Multi-multisite: une étude de cas

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
Style CSS de niveau supérieur pour les curseursStyle CSS de niveau supérieur pour les curseursApr 23, 2025 am 11:04 AM

Les curseurs personnalisés avec CSS sont excellents, mais nous pouvons faire passer les choses au niveau supérieur avec JavaScript. À l'aide de JavaScript, nous pouvons passer entre les états du curseur, placer du texte dynamique dans le curseur, appliquer des animations complexes et appliquer des filtres.

Worlds Collide: Détection de collision de l'ordre clé à l'aide de requêtes de styleWorlds Collide: Détection de collision de l'ordre clé à l'aide de requêtes de styleApr 23, 2025 am 10:42 AM

Les animations CSS interactives avec des éléments se ricochent semblent plus plausibles en 2025. Bien qu'il soit inutile de mettre en œuvre Pong dans CSS, la flexibilité et la puissance croissantes de CSS renforcent le soupçon de Lee selon lequel un jour, ce sera un jour

Utilisation du filtre de fond CSS pour les effets d'interface utilisateurUtilisation du filtre de fond CSS pour les effets d'interface utilisateurApr 23, 2025 am 10:20 AM

Conseils et astuces sur l'utilisation de la propriété CSS Back-Filter pour styliser les interfaces utilisateur. Vous apprendrez à superposer des filtres en toile de fond entre plusieurs éléments et à les intégrer à d'autres effets graphiques CSS pour créer des conceptions élaborées.

Smil sur?Smil sur?Apr 23, 2025 am 09:57 AM

Eh bien, il s'avère que les fonctionnalités d'animation intégrées de SVG n'ont jamais été obsolètes comme prévu. Bien sûr, CSS et JavaScript sont plus que capables de porter la charge, mais il est bon de savoir que Smil n'est pas mort dans l'eau comme précédemment

'Pretty' est dans l'œil du spectateur'Pretty' est dans l'œil du spectateurApr 23, 2025 am 09:40 AM

Yay, laissez-le saut pour le wat-wrap: joli atterrissage dans la technologie safari aperçu! Mais méfiez-vous qu'il est différent de la façon dont il fonctionne dans les navigateurs de chrome.

CSS-Tricks raconte xliiiCSS-Tricks raconte xliiiApr 23, 2025 am 09:35 AM

Cette mise à jour de CSS-Tricks met en évidence des progrès significatifs dans l'Almanac, des apparitions de podcast récentes, un nouveau guide CSS Counter et l'ajout de plusieurs nouveaux auteurs contribuant un contenu précieux.

La fonctionnalité @Apply de Tailwind est meilleure qu'il n'y paraîtLa fonctionnalité @Apply de Tailwind est meilleure qu'il n'y paraîtApr 23, 2025 am 09:23 AM

La plupart du temps, les gens présentent la fonctionnalité de Tailwind avec l'un des utilitaires à propriété unique de Tailwind (qui modifie une seule déclaration CSS). Lorsqu'il est présenté de cette façon, @Apply ne semble pas du tout prometteur. So évidence

Se sentir comme je n'ai pas de libération: un voyage vers les déploiements sainsSe sentir comme je n'ai pas de libération: un voyage vers les déploiements sainsApr 23, 2025 am 09:19 AM

Le déploiement comme un idiot se résume à un décalage entre les outils que vous utilisez pour déployer et la récompense en complexité réduite par rapport à la complexité ajoutée.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

Version Mac de WebStorm

Version Mac de WebStorm

Outils de développement JavaScript utiles