Musimy przyjrzeć się nieco głębiej, aby uzyskać odpowiedź na twoje pytanie.
Tak, bloginfo
jest proste otoki wokół get_bloginfo
.
<?php
function bloginfo( $show='' ) {
echo get_bloginfo( $show, 'display' );
}
Zwróć uwagę na drugi argument display
. Zobaczmy, co to robi.
<?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;
}
Jeśli filtr jest ustawiony display
na wyjście, get_bloginfo
przechodzi przez filtr.
Zamiast kodować coś jak wywołanie esc_html
funkcji, WP używa własnego systemu haków do robienia różnych rzeczy. Miejsce, w którym można to znaleźć, znajduje się w wp-includes/default-filters.php
. Szybkie wyszukiwanie bloginfo
w tym pliku ujawnia ...
<?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
jest ukryty w foreach
tablicy. Jak widać, dane wyjściowe bloginfo
zostają usunięte esc_html
.
Innymi słowy, to:
<?php
bloginfo('name');
Jest to równoważne z tym:
<?php
echo esc_html(get_bloginfo('name'));
Albo to:
<?php
echo get_bloginfo('name', 'display');
Więc nie, wyjście bloginfo
nie musi być ucieczką. Dane wyjściowe nie są get_bloginfo
tak długo, jak długo ustawiony jest drugi argument display
.
Zastrzeżeniem jest jednak to, że każdy może usunąć esc_html
filtr bloginfo
. Prawdopodobnie bezpieczniej jest po prostu uciec od wyjścia. I oczywiście, jeśli używasz wyjścia bloginfo
innego niż wyświetlanie HTML (np. W atrybucie alt obrazu), powinieneś go uruchomić esc_attr
.