มีสองวิธีที่ฉันค้นพบที่ทำสิ่งนี้:
- หน้าผู้เขียนที่มีกฎการเขียนซ้ำแบบกำหนดเอง
- ไฟล์เท็มเพลตที่กำหนดเองที่จับคู่กับกฎการเขียนซ้ำ
วิธีแรกนั้นง่ายกว่าในการนำไปใช้ แต่อาจไม่สามารถใช้ได้ในทุกสถานการณ์ (ซึ่งฉันจะอธิบายในไม่ช้า)
กฎการเขียนซ้ำที่กำหนดเอง
ฉันพบโซลูชันนี้เมื่อไม่กี่วันที่ผ่านมาที่นี่: การเขียน URL ใหม่
และนี่คือรหัสพร้อมความคิดเห็น:
// 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;
}
จากนั้นคุณสามารถใช้เทมเพลต author.php ในตัวเพื่อปรับเปลี่ยนเนื้อหาหัวใจของคุณ
ขอแสดงความนับถือตรวจสอบลิงก์ข้างต้นเนื่องจาก Jan Fabry ทำงานได้ดีเยี่ยมอธิบายทุกอย่าง
Query Vars และเทมเพลตหน้า
สำหรับชุดรูปแบบที่ฉันกำลังทำงานในขณะที่ค้นพบวิธีแก้ไขปัญหาเหล่านี้ฉันต้องแสดงหน้าเว็บที่กำหนดเองตามค่าเมตาผู้ใช้ (รหัสแยกต่างหาก) ลูกค้าของฉันไม่ต้องการให้ชื่อผู้ใช้หรือ ID ผู้ใช้ปรากฏต่อสาธารณะดังนั้นเราจึงสร้างเลเยอร์แยกต่างหาก
ปัญหาเดียว ในขณะนี้ยังไม่มีวิธีที่ชัดเจนในการใช้ Rewrite API เพื่อสืบค้นด้วยคีย์ / ค่าเมตา โชคดีที่มีทางออก
ในไฟล์ functions.php ของคุณ ...
// 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;
}
จากนั้นคุณต้องสร้างแท็กและกฎการเขียนใหม่เพื่อให้ทราบว่าเมื่อใดและอย่างไรที่จะจัดการกับวาร์แบบสอบถามใหม่
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
เมื่อคุณทำสิ่งนี้แล้วคุณจะต้อง "จับ" เมื่อมีการแสดง var ของคิวรีจากนั้นเปลี่ยนเส้นทางไปยังเทมเพลตที่คุณเลือก:
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;
}
}
ตรวจสอบให้แน่ใจว่าคุณได้สร้าง user-profile.php
ในตัวอย่างของฉันเองฉันสร้างฟังก์ชั่นที่สามที่ตรงกับ "รหัสผู้ใช้สาธารณะ" กับ user_id จริงผ่านทางตาราง $ wpdb-> usermeta และส่งข้อมูลไปยังเทมเพลต
หากคุณต้องการสร้างเทมเพลตที่แตกต่างจากชุดรูปแบบที่เหลือของคุณโปรดจำไว้ว่าด้วย get_header คุณสามารถระบุชื่อ:
get_header( 'user' );
ซึ่งจะเรียกไฟล์ header-user.php
ข้อสรุป
ทั้งสองวิธีนี้เป็นวิธีการทำงานที่ถูกต้อง ประการที่สองเสนอเลเยอร์ "ความปลอดภัย" แยกต่างหากเนื่องจากไม่เปิดเผย ID ผู้ใช้หรือชื่อผู้ใช้หากบุคคลอื่นสามารถเรียกดูโปรไฟล์ได้
หวังว่าจะช่วยได้โปรดแจ้งให้เราทราบหากคุณมีข้อสงสัย