Wenn der Benutzer angemeldet ist, wird nur eine bestimmte Seite angezeigt

Ich habe diese WordPress-Site, die ich mache, wo ein Benutzer sich anmelden muss, um ihre spezifische Galerie zu sehen. Mein Problem ist, dass alle unsere Benutzer Mitglieder sind und alle Mitglieder alle anderen Mitgliedsseiten sehen können. Es ist schwer zu erklären, also werde ich euch mit dem verbinden, was ich habe.

Sobald dieser Client angemeldet ist und Sie den Mauszeiger über “Mitglieder”> “Mitgliederseite” bewegen, können Sie die Galerien der anderen Clients sehen, obwohl beide Passwörter benötigen. Wie verstecke ich alle anderen Seiten? Ich dachte darüber nach, Seitentitel mit dem Namen des Kunden identisch zu machen, aber das könnte zu viel Unannehmlichkeit sein. Irgendwelche Vorschläge oder Hilfe zu diesem Thema?

  • Ich dachte, dass der Vergleich von userID mit galleryID funktionieren würde, aber nur in einer perfekten Welt. 1 Missgeschick und der ganze Vergleich wäre aus.

  • Ich dachte dann, Titel mit Benutzernamen zu vergleichen, aber die Wahrscheinlichkeit eines Rechtschreiberrorss ist zu groß und ich habe ein Gefühl, das viel Frustration verursachen würde.

Solutions Collecting From Web of "Wenn der Benutzer angemeldet ist, wird nur eine bestimmte Seite angezeigt"

Große Frage.

Also, um die Galerien getrennt zu halten, wäre es gut, ihnen einen eigenen benutzerdefinierten Post-Typ zu geben. Wir werden später nachsehen …

< ?php add_action( 'init', 'wpse32840_register_post_type' ); function wpse32840_register_post_type() { register_post_type( 'client_gallery', array( 'label' => __( 'Client Galleries' ), // probably needs better lables 'public' => true, // allow people to see this on the front end 'exclude_from_search' => true, // cant be brought up via a search 'show_in_nav_menus' => false, // not in nav menus (we'll do this manually) 'rewrite' => array( 'slug' => 'gallery' ) ) ); } 

Um eine Galerie für jeden Benutzer zu erstellen, haken Sie sich in user_register und fügen Sie einen neuen client_gallery Beitrag ein. Setzen Sie dann einen usermeta Wert mit der Post-ID. Wir können das später für viele Dinge verwenden. Es ist auch zuverlässiger als die Suche nach dem Autor oder der Post-Slug usw.

 < ?php add_action( 'user_register', 'wpse32840_capture_register' ); function wpse32840_capture_register( $user_id ) { $userobj = get_user_by( 'id', $user_id ); $gallery_id = wp_insert_post( array( 'post_type' => 'client_gallery', 'post_title' => sprintf( '%s gallery', $userobj->user_login ) ), true ); if( is_wp_error( $gallery_id ) ) $gallery_id = 0; update_user_meta( $user_id, 'wpse32840_gallery_id', absint( $gallery_id ) ); } 

Sie sollten auch in der Lage sein, die Galerie im Admin-Bereich zu ändern. edit_user_profile also in edit_user_profile , um ein Dropdown- edit_user_profile hinzuzufügen, um die Galerie des Benutzers zu ändern. edit_user_profile_update auf, um die neue ID zu speichern, wenn sie aktualisiert wird.

 < ?php add_action( 'edit_user_profile', 'wpse32840_user_profile' ); function wpse32840_user_profile( $user ) { $gallery_id = get_user_meta( $user->ID, 'wpse32840_gallery_id', true ); // get all of our galleries! $galleries = get_posts( array( 'post_type' => 'client_gallery', 'numberposts' => -1, 'post_status' => 'any' ) ); // no galleries? bail. if( ! $galleries ) return; // nonce wp_nonce_field( 'wpse32840_nonce', 'wpse32840_nonce', false ); // our fields echo '

' . __( 'Gallery' ) . '

'; echo ''; } /** * Save the user's gallery ID from the user edit page. */ add_action( 'edit_user_profile_update', 'wpse32840_save_user' ); function wpse32840_save_user( $user_id ) { if( ! isset( $_POST['wpse32840_nonce'] ) || ! wp_verify_nonce( $_POST['wpse32840_nonce'], 'wpse32840_nonce' ) ) return; if( ! isset( $_POST['wpse32840_gallery' ] ) ) return; update_user_meta( $user_id, 'wpse32840_gallery_id', absint( $_POST['wpse32840_gallery'] ) ); }

Als nächstes haken Sie sich in template_redirect und halten normale Benutzer davon ab, diese client_gallery Seiten zu besuchen. Hier können Sie auch den aktuellen Benutzer und die entsprechende Galerie abrufen. Wenn der angezeigte Post nicht mit ihrer Galerie übereinstimmt, casting Sie sie zurück auf die Startseite.

 < ?php add_action( 'template_redirect', 'wpse32840_check_user' ); function wpse32840_check_user() { // not on a client gallery? bail if( ! is_singular( 'client_gallery' ) ) return; // is the is an admin? if( current_user_can( 'manage_options' ) ) return; // thrown non logged in users back to the home page if( ! is_user_logged_in() ) { wp_redirect( home_url(), 302 ); exit(); } $user = wp_get_current_user(); $gallery_id = get_queried_object_id(); // if the user isn't an admin or isn't assigned this gallery, send them back to the home page if( $gallery_id != get_user_meta( $user->ID, 'wpse32840_gallery_id', true ) ) { wp_redirect( home_url(), 302 ); exit(); } // By here, the user is authenticated, let them continue on their merry way. } 

Und schließlich, was du wirklich wissen wolltest!

Zuletzt können Sie in wp_nav_menu_items , um die Ausgabe eines bestimmten Menüs zu ändern. Dies ist ein sehr einfaches Beispiel, das nur einen Home-Link und den Galerie-Link zurückgibt, wenn der Benutzer angemeldet ist. Sie können hier ein eigenes Menü für eingeloggte Benutzer erstellen oder es einfach halten.

 < ?php add_filter( 'wp_nav_menu_items', 'wpse32840_filter_nav', 10, 2 ); function wpse32840_filter_nav( $items, $args ) { /** * you can check for theme location here via $args... check to see if this is the main nav * in twenty eleven, we can check to see if this is the "primary" menu * Other thigns will be different. If we're not in the primary menu, bail */ if( 'primary' != $args->theme_location ) return $menu; // Not logged in? return the menu if( ! is_user_logged_in() ) return $items; // if this is an admin, return the menu unaltered. if( current_user_can( 'manage_options' ) ) return $items; // our user is logged in an not an admin, build them a new menu // get our current user $user = wp_get_current_user(); // get the users gallery $gallery_id = get_user_meta( $user->ID, 'wpse32840_gallery_id', true ); $gallery = get_post( absint( $gallery_id ) ); $items = ''; $items .= ''; return $items; } 

Hier ist das ganze Chaos als Plugin .

Sie könnten einfach wp_get_current_user () verwenden und gegen den Autor des Beitrags prüfen oder sogar ein Post-Meta für die Benutzer-IDs festlegen, die diesen bestimmten Beitrag anzeigen dürfen und gegen diesen prüfen.