So erstellen Sie ein Front-End-Benutzerprofil mit einem freundlichen Permalink

Ich möchte eine öffentliche Front-End-Profilseite mit einer freundlichen URL wie dieses Format erstellen.

mysite.com/user/someusername 

Irgendeine Idee, wie kann ich das erreichen? Ich weiß, dass es etwas mit der Rewrite-Regel zu tun hat, aber ich habe keine Ahnung, wie ich das machen kann. Wenn Sie einen Link oder ein Tutorial für mich haben, wird das großartig.

Vielen Dank!

Solutions Collecting From Web of "So erstellen Sie ein Front-End-Benutzerprofil mit einem freundlichen Permalink"

Es gibt zwei Möglichkeiten, die ich entdeckt habe:

  1. Author-Seite mit einer benutzerdefinierten Rewrite-Regel
  2. Eine benutzerdefinierte Vorlagendatei, die mit einer Regel zum erneuten Schreiben gepaart ist

Die erste ist einfacher zu implementieren, funktioniert aber möglicherweise nicht unter allen Umständen (von denen ich bald berichten werde).

Benutzerdefinierte Rewrite-Regel

Ich habe diese Lösung vor ein paar Tagen hier gefunden: URL Rewriting

Und hier ist der Code mit Kommentaren:

 // Define the author levels you want to use $custom_author_levels = array( 'user', 'leader' ); // On init, add a new author_level rewrite tag and add it to the author_base property of wp_rewrite add_action( 'init', 'wpleet_init' ); function wpleet_init() { global $wp_rewrite; $author_levels = $GLOBALS['custom_author_levels']; // Define the tag and use it in the rewrite rule add_rewrite_tag( '%author_level%', '(' . implode( '|', $author_levels ) . ')' ); $wp_rewrite->author_base = '%author_level%'; } // The previous function creates extra author_name rewrite rules that are unnecessary. //This function tests for and removes them add_filter( 'author_rewrite_rules', 'wpleet_author_rewrite_rules' ); function wpleet_author_rewrite_rules( $author_rewrite_rules ) { foreach ( $author_rewrite_rules as $pattern => $substitution ) { if ( FALSE === strpos( $substitution, 'author_name' ) ) { unset( $author_rewrite_rules[$pattern] ); } } return $author_rewrite_rules; } 

Sie können dann die eingebaute Vorlage “author.php” verwenden, die Sie nach Herzenslust verändern können.

Mit freundlichen Grüßen, überprüfen Sie den oben genannten Link, wie Jan Fabry einen ausgezeichneten Job macht, alles zu erklären.

Query Vars und Seitenvorlagen

Für das Thema, an dem ich arbeitete, während ich diese Lösungen entdeckte, musste ich eine benutzerdefinierte Seite basierend auf einem Benutzer-Metawert (eine separate ID) bereitstellen. Mein Client wollte nicht, dass der Benutzername oder die Benutzer-ID öffentlich sichtbar war. Daher haben wir eine separate Ebene erstellt.

Das einzige Problem? Im Moment gibt es keinen klaren Weg, wie die Rewrite-API zur Abfrage nach Metaschlüsseln / -werten verwendet werden kann. Zum Glück gab es eine Lösung.

In deiner functions.php Datei …

 // Create the query var so that WP catches your custom /user/username url add_filter( 'query_vars', 'wpleet_rewrite_add_var' ); function wpleet_rewrite_add_var( $vars ) { $vars[] = 'user'; return $vars; } 

Und dann müssen Sie ein neues Rewrite-Tag und eine neue Regel erstellen, damit es weiß, wann und wie mit der neuen Abfrage var umzugehen ist.

 add_rewrite_tag( '%user%', '([^&]+)' ); add_rewrite_rule( '^user/([^/]*)/?', 'index.php?user=$matches[1]', 'top' ); 

