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.
Saya menemukan ini sebelumnya hari ini dan membuat beberapa modificatios ke kode @bybloggers dengan perbedaan bahwa alih-alih menggunakan template_redirect saya mengubah permintaan untuk menampilkan halaman statis, itu berarti bahwa Anda sekarang dapat menambahkan apa pun yang Anda suka ke templat halaman dan menggunakannya pada itu halaman.
Spanyol -> usuario = pengguna <- Bahasa Inggris
sumber
get_page_by_path('page-slug')->ID
. Juga jangan lupa gunakanflush_rewrite_rules
, jadi saya akan menambahkan seperti:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Ini adalah kode kerja saya berdasarkan jawaban @bybloggers (terima kasih omong-omong) Saya baru belajar bahwa kita seharusnya tidak menggunakan hook template_redirect dan kemudian keluar dari php, karena beberapa hal mungkin berhenti bekerja karena gangguan mendadak kode eksekusi php.
Penjelasannya ada di sini: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Jadi, kita harus menggunakan kait template_include. Dengan kait ini, tidak perlu menggunakan metode redirect dan exit.
Dan perbedaan lainnya adalah saya hanya perlu www.server.com/myaccount tanpa / userid.
Ini kodenya:
sumber
Cara lain adalah dengan menggunakan Buddypress yang memiliki built-in ini bahkan jika plugin memiliki lebih banyak fungsi yang mungkin tidak menarik.
http://wordpress.org/extend/plugins/buddypress/
sumber