วิธีใช้แท็กแบบมีเงื่อนไขใน 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 เป็นฟังก์ชันตามเงื่อนไขที่ตรวจสอบว่าหน้าปัจจุบันเป็นหน้า บล็อก ของคุณหรือไม่ ตัวอย่างเช่น หากคุณใช้การตั้งค่าเริ่มต้นของ WordPress is_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