Dabei habe ich zwei Möglichkeiten entdeckt:
- Autorenseite mit einer benutzerdefinierten Umschreiberegel
- Eine benutzerdefinierte Vorlagendatei gepaart mit einer Umschreiberegel
Die erste ist einfacher zu implementieren, funktioniert jedoch möglicherweise nicht unter allen Umständen (eine davon werde ich bald beschreiben).
Benutzerdefinierte Umschreiberegel
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 und den Inhalt nach Herzenslust ändern.
Mit freundlichen Grüßen, überprüfen Sie den oben aufgeführten Link, da Jan Fabry eine hervorragende Arbeit leistet, um alles zu erklären.
Abfragevariablen und Seitenvorlagen
Für das Thema, an dem ich bei der Suche nach diesen Lösungen gearbeitet habe, musste eine benutzerdefinierte Seite bereitgestellt werden, die auf einem Benutzer-Metawert (einer separaten ID) basierte. Mein Kunde wollte nicht, dass der Benutzername oder die Benutzer-ID öffentlich angezeigt wird. Deshalb haben wir eine separate Ebene erstellt.
Das einzige Problem? Derzeit ist nicht klar, wie die Rewrite-API zum Abfragen 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;
}
Anschließend müssen Sie ein neues Umschreibetag und eine neue Regel erstellen, damit diese wissen, wann und wie mit der neuen Abfragevariable umzugehen ist.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Sobald Sie dies getan haben, müssen Sie nur noch "fangen", wenn die Abfragevariable geliefert wird, und dann zu der Vorlage Ihrer Wahl umleiten:
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 einfach sicher, dass Sie user-profile.php erstellt haben.
In meinem eigenen Beispiel habe ich eine dritte Funktion erstellt, die die "öffentliche Benutzer-ID" über die Tabelle "$ wpdb-> usermeta" mit der tatsächlichen Benutzer-ID übereinstimmt, und die Informationen an die Vorlage übergeben.
Wenn Sie eine Vorlage erstellen müssen, die sich vom Rest Ihres Themas unterscheidet, denken Sie daran, dass Sie mit get_header einen Namen angeben können:
get_header( 'user' );
Welches wird die header-user.php-Datei aufrufen.
Fazit
Beides sind gültige, funktionierende Lösungen. Die zweite Ebene bietet eine separate "Sicherheitsebene", da Benutzer-IDs oder Benutzernamen nicht angezeigt werden, wenn andere Benutzer in der Lage sind, die Profile zu durchsuchen.
Hoffe das hilft, lass es mich wissen, wenn du irgendwelche Fragen hast.
Ich habe dies heute früher gefunden und einige Änderungen am @ bybloggers-Code vorgenommen, mit dem Unterschied, dass ich anstelle von template_redirect die Anforderung so ändere, dass eine statische Seite angezeigt wird. Das bedeutet, dass Sie einer Seitenvorlage jetzt alles hinzufügen können, was Sie möchten, und diese dann verwenden können Seite.
Spanisch -> usuario = user <- Englisch
quelle
get_page_by_path('page-slug')->ID
. Vergessen Sie auch nicht die Verwendungflush_rewrite_rules
, also möchte ich hinzufügen:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Dies ist mein Arbeitscode basierend auf der Antwort von @bybloggers (danke übrigens) Ich habe gerade erfahren, dass wir template_redirect nicht verwenden und dann PHP beenden sollten, da einige Dinge möglicherweise aufgrund der abrupten Unterbrechung der Ausführung von PHP-Code nicht mehr funktionieren.
Die Erklärung finden Sie hier: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Wir sollten also den Hook template_include verwenden. Bei diesem Hook ist es nicht erforderlich, die Umleitungs- und Beendigungsmethode zu verwenden.
Und der andere Unterschied ist, dass ich nur www.server.com/myaccount ohne die / userid brauchte.
Dies ist der Code:
quelle
Eine andere Möglichkeit besteht darin, Buddypress zu verwenden, das über diese Funktion verfügt, auch wenn das Plugin über noch mehr Funktionen verfügt, die möglicherweise nicht von Interesse sind.
http://wordpress.org/extend/plugins/buddypress/
quelle