โฮมเพจ » WordPress » เขียนซ้ำ URL ในเคล็ดลับและปลั๊กอิน WordPress

    เขียนซ้ำ 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 ของคุณก็จะไม่มีอะไรเปลี่ยนแปลง ให้แน่ใจว่าได้ตรวจสอบบทความที่คล้ายกันอื่น ๆ ที่คุณสามารถหาได้ในหัวข้อ และหากคุณมีคำถามหรือความคิดเห็นใด ๆ คุณสามารถแบ่งปันพวกเขากับเราได้ในพื้นที่อภิปรายโพสต์.