วิธีใช้แท็กแบบมีเงื่อนไขใน WordPress
เผยแพร่แล้ว: 2020-06-09สิ่งหนึ่งที่ฉันชอบมากที่สุดเกี่ยวกับ WordPress ก็คือมันมีฟังก์ชันมากมายที่ช่วยให้งานของเราเป็นนักพัฒนาง่ายขึ้นอย่างมาก ตัวอย่างเช่น พิจารณาฟังก์ชันต่างๆ เช่น esc_attr ซึ่งจะยกเว้นข้อความเพื่อให้สามารถเพิ่มลงในแอตทริบิวต์แท็ก HTML ได้อย่างปลอดภัย หรือ esc_html ซึ่งใช้ Escape กับข้อความเพื่อให้สามารถรวมไว้ในหน้า HTML ได้อย่างปลอดภัย หรือดูฟังก์ชันบางอย่างที่เราต้องล้างข้อมูลที่เราได้รับจากผู้ใช้: sanitize_text_field , sanitize_textarea_field หรือ sanitize_email คุณเคยชินกับฟังก์ชันที่กำหนดไว้อย่างดีเหล่านี้จนคุณพลาดไปจริงๆ เมื่อคุณต้องพัฒนาอะไรนอกขอบเขตของ WordPress และพบว่าไม่มีให้บริการอีกต่อไป!
คอลเลกชันของฟังก์ชันที่เรามีอยู่เมื่อเราพัฒนาบน WordPress นั้นมีขนาดใหญ่อย่างไม่น่าเชื่อ และยิ่งเราคุ้นเคยกับพวกเขามากเท่าไหร่ ก็ยิ่งเขียนโค้ดคุณภาพสูงได้ง่ายขึ้นเท่านั้น
วันนี้ฉันอยากจะบอกคุณเกี่ยวกับ แท็กแบบมีเงื่อนไข ใน WordPress: คืออะไร ใช้งานอย่างไร สิ่งที่อาจทำให้เข้าใจผิดเกี่ยวกับแท็กเหล่านี้ และเหตุใดจึงมีประโยชน์มาก หากคุณเป็นผู้พัฒนาปลั๊กอินหรือธีม และคุณยังไม่รู้จักพวกเขา อย่าพลาดโพสต์นี้
แท็กแบบมีเงื่อนไขของ WordPress คืออะไร?
แท็กแบบมีเงื่อนไขคือฟังก์ชันที่กำหนดไว้ใน WordPress ซึ่งผลลัพธ์เป็นค่าบูลีน (กล่าวคือ true หรือ false ) ฟังก์ชันเหล่านี้เป็นฟังก์ชันที่เราสามารถใช้ได้ทั้งในปลั๊กอินและธีมของเราในการตัดสินใจแบบมีเงื่อนไขตามเนื้อหาที่เรากำลังจะแสดงผล
สิ่งที่ทำให้แท็กแบบมีเงื่อนไขดีเยี่ยมคือ โดยทั่วไปแล้ว ชื่อของแท็กจะอธิบายตนเองได้และส่งผลให้โค้ดเข้าใจได้ง่าย ตัวอย่างเช่น หากคุณใช้แท็กแบบมีเงื่อนไข is_sticky ในปลั๊กอินของคุณ แท็กเงื่อนไขจะกลับมา true อย่างชัดเจน หากเรากำลังดำเนินการกับโพสต์ที่มีการ ติดหนึบ ในวงวนของ WordPress ไม่ต้องสงสัยเลยเกี่ยวกับความหมายของมันใช่ไหม?
ก่อนที่เราจะเริ่มด้วยตัวอย่างบางส่วน โปรดทราบว่าแท็กแบบมีเงื่อนไขจะใช้ได้ก็ต่อเมื่อ WordPress ได้กำหนดเนื้อหาที่ผู้เยี่ยมชมร้องขอแล้วเท่านั้น หากเราลองใช้ก่อน ผลลัพธ์จะเป็น false เสมอ กล่าวอีกนัยหนึ่ง เราสามารถใช้ได้ก็ต่อเมื่อการทำงาน posts_selection ทำงานแล้วเท่านั้น
แท็กเงื่อนไขที่พบบ่อยที่สุด
แท็กแบบมีเงื่อนไขส่วนใหญ่ใน WordPress เริ่มต้นด้วย is_ เนื่องจากคำตอบของคำถามเช่น “is blah blah?” เป็นค่าบูลีน: "ใช่" หรือ "ไม่ใช่" แต่น่าเสียดายที่เกณฑ์นี้ไม่ได้ปฏิบัติตามเสมอไป (ดังที่เราจะเห็นด้านล่าง)
มีแท็กแบบมีเงื่อนไขมากมายใน WordPress ที่คุณจะคุ้นเคยเมื่อต้องการ แต่มีบางส่วนที่เป็นเรื่องธรรมดามากและยิ่งคุณรู้จักพวกเขาเร็วเท่าไหร่ก็ยิ่งดีเท่านั้น ลองมาดูสิ่งเหล่านั้นให้ละเอียดยิ่งขึ้น:
-
is_singleจะตรวจสอบว่าองค์ประกอบปัจจุบันเป็นโพสต์ WordPress หรืออินสแตนซ์ของประเภทโพสต์ที่กำหนดเองอื่นๆ (เช่น ผลิตภัณฑ์ WooCommerce ) -
is_page. จะตรวจสอบว่าองค์ประกอบปัจจุบันเป็นหน้า WordPress หรือไม่ -
is_attachment. ตรวจสอบว่าองค์ประกอบปัจจุบันเป็นสิ่งที่แนบมาหรือไม่ ไฟล์แนบคือไฟล์ที่คุณอัปโหลดไปยังไลบรารีสื่อของคุณ เช่น รูปภาพ วิดีโอ ไฟล์ ฯลฯ -
is_singularจะตรวจสอบว่าฟังก์ชันก่อนหน้าทั้งสามข้อใดเป็นtrueหรือไม่ กล่าวคือจะตรวจสอบว่าองค์ประกอบปัจจุบันเป็นโพสต์ หน้า ไฟล์แนบ หรือประเภทโพสต์อื่นๆ หรือไม่ -
comments_openคืนค่าtrueหากผู้เข้าชมสามารถแสดงความคิดเห็นเกี่ยวกับองค์ประกอบปัจจุบันได้ ดู? ที่นี่คุณมีตัวอย่างที่แท็กแบบมีเงื่อนไขไม่ได้ขึ้นต้นด้วยis_ -
is_category. จะตรวจสอบว่าเรากำลังดูหน้าที่เก็บหมวดหมู่อยู่หรือไม่ -
in_category. คืนค่าเป็น true หากโพสต์ปัจจุบันอยู่ในหมวดหมู่ที่กำหนด -
is_tagจะตรวจสอบว่าเรากำลังดูหน้าที่เก็บแท็กอยู่หรือไม่ -
has_tagจะตรวจสอบว่าโพสต์ปัจจุบันถูกแท็กโดยใช้แท็กที่ระบุหรือไม่ -
is_main_queryมันตรวจสอบว่าเราอยู่ในวงหลักของ WordPress หรือไม่
คุณรู้หรือไม่ว่ามีแท็กแบบมีเงื่อนไขที่ทำให้เข้าใจผิดได้
มีบางกรณีที่แท็กแบบมีเงื่อนไขมีชื่อที่อาจทำให้เราสับสน เนื่องจากสิ่งที่ ดูเหมือนว่า จะประเมินและสิ่งที่พวกเขา ประเมินจริง ๆ นั้นแตกต่างกัน:
-
is_admin. คุณอาจคิดว่าฟังก์ชันนี้จะตรวจสอบว่าผู้ใช้ปัจจุบันเป็นผู้ดูแลระบบใช่ไหม ผิด! จะตรวจสอบว่าเราอยู่ในหน้าภายในแดชบอร์ดของ WordPress (แล้วผลลัพธ์จะเป็นtrue) หรือในส่วนหน้า (นั่นคือfalse) -
is_home. ฉันเคยคิดว่าฟังก์ชันนี้จะตรวจสอบว่าหน้าปัจจุบันเป็นหน้าแรกของคุณหรือไม่ ตัวอย่างเช่น ในเว็บไซต์ของเรา จะเป็นhttps://neliosoftware.comแต่น่าเสียดายที่ไม่ใช่กรณี WordPress ถือกำเนิดขึ้นในฐานะแพลตฟอร์มบล็อก และฉันคิดว่านี่เป็นตัวอย่างของ “รหัสดั้งเดิม”is_homeเป็นฟังก์ชันตามเงื่อนไขที่ตรวจสอบว่าหน้าปัจจุบันเป็นหน้า บล็อก ของคุณหรือไม่ ตัวอย่างเช่น หากคุณใช้การตั้งค่าเริ่มต้นของ WordPressis_homeจะส่งกลับtrueเมื่อผู้เยี่ยมชมอยู่ในหน้าแรก (https://yourweb.com) เนื่องจากหน้านั้นแสดงโพสต์บล็อกล่าสุดของคุณ แต่ถ้าคุณตั้งค่าหน้าบล็อกของคุณเป็นอย่างอื่น (เช่นhttps://yourweb.com/blog) ดังนั้นis_homeจะเป็นtrueเมื่อผู้เยี่ยมชมร้องขอhttps://yourweb.com/blogและfalse -
is_front_page. และนี่คือแท็กแบบมีเงื่อนไขที่จะแจ้งให้คุณทราบเมื่อผู้เยี่ยมชมอยู่ใน "หน้าแรก" -
is_dynamic_sidebarฟังก์ชันนี้จะตรวจสอบว่าธีมของคุณมีแถบด้านข้างของวิดเจ็ตอย่างน้อยหนึ่งแถบหรือไม่ และหากมี แถบด้านข้างดังกล่าวจะคืนค่าเป็น "true" หากอย่างน้อยหนึ่งแถบด้านข้างนั้นไม่ว่างเปล่า
การกำหนดพารามิเตอร์แท็กแบบมีเงื่อนไข
แม้ว่าแท็กแบบมีเงื่อนไขส่วนใหญ่จะเป็นฟังก์ชันที่สามารถเรียกได้โดยไม่ต้องใช้พารามิเตอร์ แต่หลายแท็กก็สนับสนุนพารามิเตอร์ หากเราใช้ เราจะเจาะจงมากขึ้นเกี่ยวกับเกณฑ์ที่โพสต์ปัจจุบันควรเป็นไปตาม และพวกเขาทำเช่นนี้ในวิธีที่สมเหตุสมผล

