Ada dua cara yang saya temukan dalam melakukan ini:
- Halaman Pembuat dengan aturan penulisan ulang kustom
- File template khusus dipasangkan dengan aturan penulisan ulang
Yang pertama lebih mudah diterapkan, tetapi mungkin tidak berfungsi dalam semua keadaan (salah satunya akan saya jelaskan segera).
Aturan Penulisan Ulang Kustom
Saya menemukan solusi ini beberapa hari yang lalu di sini: Penulisan Ulang URL
Dan ini kodenya, dengan komentar:
// 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;
}
Anda kemudian dapat menggunakan templat author.php bawaan, memodifikasi konten hati Anda.
Hormat kami, periksa tautan yang tercantum di atas, karena Jan Fabry melakukan pekerjaan yang sangat baik untuk menjelaskan semuanya.
Vektor Kueri dan Templat Halaman
Untuk tema yang sedang saya kerjakan saat menemukan solusi ini, saya perlu menyajikan halaman khusus berdasarkan nilai meta pengguna (ID terpisah). Klien saya tidak ingin nama pengguna atau ID pengguna terlihat secara publik, jadi kami membuat layer terpisah.
Satu-satunya masalah? Saat ini, tidak ada cara yang jelas bagaimana menggunakan API Rewrite untuk melakukan kueri dengan kunci / nilai meta. Untungnya, ada solusinya.
Di file functions.php Anda ...
// 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;
}
Dan kemudian, Anda perlu membuat tag dan aturan penulisan ulang baru sehingga tahu kapan dan bagaimana menangani var permintaan baru.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Setelah Anda melakukan ini, Anda hanya perlu "menangkap" ketika var permintaan disajikan, dan kemudian mengarahkan ulang ke templat pilihan Anda:
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;
}
}
Pastikan Anda telah membuat user-profile.php.
Dalam contoh saya sendiri, saya membuat fungsi ketiga yang cocok dengan "ID pengguna publik" dengan user_id aktual melalui tabel $ wpdb-> usermeta, dan meneruskan informasi ke templat.
Jika Anda perlu membuat templat yang berbeda dari sisa tema Anda, ingat bahwa dengan get_header, Anda dapat menentukan nama:
get_header( 'user' );
Yang akan memanggil file header-user.php.
Kesimpulan
Keduanya adalah solusi yang valid dan berfungsi. Yang kedua menawarkan lapisan "keamanan" yang terpisah karena tidak mengungkapkan ID pengguna atau nama pengguna, jika orang lain akan dapat menelusuri profil.
Semoga itu bisa membantu, beri tahu saya jika Anda memiliki pertanyaan.