web-dev-qa-db-fra.com

Stratégie Mini-Site

Je travaille sur un projet visant à autoriser plusieurs mini-sites dans une installation multisite WordPress. Voici comment est supposé fonctionner:

Le client dispose d'un grand nombre d'emplacements individuels, chacun possédant son propre site Web. Tous ces sites Web sont des sites d’un grand réseau WordPress permettant une maintenance centralisée des utilisateurs et des sites. Cette partie fonctionne déjà.

Mais chaque site a un nombre quelconque de clients et veut que chaque client ait son propre "mini-site" au sein du réseau. Il s’agit essentiellement d’un nouveau site WordPress, mais situé sous le site, l’URL et la liste des administrateurs.

Les utilisateurs du mini-site ne devraient pouvoir utiliser que ce mini-site, pas le site parent, ni aucun autre site du réseau.

Pendant que j'y travaillais, j'ai trouvé deux façons différentes de le configurer. Les deux sont un peu complexes:

Installation multi-réseau

WordPress vous permet d'installer plusieurs réseaux autonomes avec une base de code. C'est comme multisite, mais sur les stéroïdes. Ma première tentative pour résoudre le problème ci-dessus a été d'enterrer un tas de fonctionnalités multi-réseaux dans le système. Lorsque vous avez ajouté un nouveau mini-site client, vous ajoutiez en fait un nouveau site à un réseau "appartenant" au site parent.

Cette à moitié travaillé. Vous pourriez très bien créer les sites, mais sans un contrôle plus approfondi du serveur (mon client a demandé un plug-in, quelque chose qu'il peut déposer sur le serveur sans avoir besoin de me donner un accès SSH), il était difficile de faire fonctionner le routage dans Apache. Certains des nouveaux mini-sites seraient chargés, d'autres 404, d'autres seraient redirigés vers le site parent.

L'autre problème était la gestion. Bien que vous puissiez créer autant de mini-sites que vous le souhaitez (et que vous puissiez vérifier via phpMyAdmin qu'ils existent), j'ai eu du mal à vous relire une liste des sites disponibles.

L'autre problème était la gestion de la base de données. Chaque fois que vous créez un nouveau site, vous créez plus de 10 nouvelles tables dans la base de données. Si le site ne compte jamais qu'1 ou 2 articles/pages, c'est exagéré.

Type de message personnalisé avec substitution de thème

Ma nouvelle approche consiste à configurer les clients en tant que type de publication personnalisé. Ensuite, les utilisateurs du site parent peuvent écrire de nouvelles publications et vérifier un champ dans une méta-boîte pour associer le contenu à un client (à l'aide d'un schéma de relation post-à-post).

Lorsque vous visitez la page du type de message personnalisé, WordPress remplace l'affichage et présente un thème personnalisé (un mod de P2) affichant les messages associés au type de message personnalisé.

Pas autant de problèmes d'évolutivité ici, juste en matière de gestion de contenu. Je n'ai pas encore trouvé de moyen d'autoriser le filtrage du contenu d'un client à un autre (rappelez-vous que le contenu est associé à un CPT basé sur un méta-champ. Par conséquent, à moins de construire un autre écran de gestion de publication, il est difficile d'afficher "tout messages pour client-x ").

Ma question: Laquelle de ces approches est la meilleure? Y a-t-il une autre approche que je devrais envisager qui pourrait être plus facile pour l'utilisateur final?

6
EAMann

Il me semble que vous compliquez les choses plus que nécessaire. Vous avez déjà l'auteur/utilisateur en tant que client - pas besoin de créer un autre concept pour le représenter.

Exigences:

réseau wp où chaque sous-site compte de nombreux utilisateurs (clients) Chaque client souhaite disposer d'une page unique qu'il peut modifier et contrôler. (Une seule page? Pas de messages?)

donc leur url est quelque chose comme:

network.com/minisite/clients/clientx (sous-dossier)

ou

minisite.network.com/clients/clientx (sous-domaine)

Comment faire:

Utilisez un plugin membre/rôle comme le plugin membre gratuit Justin Tadlocks pour créer un rôle client personnalisé avec la possibilité d’éditer une page, mais pas de créer des publications, etc. (ou avec php).

Lors de l'enregistrement du client, ajoutez une action sur 'user_register':

  1. créez une sous-page client 'clientx' sous 'clients' avec le client x, le nom de l'auteur pouvant être basé sur les informations saisies ou utilisez un champ d'enregistrement personnalisé pour lui demander ce qu'il veut que le nom soit.

Ajouter des actions/filtres (peut-être regarder dans le code wp pour trouver les meilleurs hooks)

  1. supprimer add_new du menu (google wordpress remove menu - je l’ai déjà fait, je ne me souviens plus de quelle action)
  2. vérifier si 1 page déjà créée, ne permet pas plus (au cas où ils trouveraient un moyen même avec le menu (WP je ne pense pas qu'il ait une capacité de création de page distincte de la page d'édition, mais elle peut venir voir http: //core.trac.wordpress.org/ticket/16714
  3. s'assurer que tout le monde ne peut voir que ses propres pages à partir de la liste des pages d'édition

Possiblement (s'il doit y avoir un modèle standard pour les pages client):

  1. assurez-vous que les pages créées automatiquement ont un modèle client qui ajoute peut-être leurs détails à partir de leur profil, etc. Vous pouvez même utiliser une variété de modèles qu'ils pourraient utiliser dans la liste déroulante des pages d'édition pour leur offrir un choix de présentation des détails avec le contenu qu'ils entrent dans

Mon intérêt:

Je pense faire quelque chose comme ça moi-même et pourrait en faire un plugin, si intéressant d'entendre les différentes exigences que les gens peuvent avoir.

Je pense que l'approche ci-dessus le garderait assez propre et simple (toujours une bonne idée).

0
anmari