ขึ้นอยู่กับฟังก์ชันเฉพาะที่เราใช้ เราอาจต้องการตรวจสอบว่าองค์ประกอบปัจจุบันมีรหัสเฉพาะหรือบางตัว เป็นอินสแตนซ์ของประเภทโพสต์บางประเภท หรือแม้แต่มีชื่อเฉพาะหรือไม่ ตัวอย่างเช่น:
-
is_singular( 'product' )ตรวจสอบว่าองค์ประกอบปัจจุบันเป็น ผลิตภัณฑ์ หรือไม่ -
is_page( 'Contact Us' )ตรวจสอบว่าชื่อหน้าปัจจุบันคือ “ติดต่อเรา” หรือไม่ ฟังก์ชันนี้ยอมรับการโต้แย้งประเภทต่างๆ และขึ้นอยู่กับสิ่งที่คุณระบุ ฟังก์ชันนี้จะตรวจสอบสิ่งใดสิ่งหนึ่ง ตัวอย่างเช่น คุณสามารถตรวจสอบว่าองค์ประกอบปัจจุบันมีรหัสประจำตัวหรือชื่อหรือกระสุนบางอย่างหรือไม่ ค่อนข้างเรียบร้อยใช่มั้ย คุณสามารถใช้รายการเป็นพารามิเตอร์ได้! -
is_single( [ 5, 10, 11 ] )ตรวจสอบว่า ID ขององค์ประกอบปัจจุบันเป็น 5, 10 หรือ 11 หรือไม่ มันค่อนข้างคล้ายกับis_pageแต่อย่างที่เราพูดก่อนหน้านี้ มันใช้ได้กับโพสต์อื่นที่ไม่ใช่เพจ
วิธีใช้แท็กแบบมีเงื่อนไข
มาดูตัวอย่างสองสามตัวอย่างที่แท็กแบบมีเงื่อนไขอาจมีประโยชน์
การปรับแต่งเทมเพลต
อย่างที่คุณคงทราบดีอยู่แล้วว่าแท็กแบบมีเงื่อนไขมีประโยชน์อย่างมากในธีม หากคุณต้องการให้ธีมแสดงข้อมูลอย่างใดอย่างหนึ่งขึ้นอยู่กับประเภทของเนื้อหาที่กำลังดูในเวลาใดก็ตาม (และนี่คือสิ่งที่เราต้องการทำบ่อยๆ) แท็กแบบมีเงื่อนไขคือพันธมิตรของคุณ:
<?php // ... if ( ! is_page() ) { echo '<span class="whatever">'; echo $something_relevant; echo '</span>'; } // ...วิธีนี้ทำให้คุณสามารถใช้เทมเพลตเดียวกันสำหรับเนื้อหาประเภทต่างๆ และปรับแต่งแต่ละรายการด้วยแท็กแบบมีเงื่อนไข
การเข้าคิวสินทรัพย์แบบมีเงื่อนไข
แต่แท็กแบบมีเงื่อนไขก็มีประโยชน์อย่างมากสำหรับนักพัฒนาปลั๊กอินเช่นกัน โดยเฉพาะอย่างยิ่ง สิ่งเหล่านี้ช่วยให้เราโหลดส่วนต่างๆ ของปลั๊กอินแบบมีเงื่อนไข ขึ้นอยู่กับผลลัพธ์ที่เราได้รับจากแท็กแบบมีเงื่อนไข
ตัวอย่างเช่น ลองนึกภาพว่าเรากำลังพัฒนาปลั๊กอินที่เพิ่มฟังก์ชันการทำงานบางอย่างให้กับโพสต์บนบล็อกของเรา สมมติว่าฟังก์ชันนี้กำหนดให้เราต้องจัดคิวสคริปต์และสไตล์ชีตไว้ที่ส่วนหน้า ในการจัดคิวสคริปต์และสไตล์ใน WordPress เรามีตัวกรองชื่อ wp_enqueue_scripts :
function nelio_plugin_fancy_feature() { wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' ); ปัญหาของตัวอย่างก่อนหน้านี้คือ มันเข้าคิวสินทรัพย์ของเราเสมอ ไม่ว่าผู้เยี่ยมชมจะร้องขออะไรก็ตาม เมื่อใดก็ตามที่ wp_enqueue_scripts ทำงาน (และทำงานในทุกคำขอส่วนหน้า) ฟังก์ชันเรียกกลับของเราจะถูกเรียกและสคริปต์และสไตล์ชีตของเราจะถูกเพิ่มเข้าไป แต่เราบอกว่าฟีเจอร์ของเรามีผลกับโพสต์ในบล็อกเท่านั้น ดังนั้น… เราจำเป็นต้องจัดคิวเนื้อหาเหล่านี้เสมอหรือไม่ แน่นอนไม่! และเราสามารถปรับปรุงสิ่งนี้ได้โดยใช้แท็กเงื่อนไขที่เหมาะสม:
function nelio_plugin_fancy_feature() { if ( ! is_single( 'post' ) ) { return; } wp_enqueue_script( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.js' ); wp_enqueue_style( 'nelio_plugin_feat', nelio_plugin()->url . '/assets/dist/feat.css' ); } add_action( 'wp_enqueue_scripts', 'nelio_plugin_fancy_feature' );สรุป
แท็กแบบมีเงื่อนไขของ WordPress ให้เราทดสอบเกณฑ์ต่างๆ ของเนื้อหาของเรา และปรับสิ่งที่จะเกิดขึ้นตามนั้น แม้จะมีความเรียบง่ายสุดขีด แต่ก็เป็นฟังก์ชันที่มีประโยชน์มากที่ทำให้โค้ดของเราเข้าใจได้ง่ายและมีประสิทธิภาพมากขึ้น
ฉันหวังว่าคุณจะได้เรียนรู้บางสิ่งในวันนี้ และเช่นเคย หากคุณมีคำถามหรือความคิดเห็น โปรดแจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง
ภาพเด่นโดย Justin Luebke บน Unsplash
