web-dev-qa-db-fra.com

switch_to_blog () Considérations sur les performances et alternatives

Je suis actuellement en phase de conception pour un réseau multisite.

L'idée générale est la suivante: il existe plusieurs sites en réseau et tous publient leurs propres publications. L'administrateur réseau est en mesure d'établir des "liens de contenu" entre chacun des blogs. Un "lien de contenu" signifie que l’administrateur peut configurer le partage de messages entre les blogs du backend. Soit simple (-->), soit dans les deux sens (<->). Cela se traduit par les pages de liste d'un blog montrant également les messages d'autres blogs.

Par exemple, si nous avons trois blogs, les "liens de contenu" pourraient être configurés comme suit:

A<->B

A->C

Cela se traduirait par:

Aaffiche également le contenu deB

Baffiche également le contenu deA

Caffiche également le contenu deAet deB(par le biais de la relation d'ascendanceB->A- >C)

Personnellement, j'aimerais rester avec WP_Query (), car j'aime bien les fonctionnalités que j'obtiendrai:

  • support de pagination,
  • requêtes taxonomiques,
  • requêtes post_meta.

Mais il me semble que je suis obligé d'utiliser massivement switch_to_blog () si je veux utiliser WP_Query (). Le système doit être aménagé pour env. 100 blogs avec 200 messages chacun, ce qui signifie que, dans le pire des cas, je dois utiliser 99 appels à switch_to_blog () pour afficher une seule page de liste/catégorie de messages.

Quelqu'un a-t-il déjà fait un partage de contenu massif entre blogs en réseau ou a-t-il une idée de la façon de réaliser une performance décente pour cette tâche?

4
s1lv3r

Vous devriez d'abord lire (c'est moi qui souligne):

Les sites d'un réseau multisitesont séparés, très semblables aux blogs séparés de WordPress.com. Ils sontnon interconnectéscomme dans d’autres types de réseaux (même si les plugins peuvent créer différents types d’interconnexions entre les sites).Si vous envisagez de créer des sites fortement interconnectés, partageant des données ou des utilisateurs, un réseau multisite pourrait ne pas être la meilleure solution.

http://codex.wordpress.org/Before_You_Create_A_Network

Si vous insistez pour que le multisite fasse ce qu'il n'est pas prévu, et que vous fassiez ce que la plupart des gens semblent vouloir faire, alors vous avez beaucoup de travail à faire. Vous devriez pouvoir obtenir WP_Query pour honorer vos commutateurs de site via ses nombreux filtres , en particulier ceux-ci . Et certaines fonctions exécutent leurs propres requêtes , vous devrez donc les traiter individuellement.

Il semble que le multisite ne soit pas la bonne approche. Lorsque j'ai besoin de quelque chose comme ça, j'ai tendance à le faire avec des types de publication personnalisés. Vous créeriez un CPT pour chaque "blog", bien que je dois avouer que je n'ai jamais essayé de créer 100 CPT sur le même site. Le total des publications brutes (20 000) ne devrait toutefois pas poser de problème. Avec une utilisation intelligente des modèles, vous pouvez "virtualiser" ceux-ci dans des sites visuellement presque indépendants.

Compte tenu de votre commentaire ci-dessous selon lequel vous avez besoin de "mappage de domaine, de bases d'utilisateurs distinctes et de zones d'administration distinctes", je ne suis pas certain que cela fonctionnera. Vous pourriez probablement faire fonctionner le mappage de domaine, mais les bases utilisateur et les domaines d’administration séparés représenteraient beaucoup de travail. C’est l’une des seules autres options auxquelles je puisse penser.

2
s_ha_dum