Sobald Sie dies getan haben, müssen Sie lediglich “fangen”, wenn die Abfrage var geliefert wird, und dann zu der Vorlage Ihrer Wahl redirect:

 add_action( 'template_redirect', 'wpleet_rewrite_catch' ); function wpleet_rewrite_catch() { global $wp_query; if ( array_key_exists( 'user', $wp_query->query_vars ) ) { include (TEMPLATEPATH . '/user-profile.php'); exit; } } 

Stellen Sie sicher, dass Sie user-profile.php erstellt haben.

In meinem eigenen Beispiel habe ich eine dritte function erstellt, die über die Tabelle $ wpdb-> usermeta der tatsächlichen Benutzer-ID mit der tatsächlichen Benutzer-ID übereinstimmte und die Informationen an die Vorlage übergab.

Wenn Sie eine Vorlage erstellen möchten, die sich vom Rest Ihres Designs unterscheidet, denken Sie daran, dass Sie mit get_header einen Namen angeben können:

 get_header( 'user' ); 

Dies wird die Datei header-user.php aufrufen.

Fazit

Beides sind gültige, funktionierende Lösungen. Die zweite bietet eine separate Ebene der “Sicherheit”, da sie keine Benutzer-IDs oder Benutzernamen anzeigt, wenn andere Personen die Profile durchsuchen können.

Hoffe, dass hilft, lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

Ich habe das heute früher gefunden und einige Änderungen am @bybloggers-Code mit dem Unterschied vorgenommen, dass ich anstelle von template_redirect die Anfrage so ändere, dass eine statische Seite angezeigt wird. Das bedeutet, dass Sie nun einer Seitenvorlage alles hinzufügen können, was Sie möchten Seite.

 class ProfilePage { function __construct() { add_filter( 'init',array($this,'rw_init')); add_filter( 'query_vars', array($this,'wpleet_rewrite_add_var') ); add_filter( 'request', array($this,'change_requests')); } function wpleet_rewrite_add_var( $vars ) { $vars[] = 'usuario'; return $vars; } function rw_init(){ add_rewrite_tag( '%usuario%', '([^&]+)' ); add_rewrite_rule( '^usuario/([^/]*)/?', 'index.php?usuario=$matches[1]', 'top' ); } function change_requests($query_vars) { //go to a specific page when the usuario key is set $query_vars['page_id'] = isset($query_vars['usuario']) ? 7581 : $query_vars['page_id']; return $query_vars; } } new ProfilePage(); 

Spanisch -> usuario = Benutzer < - Englisch

Dies ist mein Arbeitscode basierend auf @bybloggers Antwort (danke übrigens) Ich lerne nur, dass wir template_redirect hook nicht verwenden sollten und dann php beenden, weil einige Dinge aufhören können zu arbeiten, weil die abrupte Unterbrechung von PHP Code ausführt.

Die Erklärung ist hier: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/

Also sollten wir den template_include-Hook verwenden. Mit diesem Hook müssen Sie nicht die Redirect- und Exit-Methode verwenden.

Und der andere Unterschied ist, dass ich nur http://www.server.com/myaccount ohne die / userid benötigte.

Dies ist der Code:

 add_filter( 'query_vars', 'wp58683_userprofile_var' ); function wp58683_userprofile_var( $vars ) { $vars[] = 'myprofile'; return $vars; } add_rewrite_tag( '%myprofile%', '([^&]+)' ); add_rewrite_rule( '^myprofile/?', 'index.php?myprofile', 'top' ); add_action( 'template_include', 'wp58683_userprofile_page' ); function wp58683_userprofile_page($original_template) { global $wp_query; if ( array_key_exists( 'myprofile', $wp_query->query_vars ) ) { if (is_user_logged_in() ){ return TEMPLATEPATH . '/user-profile.php'; } } else { return $original_template; } } 

Eine andere Möglichkeit besteht darin, Buddypress zu verwenden, die diese function eingebaut haben, selbst wenn das Plugin noch mehr functionalität hat, die möglicherweise nicht von Interesse ist.

http://wordpress.org/extend/plugins/buddypress/