Bunu yaparken keşfettiğim iki yol var:
- Özel bir yeniden yazma kuralına sahip Yazar Sayfası
- Özel bir şablon dosyaları yeniden yazma kuralıyla eşleştirildi
İlki uygulamak daha basittir, ancak her koşulda çalışmayabilir (bunlardan birini yakında tarif edeceğim).
Özel Yeniden Yazım Kuralı
Bu çözümü birkaç gün önce burada buldum: URL Yeniden Yazma
Ve işte kod, yorumlarla birlikte:
// 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;
}
Daha sonra kalpler içeriğinizde değişiklik yaparak, yerleşik author.php şablonunu kullanabilirsiniz.
Saygılarımla, Jan Fabry her şeyi açıklayan mükemmel bir iş çıkardığından yukarıda listelenen bağlantıyı kontrol edin.
Sorgu Vars ve Sayfa Şablonları
Bu çözümleri keşfederken üzerinde çalıştığım tema için, kullanıcı meta değerine (ayrı bir ID) dayalı özel bir sayfa sunmam gerekiyordu. Müşterim kullanıcı adının veya kullanıcı kimliğinin herkese açık görünmesini istemedi, bu yüzden ayrı bir katman oluşturduk.
Tek sorun? Şu anda, yeniden yazma API'sini meta anahtarlar / değerler ile sorgulamak için nasıl kullanılacağının açık bir yolu yoktur. Neyse ki, bir çözüm vardı.
Functions.php dosyanızda ...
// 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;
}
Ve sonra, yeni bir yeniden yazma etiketi oluşturmalı ve yeni sorgunun ne zaman ve nasıl ele alınacağını bilmesi için kural vermelisiniz.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Bunu yaptıktan sonra, sadece sorgu var sunulurken "yakalamak" ve sonra istediğiniz şablona yönlendirmek gerekir:
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;
}
}
Sadece user-profile.php dosyasını oluşturduğunuzdan emin olun.
Kendi örneğimde, "public User ID" yi $ wpdb-> usermeta tablosu aracılığıyla asıl user_id ile eşleştiren üçüncü bir işlev oluşturdum ve bilgileri şablona ilettim.
Temanızın geri kalanından farklı bir şablon oluşturmanız gerekirse, get_header ile bir ad belirtebileceğinizi unutmayın:
get_header( 'user' );
Hangi header-user.php dosyasını çağırır.
Sonuç
Bunların her ikisi de geçerli, çalışan çözümler. İkincisi, başkalarının profillere göz atması mümkün olacaksa, kullanıcı kimliklerini veya kullanıcı adlarını göstermediğinden, ayrı bir "güvenlik" katmanı sunar.
Bu yardımcı olur umarım, herhangi bir sorunuz varsa bana bildirin.