Dynamische Homepage nach Benutzerrolle

Ich habe eine WordPress-Website-Beratung entwickelt und ich habe eine andere Benutzerrolle

und ich möchte unterschiedliche Inhalte je nach Benutzerrolle haben

ich habe also eine landing page mit authentification und entsprechend der user rolle login ist die homepage anders

also ich würde gerne sagen, ob plugins, die sowas machen, existieren oder ob das für code codieren kann

Also rekapitulieren:

Die Startseite für Nicht-Login ist die Startseite der Startseite für die Benutzeranmeldung ist je nach Benutzerrolle unterschiedlich

Vielen Dank !

Solutions Collecting From Web of "Dynamische Homepage nach Benutzerrolle"

Um den Inhalt einer anderen Seite basierend auf der Rolle eines angemeldeten Benutzers auf der Startseite zu verwenden, können Sie Folgendes tun:

Fügen Sie in Ihrer functions.php Datei diesen Code hinzu:

function wpse_273872_pre_get_posts( $query ) { if ( $query->is_main_query() && is_user_logged_in() ) { //work-around for using is_front_page() in pre_get_posts //known bug in WP tracked by https://core.trac.wordpress.org/ticket/21790 $front_page_id = get_option('page_on_front'); $current_page_id = $query->get('page_id'); $is_static_front_page = 'page' == get_option('show_on_front'); if ($is_static_front_page && $front_page_id == $current_page_id) { $current_user = wp_get_current_user(); $user = new WP_User($current_user->ID); if (in_array('cs_candidate', $user->roles)) { //assuming the role name is cs_candidate $query->set('page_id', [page-id-for-candidate-homepage]); } elseif (in_array('cs_employer', $user->roles)) { //assuming the role name is cs_employer $query->set('page_id', [page-id-for-employer-homepage]); } } } } add_action( 'pre_get_posts', 'wpse_273872_pre_get_posts' ); 

Was das ist ist:

  1. Filtert die wp_query-Argumente, wenn ein Benutzer angemeldet ist. Sie befinden sich auf der Startseite und es handelt sich um die Hauptabfrage
  2. Wenn der Benutzer die Rolle “Kandidat” hat, setzen Sie die Post-ID (p) auf die ID der von Ihnen erstellten Seite und ändern Sie den Post-Typ auf “Seite”.
  3. Wenn der Benutzer eine Rolle als Arbeitgeber hat, verwenden Sie die ID für diese Seite.

Danke, dass du geholfen hast, alle deine Punkte zu klären.

Zwei Möglichkeiten kommen mir in den Sinn. Welche davon hängt davon ab, wie unterschiedlich Ihr Inhalt für eingeloggte / nicht eingeloggte ist.

1) Die erste, Sie können nur IF-statementen auf der Homepage Vorlage verwenden.

 $current_user = wp_get_current_user(); $user = new WP_User( $current_user ->ID); if($user && in_array('my-role', $user->roles)){ //stuff specific to users with 'my-role' } . . . else{ //stuff for non logged in users or ones that don't match any of your roles } 

2) Die zweite Option besteht darin, die Vorlage basierend auf ihrer Rolle zu filtern. Sie können den template_include Filter verwenden. Siehe die Beispiele im Codex: https://codex.wordpress.org/Plugin_API/Filter_Reference/template_include . Mit dieser Option können Sie mehrere Vorlagen für verschiedene Benutzer verwenden und dynamisch eine andere Vorlage verwenden, wenn Sie mit einer Vorlagenbenennungskonvention konsistent bleiben.

Hoffentlich hilft das. Je nachdem, welche Option Sie wählen, kann ich Ihnen helfen, detailliertere Codebeispiele zu erstellen.

AKTUALISIERT

Basierend auf den Informationen in Ihren Kommentaren finden Sie hier ein Beispiel mit dem Filter-Hook template_include . Sie können dies in Ihre functions.php einfügen. Nicht getesteter Code:

 function wpse_273872_template_include($template) { //if user is not logged in, just return and show the default homepage if(!is_user_logged_in()) return $template; $new_template = ''; $current_user = wp_get_current_user(); $user = new WP_User( $current_user->ID); if(in_array('candidate', $user->roles)){ //assuming the role name is candidate $new_template = locate_template( array( 'homepage-candidate.php' ) ); } elseif(in_array('company', $user->roles)){ //assuming the role name is company $new_template = locate_template( array( 'homepage-company.php' ) ); } if ( '' != $new_template ) { $template = $new_template; } return $template; } add_filter( 'template_include', 'wpse_273872_template_include' ); 

Die homepage-candidate.php und homepage-company.php sind Vorlagendateien, die sich im Ordner Ihres Themes befinden. Hier ist ein Beispiel für die Dateistruktur:

 - my-custom-theme |- style.css |- functions.php |- frontpage.php |- homepage-candidate.php |- homepage-company.php 

Ich habe meine Seite direkt in WordPress wie folgt erstellen Bildbeschreibung hier eingeben

also habe ich jetzt nur eine homepage in meiner Dateivorlage call index.php

und meine 2 Seite ist nicht in dieser Datei