web-dev-qa-db-fra.com

Faire une boucle avec plusieurs DB simultanément

J'ai une configuration de site Web composée de plus de 3 à 4 configurations WordPress en tant que sous-répertoires de principal. Par exemple:

Site
|
---------- Site/Site1
|
---------- Site/Site2
|
---------- Site/Site3

Chacun a une base de code séparée, une base de données séparée pour elle-même. Le serveur de base de données est un et le répertoire de l'hôte est également un. Fondamentalement, nous pouvons dire que ce sont les miroirs de la même configuration que les sous-répertoires du site principal.

Maintenant, je veux savoir: comment puis-je exécuter une boucle dans la page d'accueil du site parent "Site" qui va chercher et inclure les messages de "Site1", "Site2", "Site3"?

Remarque:

- Je ne peux pas en faire une configuration multisite car le code est déjà complexe et complexe.

- Les tables à l'intérieur de chaque DB ont le même préfixe.

- Pour une meilleure compréhension de la situation d'installation, j'ai joint une image ici.Setup with DB

1
Subharanjan

Au nom des mauvaises pratiques, je vous conseille de les éliminer immédiatement à l'aide de requêtes SQL brutes avec des bases de données distantes dans la même page. Ce serait lent, peu sûr et difficile à maintenir.

Le fait que vous vous soyez retrouvé dans une situation délicate où une combinaison d'hyperDB + multisite n'est pas une option démontre que vous êtes confronté à de sérieux problèmes d'architecture dans votre code. L'exclusion du refactoring et de la normalisation de votre code n'est pas une option car même si vous obtenez une réponse appropriée à votre question, il sera toujours nécessaire de sinon vous passerez plus de temps dans les coûts de support et de maintenance que pour réparer les choses.

Cela dit, vous avez posé une question. Voici des solutions potentielles.

Gardez à l'esprit que ces critères augmenteront les coûts et réduiront considérablement l'évolutivité:

  • Insister pour avoir plusieurs publications de plusieurs sites dans la même boucle
  • Publication instantanée sur le site principal

Alors, voici quelques façons de l'essayer:

  • Utilisez RSS pour récupérer des publications via WP-Cron. Générez le code HTML pour ces publications et enregistrez-le dans un fichier transitoire. Récupérez les messages à la date d'expiration. Affichez le contenu du transitoire sur le frontend.
  • Publier/mettre à jour les publications sur le site principal à partir des sous-sites, à l'aide de XML-RPC
  • iframes (c'est une façon horrible de le faire, je le mentionne ici pour être complet et le déconseille vivement)
  • Utilisez un plug-in d'agrégation pour récupérer les articles, puis les publier sur le site principal. Lorsque vous cliquez sur une publication, utilisez wp_redirect pour rediriger la publication d'origine sur les sous-sites.

Problèmes que je prévois avec votre configuration:

  • Vous utilisez HyperDB mais tous vos sites sont des installations séparées
  • Un site du dossier racine peut interférer avec ceux des sous-dossiers lorsque vous commencez à utiliser des règles de réécriture.
  • / site/peut ne pas être une bonne idée car site est un mot clé réservé en interne. Cela nécessitera des tests.
  • Dans votre exemple, vous vous retrouveriez avec 4 noms d'utilisateur et mots de passe par personne. Essayer de les fusionner sans multisite va être douloureux.
  • Répertorier les publications de site1 séparément du site 2 dans le site principal seront beaucoup plus rapides et plus faciles que de mélanger les deux, et seront mieux dimensionnées.
  • Avoir différentes versions et configurations du même code sur 4 instances sur le même serveur et le même domaine va s'effondrer à un moment donné. Le fait qu’ils ne puissent pas être fusionnés dans une base de code commune avec des thèmes enfants et des plugins distincts pour les composants spécialisés est le signe d’une mauvaise architecture.
3
Tom J Nowell