เราต้องมองลึกลงไปที่นี่เพื่อรับคำตอบสำหรับคำถามของคุณ
ดังนั้นเป็นรอบกระดาษห่อง่ายbloginfo
get_bloginfo
<?php
function bloginfo( $show='' ) {
echo get_bloginfo( $show, 'display' );
}
display
ขอให้สังเกตอาร์กิวเมนต์ที่สอง เรามาดูกันว่ามีอะไรบ้าง
<?php
function get_bloginfo( $show = '', $filter = 'raw' ) {
// snip snip, $output is fetched somewhere in here
if ( 'display' == $filter ) {
if ( $url )
$output = apply_filters('bloginfo_url', $output, $show);
else
$output = apply_filters('bloginfo', $output, $show);
}
return $output;
}
หากตัวกรองถูกตั้งค่าdisplay
เป็นเอาต์พุตของget_bloginfo
จะถูกเรียกใช้ผ่านตัวกรอง
แทนที่จะใช้ hardcode คล้ายกับการเรียกใช้esc_html
ในฟังก์ชั่น WP ใช้ระบบ hook ของตัวเองเพื่อทำสิ่งต่างๆ สถานที่ที่จะค้นพบว่ามีอะไรเกิดขึ้นwp-includes/default-filters.php
บ้าง การค้นหาอย่างรวดเร็วสำหรับbloginfo
ในไฟล์นั้นเผยให้เห็น ...
<?php
// Format strings for display.
foreach ( array( 'comment_author', 'term_name', 'link_name', 'link_description', 'link_notes', 'bloginfo', 'wp_title', 'widget_title' ) as $filter ) {
add_filter( $filter, 'wptexturize' );
add_filter( $filter, 'convert_chars' );
add_filter( $filter, 'esc_html' );
}
bloginfo
ถูกซ่อนอยู่ในforeach
อาร์เรย์ ในขณะที่คุณสามารถดูการส่งออกของได้รับการหนีไปกับbloginfo
esc_html
ในคำอื่น ๆ นี้:
<?php
bloginfo('name');
เทียบเท่ากับสิ่งนี้:
<?php
echo esc_html(get_bloginfo('name'));
หรือสิ่งนี้:
<?php
echo get_bloginfo('name', 'display');
ดังนั้นbloginfo
ไม่จำเป็นต้องเอาท์พุทของ ไม่ไม่การส่งออกของตราบเท่าที่อาร์กิวเมนต์ที่สองมีการตั้งค่าget_bloginfo
display
อย่างไรก็ตามข้อแม้คือทุกคนสามารถนำesc_html
ตัวกรองออกbloginfo
ได้ ดังนั้นจึงน่าจะปลอดภัยกว่าที่จะหลีกเลี่ยงเอาต์พุต และแน่นอนถ้าคุณกำลังใช้การส่งออกของbloginfo
สำหรับสิ่งอื่นนอกเหนือจากการแสดง HTML (เช่น. ในแอตทริบิวต์ Alt ของภาพ) esc_attr
คุณควรเรียกใช้ผ่าน