เขียนซ้ำ URL ในเคล็ดลับและปลั๊กอิน WordPress
การอัปเดตล่าสุดสำหรับ WordPress ช่วยให้นักพัฒนาสามารถปรับแต่งเว็บไซต์ส่วนตัวได้อย่างรวดเร็ว ง่ายในการอัปเดตพื้นที่ของธีมแทนที่วิดเจ็ตในแถบด้านข้างและแม้แต่เขียนฟังก์ชันโค้ด PHP ที่คุณกำหนดเอง พื้นที่กว้างใหญ่ - และหนึ่งในความนิยมคือการเขียน URL ลิงก์ใหม่.
มีสองสามวิธีที่คุณสามารถใช้เพื่ออัปเดตระบบการเขียน WordPress เริ่มต้น ในบทช่วยสอนนี้ฉันจะแบ่งปันตัวอย่างและสาธิตให้เห็นว่ากระบวนการนั้นง่ายเพียงใด คุณจะต้องมีความเข้าใจเกี่ยวกับ PHP เพื่อติดตามสิ่งที่เกิดขึ้นในโค้ด แต่มันง่ายมากที่จะคัดลอกและวางลงในเทมเพลตของคุณเองไม่มีการทำงานที่เกี่ยวข้อง.
ทำความเข้าใจกับ WP_Rewrite
หากคุณคุ้นเคยกับ mod_rewrite บนเซิร์ฟเวอร์ Apache คุณจะเลือกใช้ไวยากรณ์การเขียนใหม่ของ WordPress ระบบของพวกเขายังคงถูกสร้างขึ้นบน .htaccess ไฟล์ แต่กฎทั้งหมดจะถูกเข้ารหัสใน PHP สิ่งนี้ทำให้กระบวนการง่ายขึ้นเล็กน้อยเนื่องจากเราสามารถควบคุมการเขียน URL ของเราเองได้มากขึ้น.
ฉันแนะนำให้อ่านหน้าคลาสของ $ wp_rewrite เนื่องจากมีข้อมูลมากมายในหัวเรื่อง มีตัวอย่างเล็ก ๆ น้อย ๆ ที่เราสามารถอ้างอิงเพื่อทำให้ทุกอย่างเข้าใจง่ายขึ้น รหัสส่วนใหญ่สามารถเขียนลงในธีมของคุณได้โดยตรง functions.php ไฟล์. เริ่มต้นด้วยการดูที่การเขียนค่าเริ่มต้นที่รวมอยู่ใน WordPress แล้ว.
เนื้อหาของ $ wp_rewrite-> กฎ
โดยการประกาศให้ $ wp_rewrite
ระดับโลกเราสามารถเข้าถึงข้อมูลภายในทั้งหมดได้ เมื่อคุณไปผนวกกฎของคุณเองสิ่งเหล่านี้จะถูกเพิ่มเข้าไปในอาร์เรย์ที่มีชื่อ $ wp_rewrite-> กฎ
. สิ่งสำคัญคือต้องจดจำตัวแปรนี้เนื่องจากคุณอาจต้องอ้างอิงข้อมูลหลายครั้งระหว่างการพัฒนา.
กฎ); ?>
ฉันเพิ่มรหัสบล็อกนี้ลงในธีมของฉัน page.php ไฟล์. มันจะแสดงผลข้อมูลจำนวนมากซึ่งดูเหมือนเป็นระเบียบมาก แต่ถ้าคุณ ดูที่มา ในหน้าของคุณเป็นเรื่องง่ายที่จะเห็นว่ากฎการเขียนใหม่ตรงกับชื่อไฟล์ใด ตัวอย่างเช่นลองดูกฎสำหรับการเขียนหมวดหมู่ใหม่:
[หมวดหมู่ /(.+?)/?$] => index.php? category_name = $ ตรงกัน [1]
บิตทางด้านซ้ายในวงเล็บคือ Apache RewriteRule ของเราเพื่อค้นหา เริ่มต้นด้วยส่วน /ประเภท/ ตามด้วยสตริงอักขระใด ๆ หากสิ่งนี้ตรงกันเซิร์ฟเวอร์จะรู้ถึงการอ้างอิง index.php? category_name =
ในขณะที่การเปลี่ยนตัวแปรในตอนท้าย.
การตั้งค่าลิงก์ถาวรที่กำหนดเอง
มีเนื้อหามากมายที่ต้องดำเนินการในคลาส $ wp_rewrite เพียงอย่างเดียว คุณสมบัติอื่น ๆ สามารถอ้างอิงได้เช่น $ wp_rewrite-> category_base
หรือ $ wp_rewrite-> author_base
สำหรับการดึงโครงสร้าง URL เริ่มต้นสำหรับหน้าเหล่านี้ แต่นอกเหนือจากการดึงการตั้งค่าเริ่มต้นของ WP เรายังสามารถสร้างกฎของเราเอง.
การสร้างฐานผู้เขียนขึ้นใหม่
เมื่อคุณเข้าสู่หน้าการตั้งค่าลิงก์ถาวรคุณจะมีตัวเลือกในการรีเซ็ตหมวดหมู่และฐานแท็ก อย่างไรก็ตามตัวเลือกในการรีเซ็ตฐานผู้เขียนของคุณหายไปอย่างแปลกประหลาด.
แต่เราสามารถใช้ add_rewrite_rule ()
จาก codex ของ WordPress เพื่อรวมการตั้งค่าใหม่บางอย่าง ในกรณีนี้ฉันได้เปลี่ยน / ผู้เขียน / กับ / นักเขียน / แต่คุณสามารถใช้ฐานอะไรก็ได้ที่คุณชอบ นอกจากนี้ฉันได้คัดลอกการเปลี่ยนเส้นทางอื่น ๆ สำหรับหน้าผู้เขียนและฟีด RSS คุณสามารถเพิ่มบล็อคโค้ดนี้ลงในไฟล์ functions.php ของธีมของคุณ.
add_action ('init', 'add_author_rules'); ฟังก์ชั่น add_author_rules () add_rewrite_rule ("นักเขียน / ([^ /] +) /?", "index.php? author_name = $ ตรงกับ [1]", "top"); add_rewrite_rule ("นักเขียน / ([^ /] +) / หน้า /? ([0-9] 1,) /?", "index.php? author_name = $ ตรงกัน [1] & paged = $ ตรงกับ [2] "," ด้านบน "); add_rewrite_rule ("นักเขียน / ([^ /] +) / (ฟีด | rdf | rss | rss2 | อะตอม) /?", "index.php? author_name = $ ตรงกัน [1] & ฟีด = $ ตรงกับ [2]", " ด้านบน "); add_rewrite_rule ("นักเขียน / ([^ /] +) / ฟีด / (ฟีด | rdf | rss | rss2 | อะตอม) /?", "index.php? author_name = $ จับคู่ [1] & ฟีด = $ จับคู่ [2]" , "top");
ฟังก์ชันนี้สามารถเข้าถึงได้โดยไม่ต้องใช้ตัวแปร $ wp_rewrite นักพัฒนาบางคนชอบวิธีนี้เพราะง่ายกว่าการเข้ารหัสด้วยคุณสมบัติของคลาส อย่างไรก็ตามฉันยังสังเกตเห็นว่าวิธีนี้ไม่น่าเชื่อถือเสมอไปสำหรับการติดตั้ง WordPress บางอย่าง จริงๆแล้วมีตัวเลือกที่สองเพื่อเพิ่มกฎเหล่านี้บนตะขอหลังจากล้าง. htaccess ของคุณ (ดูด้านล่าง).
ฐานผู้เขียนโดยใช้ generate_rewrite_rules
การเขียนวิธีนี้เราจะต้องใช้คลาส $ wp_rewrite ทั่วโลกอีกครั้ง ฉันได้ตั้งค่าตัวแปรใหม่ที่ชื่อว่า $ new_rules
ซึ่งมีอาเรย์แบบเชื่อมโยงของข้อมูล โค้ดตัวอย่างของฉันด้านล่างเพิ่งเขียนใหม่สำหรับส่วนของหน้าผู้เขียนพื้นฐาน.
ฟังก์ชั่น generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> กฎ;
แต่ถ้าเราต้องการรวมหลายหน้าและ RSS ฟีดเราสามารถเพิ่มพูนอาเรย์ คุณมีตัวเลือกในการสร้างฟังก์ชั่น PHP เพื่อผลักดันข้อมูลอาเรย์แบบเชื่อมโยงซึ่งอาจซับซ้อนเกินไป นอกจากนี้เรายังสามารถแบ่งบล็อกข้อมูลผ่านเครื่องหมายจุลภาคซึ่งทำงานเป็นเอนทิตีแยกต่างหากในอาร์เรย์ ลองดูโค้ดที่อัปเดตของฉันอีกครั้งซึ่งเขียนในไฟล์ธีม functions.php.
ฟังก์ชั่น generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("writer / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "writer / ([^ /] +) / หน้า /? ([0-9] 1,) /? "=>" index.php? author_name = ". $ wp_rewrite-> preg_index (1)." & paged = ". $ wp_rewrite-> preg_index (2), "writer / ([^ /] +) / (ฟีด | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =" $ wp_rewrite-> preg_index (2), "writer / ([^ /] +) / feed / (feed | rdf | rss | rss2 | atom) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> กฎ;
เพียงจำไว้ว่าวิธีการเหล่านี้จะไม่ทำงานจนกว่าคุณจะล้างกฎการเขียนซ้ำเดิม คุณจะต้องทำเช่นนี้เมื่อใดก็ตามที่คุณทำการเปลี่ยนแปลงฟังก์ชั่นเหล่านี้ แต่หลังจากนั้นกฎใหม่ของคุณจะติดไปเรื่อย ๆ.
การล้างกฎการเขียนซ้ำ
เมื่อใดก็ตามที่คุณทำการอัพเดตโค้ดการเขียน URL ใหม่การเปลี่ยนแปลงจะไม่ถูกนำไปใช้ในทันที คุณต้องล้างข้อมูลกฎ. htaccess เพื่อเขียนโค้ดใหม่ของคุณ อย่างไรก็ตามการดำเนินการนี้ในทุก ๆ หน้า init เป็นสิ่งที่สิ้นเปลืองอย่างยิ่งเนื่องจากเขียนไปยังฐานข้อมูลและทำการรีเฟรชไฟล์. htaccess อย่างหนัก.
วิธีที่ดีกว่าคือการเข้าถึงหน้าลิงก์ในแผงผู้ดูแลระบบและบันทึกการเปลี่ยนแปลงอีกครั้ง การดำเนินการนี้จะเรียก flush_rewrite_rules เสมอดังนั้นคุณไม่ต้องกังวลเกี่ยวกับผู้ใช้ที่ส่วนหน้าประสบปัญหาในการโหลด และใช้เวลาเพียงครั้งเดียวในการบันทึกหน้าเว็บซ้ำและอัปเดตกฎทั้งหมดในระบบของคุณ แต่ถ้าไม่ได้ผลคุณสามารถลองโทรได้ $ wp_rewrite-> flush_rules ();
การใช้กฎที่ไม่ใช่ WP
ข้างใน $ wp_rewrite
class เรามีการเข้าถึงคุณสมบัติมากมาย หนึ่งในตัวเลือกที่สำคัญกว่านั้นคือ $ wp_rewrite-> non_wp_rules
ซึ่งรวบรวมอาเรย์ของการเปลี่ยนเส้นทางซึ่งไม่ตีไฟล์ index.php.
นี่เป็นจริงที่ใช้บ่อยที่สุดในการพัฒนาปลั๊กอิน WordPress คุณสามารถผลักดันประเภท URL ที่กำหนดเองที่เฉพาะเจาะจง (เช่น / ปฏิทิน / มิถุนายน 2012 /
) เข้าสู่แบ็กเอนด์ของเว็บไซต์ของคุณ (/wp-content/plugins/calendarplug/myscript.php
) แต่แน่นอนว่ายังมีการใช้งานเพิ่มเติมสำหรับอาเรย์แบบเชื่อมโยงของกฎการเขียนซ้ำแบบกำหนดเองอื่น ๆ นอกเหนือจากปลั๊กอิน ฉันได้ให้ตัวอย่างที่ดีเยี่ยมในบริบทด้านล่าง.
กำบังไฟล์ธีมของคุณ
นี่เป็นคำแนะนำทั่วไปที่ฉันเห็นบ่อยๆบนกระดานสนทนาของ WordPress โดยพื้นฐานแล้วเราต้องการอ้างอิงไฟล์บางไฟล์ภายใน / wp-content / ธีม / mytheme /
โฟลเดอร์ที่มี URL ที่หรูหรากว่า ขอให้สังเกตว่าสิ่งนี้จะต้องใช้ชุดที่แตกต่างกันของ WordPress เขียนใหม่เพื่อเปลี่ยนโครงสร้างไดเรกทอรี.
ระบบการเขียนใหม่ภายในของ WordPress จะผลักเนื้อหาไปสู่ไฟล์เส้นทางเดียวเสมอ ในกรณีเริ่มต้นเราใช้ index.php พร้อมกับข้อมูลสตริงข้อความค้นหาพิเศษ แต่สำหรับการซ่อนไดเรกทอรีแม่แบบมาตรฐานของเรา (/ wp-content / ธีม / mytheme / *
) เราจะต้องแสดงไฟล์ต่าง ๆ มากมาย.
add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); ฟังก์ชั่น themes_dir_add_rewrites () $ theme_name = ถัดไป (ระเบิด ('/ ชุดรูปแบบ /', get_stylesheet_directory ())); $ wp_rewrite ทั่วโลก; $ new_non_wp_rules = array ('css /(.*)' => 'wp-content / themes /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-content / themes / '. $ theme_name.' / js / $ 1 ',' images / wordpress-urls-rewrite /(.*) '=>' wp-content / themes / '. $ theme_name.' / images / wordpress-urls-rewrite / $ 1 ',); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;
ฉันได้เขียนฟังก์ชั่นใหม่ themes_dir_add_rewrites ()
เพื่อดึงเนื้อหาหลักทั้งหมดจาก URL ที่ยาวขึ้นและเปลี่ยนเส้นทางในส่วนแบ็คเอนด์ โปรดสังเกตว่าเรากำลังใช้คุณสมบัติลึกลับอื่น ๆ ของคลาส $ wp_rewrite ที่ชื่อว่า non_wp_rules
. ตามเอกสารเหล่านี้เป็นกฎที่ไม่ได้นำไปสู่ไฟล์ index.php ของ WP และจะได้รับการจัดการที่ปลายเซิร์ฟเวอร์.
สิ่งที่ยอดเยี่ยมเกี่ยวกับกฎที่ไม่ใช่ WP เหล่านี้คือคุณยังสามารถจัดการวิธี URL ที่เก่ากว่าได้อย่างง่ายดาย ไม่มีอะไรหยุดคุณจากการเชื่อมโยงไปยัง:
/wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg
.
แต่มันดูดีกว่าถ้าคุณสามารถอ้างอิง:
/images/wordpress-urls-rewrite/logo.jpg
แทน.
เครื่องมือ & ปลั๊กอินที่เป็นประโยชน์
มีเครื่องมือเพียงไม่กี่อย่างที่คุณสามารถใช้ถ้าคุณติดกับการเข้ารหัส URL ที่น่ารักของคุณเอง กระบวนการนี้เป็นเรื่องยากมากที่จะเข้าใจดังนั้นอย่าท้อแท้หากคุณกำลังดิ้นรนอยู่สองสามสัปดาห์ ฉันรู้สึกว่าเนื้อหาจะง่ายขึ้นเมื่อคุณใช้เวลาในการฝึกฝนมากขึ้น.
แต่เพื่อเริ่มต้นใช้งานลองดูเครื่องมือและปลั๊กอินสำหรับเขียนใหม่ที่มีประโยชน์เหล่านี้ คุณอาจไม่ต้องการทั้งหมด แต่ก็เป็นเรื่องดีที่จะพบฐานนักพัฒนาขนาดใหญ่ที่ทำงานเกี่ยวกับการเขียน WP ใหม่.
Monkeyman Rewrite Analyzer
เมื่อกระโดดเข้าสู่กฎการเขียนใหม่ปลั๊กอินนี้จะต้องมี มันไม่ได้เปลี่ยนแปลงกฎใด ๆ สำหรับเว็บไซต์ของคุณ - เพียงแค่ให้คุณทดสอบโค้ดและดูว่าการเปลี่ยนเส้นทางไปที่หน้าใด มันจะทำงานเพื่อทดสอบตัวแปรคิวรี่ที่กำหนดเองสำหรับโพสต์ประเภทใดก็ได้.
AskApache RewriteRules Viewer
สิ่งนี้คล้ายกับปลั๊กอินด้านบนยกเว้นว่าจะไม่ให้คุณทดสอบกฎของคุณเอง แต่ปลั๊กอินนี้จะแสดงกฎ WP เริ่มต้นทั้งหมดของเว็บไซต์ของคุณและที่ที่พวกเขาเปลี่ยนเส้นทางไป ซึ่งจะรวมถึงคุณสมบัติที่สำคัญทั้งหมดของ $ wp_rewrite
เช่นการตั้งค่าลิงก์ถาวรและฐานหน้า / หมวดหมู่ / แท็ก.
ควบคุม WP htaccess
ที่นี่คุณมีชุดของกฎที่แตกต่างกันสำหรับการเปลี่ยนเส้นทางหน้าใหม่ ปลั๊กอินมีแผงผู้ดูแลระบบของตัวเองที่คุณสามารถแก้ไขตัวแปรเช่นฐานผู้แต่งฐานหน้าของคุณและแม้กระทั่งผนวกกฎ. htaccess ที่กำหนดเองของคุณเอง.
วิธีนี้แตกต่างเมื่อเทียบกับการสร้างของคุณเองโดยใช้ wp_rewrite อย่างไรก็ตามอาจเป็นเรื่องง่ายขึ้นสำหรับนักเทคโนโลยีที่รู้จักเว็บเซิร์ฟเวอร์และรู้สึกสบายใจที่จะเขียนลงใน. htaccess โดยตรง.
Rewrite Rule Tester
นี่ไม่ใช่ปลั๊กอิน WordPress แต่เป็นเครื่องมือที่มีประโยชน์อย่างหนึ่งที่เก็บไฟล์ไว้ คุณสามารถคัดลอกกฎการเขียนซ้ำและทดสอบสำหรับเว็บไซต์ของคุณโดยไม่ต้องแก้ไขไฟล์. htaccess นี่เป็นวิธีที่สมบูรณ์แบบสำหรับการลบข้อบกพร่องออกจากไวยากรณ์ของคุณก่อนที่จะเปิดใช้งานสดบนเว็บ.
DW ReWrite
DW Rewrite เป็นปลั๊กอินที่ง่ายมากซึ่งสร้าง URL ที่ไม่ซ้ำกัน 3 รายการทันทีหลังการติดตั้ง โดยค่าเริ่มต้นมันจะเปลี่ยนลิงค์ผู้ดูแลระบบเข้าสู่ระบบและการลงทะเบียนไป / ผู้ดูแลระบบ
, /เข้าสู่ระบบ
, และ / ลงทะเบียน
ตามลำดับ.
สิ่งนี้จะดีมากถ้าคุณต้องการการแก้ไขอย่างรวดเร็วสำหรับบล็อกที่มีผู้แต่งหลายคน มันจะซ่อนลิงค์ลงทะเบียน WordPress ที่น่าอับอายเป็นพิเศษ (/wp-login.php?action=register
).
ข้อสรุป
ฉันหวังว่าบทช่วยสอนนี้สามารถให้ตัวอย่างเพื่อให้คุณได้คิดถึงการเขียน WordPress ใหม่ CMS เป็นที่นิยมมากและนักพัฒนายังคงผลิตคุณสมบัติใหม่ทุกวัน การปรับแต่ง URL ของคุณเองนั้นเป็นฟังก์ชั่นการใช้งานขนาดใหญ่ มันทำให้เว็บไซต์ของคุณมีเอกลักษณ์และการสร้างแบรนด์เมื่อเทียบกับตัวเลือกเริ่มต้น.
หากคุณมีปัญหากับกฎการเขียนซ้ำคุณไม่ควรยกเลิกความเสียหาย เพียงแค่ลบรหัสฟังก์ชั่นและล้างกฎ. htaccess ของคุณก็จะไม่มีอะไรเปลี่ยนแปลง ให้แน่ใจว่าได้ตรวจสอบบทความที่คล้ายกันอื่น ๆ ที่คุณสามารถหาได้ในหัวข้อ และหากคุณมีคำถามหรือความคิดเห็นใด ๆ คุณสามารถแบ่งปันพวกเขากับเราได้ในพื้นที่อภิปรายโพสต์.