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.