Apakah mungkin untuk mengubah siput basis penulis sesuai dengan perannya? Misalnya, penulis mendapat example.com/ninja/%username% dan pelanggan mendapatkan example.com/trainee/%username%?
Saya sedang memikirkan sesuatu seperti:
add_action('init', 'set_new_author_base');
function set_new_author_base() {
global $wp_rewrite;
if($user->role == 'subscriber')
$author_slug = 'trainee';
$wp_rewrite->author_base = $author_slug;
} elseif($user->role == 'author') {
$author_slug = 'ninja';
$wp_rewrite->author_base = $author_slug;
}
}
Ini harus bekerja untuk pengunjung yang tidak terdaftar jika mereka menelusuri situs dan itu harus bekerja untuk penulis dan pelanggan yang login sendiri.
url-rewriting
slug
user-roles
Maxim Zubarev
sumber
sumber
Jawaban:
Dalam contoh Anda, penulis menulis ulang perubahan pola dari
/author/[authorname]/
menjadi/[author_level]/[author_name]/
. Jika kami mengizinkan[author_level]
apa pun, kami akan bertentangan dengan aturan untuk halaman, karena/[anything]/[anything]/
bisa berupa arsip penulis atau subhalaman biasa.Untuk alasan ini, solusi saya mengasumsikan Anda memiliki tingkat penulis dalam jumlah terbatas, sehingga kami dapat secara eksplisit menempatkannya dalam aturan penulisan ulang. Jadi
/ninja/[anything]/
akan menjadi arsip penulis, tetapi/not-ninja/[anything]/
akan menjadi halaman biasa.Mengubah struktur URL selalu terdiri dari dua bagian: mengubah URL yang akan diterima WordPress dan mengubah URL yang akan dihasilkan WordPress. Pertama-tama kita akan mengubah URL yang akan diterima WordPress dengan memperkenalkan tag penulisan ulang baru dan mengatur basis penulis kami untuk tag itu.
Jika Anda memeriksa aturan penulisan ulang yang dihasilkan dengan Analisis Penulisan Ulang saya, Anda akan melihat bahwa itu berisi aturan tambahan untuk
/[author-level]/
halaman biasa . Ini terjadi karena WordPress membuat aturan untuk setiap bagian direktori yang berisi tag penulisan ulang, seperti%author_level%
. Kami tidak memerlukan ini, jadi filter semua aturan penulisan ulang penulis yang tidak mengandungauthor_name
:Sekarang WordPress harus menerima URL menggunakan pola baru ini. Satu-satunya yang tersisa untuk dilakukan adalah mengubah URL yang dihasilkannya ketika membuat tautan ke arsip penulis. Untuk itu Anda dapat menghubungkan ke
author_link
filter, seperti contoh yang sangat mendasar ini:sumber
trainee/john/
danninja/john/
sekarang keduanya URI berlaku untuk penulis yang sama? Tidak ada cara untuk membuat permalink kanonik untuk satu penulis hanya dengan mengubah aturan penulisan ulang, kan? Auser_meta
bisa membantu ...author_link
filter. Anda juga dapat menambahkan "pemeriksaan kanonik" tambahan seperti halnya intiredirect_canonical()
, jika Anda benar-benar peduli tentang ini. Saya tidak tahu bagaimanauser_meta
akan membantu di sini?author_link
Contoh saya terlalu sederhana, perlu logika spesifik lokasi untuk memisahkan ninja dari para peserta pelatihan.author_link
filter itu sendiri. (Sebenarnya Anda memang mengatakannya - Penulis adalah ninja dan Pelanggan adalah trainee - tetapi kode saya harus cukup untuk menyelesaikan bagian itu dan cukup umum sehingga orang lain dapat belajar darinya juga.)author_rewrite_rules
berjalan pada setiap pemuatan halaman?