ฉันควรหลีกเลี่ยงฟังก์ชั่น WordPress เช่น the_title, the_excerpt, the_content


15

ฉันดูรหัสแล้ว แต่ฉันไม่เห็นว่าจะมีการหลบหนีจาก funcions เช่นthe_title the_content the_excerptฯลฯ ฉันอาจไม่ได้อ่านอย่างถูกต้อง ฉันต้องหลบหนีฟังก์ชั่นเหล่านี้ในการพัฒนาธีมเช่น:

esc_html ( the_title () )

แก้ไข: ตามที่ระบุไว้ในคำตอบด้านล่างรหัสข้างต้นเป็นสิ่งที่ผิดโดยไม่คำนึงถึง - รหัสควรอ่าน esc_html ( get_the_title () )


ไม่ฟังก์ชั่นเหล่านั้นได้ถูกทำให้สะอาดอยู่แล้วดังนั้นจึงไม่จำเป็นต้องทำเช่นนั้น ยกเว้นในกรณีthe_contentที่ HTML ออกจากตัวแก้ไข TinyMCE ซึ่งคุณป้อน สิ่งนี้สงวนไว้มากกว่านี้สำหรับการป้อนข้อมูลในแบบฟอร์มหรือข้อมูลที่สร้างไว้ที่ส่วนหน้าโดยผู้ใช้ของคุณ
อดัม

คำตอบ:


15

การหลบหนีขึ้นอยู่กับบริบทที่คุณใช้ฟังก์ชั่น สิ่งที่ปลอดภัยสำหรับการแสดง<h1>แท็กด้านในไม่จำเป็นต้องปลอดภัยที่จะแสดงสำหรับvalueแอตทริบิวต์ของฟิลด์อินพุตและแม้จะไม่ปลอดภัยเท่าhrefค่าแอตทริบิวต์ ...

ในระยะสั้น - ดำเนินการฆ่าเชื้อด้วยตัวคุณเองในขณะที่คุณส่งออก แต่ในกรณีของthe_title ()หรือget_the_title (), esc_htmlไม่จำเป็นตั้งแต่ WordPress ใช้ฟังก์ชั่นดังต่อไปนี้:

หมายเหตุ: the_titleพิมพ์ชื่อ - ดังนั้นesc_html ( the_title () )จะไม่ทำงาน ในทำนองเดียวกันthe_contentพิมพ์เนื้อหา (ไม่ว่าในกรณีใด ๆ คุณคาดหวังว่าเนื้อหาจะแสดง HTML)


อ๊ะโง่ฉัน ... ใช่แน่นอน esc_html (the_title ()) จะไม่ทำงาน ขอบคุณสำหรับคำตอบ.
byronyasgur

4
ที่เกี่ยวข้อง: เพื่อเอาท์พุทโพสต์ชื่อในแอตทริบิวต์ HTML ใช้the_title_attribute()
ชิปเบนเน็ตต์

6

ใช่และไม่ใช่ - ขึ้นอยู่กับว่าคุณต้องการให้ html ในฟังก์ชันเหล่านั้นเป็นผลลัพธ์หรือไม่ the_content()ตัวอย่างเช่นหากคุณหลีกเลี่ยงและมี<div>แท็กแท็กนั้นจะถูกส่งออกไปยังหน้าเว็บ&lt;div&gt;แทน

อย่างไรก็ตามถ้าคุณหลีกเลี่ยงการส่งออกของฟังก์ชั่นเหล่านั้นคุณจะต้องการใช้ "get_" เทียบเท่า (เช่นget_the_content()) เป็นฟังก์ชั่นเหล่านั้นสะท้อนเอาท์พุทของพวกเขาโดยตรง


0

คุณสามารถเขียนฟังก์ชั่นแบบนี้และเชื่อมต่อกับตัวกรองthe_title :

function my_escape_title( $title ){
    return esc_html( $title );
}
add_filter( 'the_title', 'my_escape_title' );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.