Gruppenbasiertes Routing und Administration

Ein Kunde verlangt, dass eine von ihm bestellte Website ein gruppenbasiertes System zur Navigation und Verwaltung verwendet. Eeach-Gruppe repräsentiert effektiv eine Abteilung in einem Unternehmen und es wird eine relativ kleine Anzahl von Gruppen geben. Zuerst möchte ich nur erwähnen, dass das BuddyPress Plugin nicht wirklich alle Anforderungen erfüllt.

Bedarf:

  1. Jeder Gruppe ist ein Gruppenmanager zugewiesen, der Inhalte erstellen kann (Beiträge verschiedener Art)
  2. example.com/group_name würde zu einem Gruppen-Hub führen, wo es einige grundlegende Informationen über die Gruppe geben würde, ein paar generische Abfragen, die die letzten Posts für diese Gruppe laden und einige andere Dinge, die genau mit der Gruppe zusammenhängen
  3. example.com/group_name/news würde zu einer Abfrageseite führen, die die neuesten Nachrichtenbeiträge anzeigt, die von der Gruppe erstellt wurden (andere Beitragstypen hätten auch ihre Abfrageseiten)
  4. Der Gruppenmanager kann nur Beiträge für seine Gruppe erstellen und diese müssen vor der Veröffentlichung von einem Vorgesetzten überprüft werden (durch bestimmte Benutzerrollen lösbar).
  5. Beiträge sollten die URL-Struktur ” example.com/group_name/news/post_name
  6. Sie möchten auch, dass jede Gruppe ihr eigenes Menü und Logo sowie Unterseiten wie example.com/group_name/about
  7. Ich kann auch nicht wirklich WordPress Multisite-Option verwenden, weil die Homepage ist so etwas wie ein globaler Hub – dh etwas aus allen Gruppen wird dort gezogen. Das sind zum Beispiel die neuesten Nachrichten in allen Gruppen und sie müssen paginiert werden und so weiter. Es muss auch eine Seite wie example.com/news in der Sie herausfiltern können, an welcher Gruppe Sie interessiert sind etc.

Erste Ansatz:

Ich begann mit der Erstellung einer benutzerdefinierten Gruppentaxonomie:

 register_taxonomy( 'groups', ['post', 'user'], [ 'public' => 'true', 'labels' => $labels, 'hierarchical' => true, 'capabilities' => [ 'manage_terms' => 'edit_users', 'edit_terms' => 'edit_users', 'delete_terms' => 'edit_users', 'assign_terms' => 'edit_users', ] ] ); 

Dann habe ich einige grundlegende Umschreibungsregeln erstellt:

 $groups = get_terms([ 'taxonomy' => 'groups', 'hide_empty' => false ]); foreach ($groups as $group) { add_rewrite_rule($group->slug . '/?$', 'index.php?&pagename=group&groups=' . $group->slug, 'top'); } add_rewrite_rule('([^/]*)/news/?$', 'index.php?post_type=post&groups=$matches[1]' , 'top'); add_rewrite_rule('([^/]*)/news/([^/]*)/?$', 'index.php?groups=$matches[1]&name=$matches[2]&post_type=post' , 'top'); 

Und richten Sie die benutzerdefinierte Link-Erstellung ein:

 function __custom_post_link($link, $post, $leavename = true) { $terms = get_the_terms($post, 'groups'); if (!$terms) return $link; $term = $terms[0]->slug; if ($post->post_type == 'post') { $link = str_replace($post->post_name, $term .'/news/' . $post->post_name, $link); } return $link; } add_filter('post_type_link', '__custom_post_link', 10, 3); 

Aber hier habe ich aufgehört, weil ich dachte, es wäre besser, stattdessen den benutzerdefinierten post_type verwenden. Da ich einige zusätzliche Informationen auf Gruppen-Hub-Seiten anzeigen muss, werde ich wahrscheinlich einige Post-Meta-Informationen speichern müssen. Es scheint mir auch, dass es einfacher wäre, einen benutzerdefinierten Post-Typ zu verwenden, um das grundlegende Routing-Problem mit example.com/group_name zu example.com/group_name . Es sollte auch möglich sein, eine Seite als Kind für den benutzerdefinierten Beitrag festzulegen, richtig? Wenn das der Fall ist, würde das Dinge wie example.com/group_name/news auflösen.

Frage: Wenn Sie ein System erstellen, das um eine Gruppe von Gruppen mit den oben genannten Anforderungen zentriert ist, denken Sie, dass es besser ist, eine benutzerdefinierte Taxonomie oder einen benutzerdefinierten Beitragstyp zu verwenden? Oder gibt es einen noch besseren Weg?

Solutions Collecting From Web of "Gruppenbasiertes Routing und Administration"