W klasycznym WP mamy większą kontrolę niż w „wyklikiwanym” (frameworki) tudzież blokowym (Gutenberg), musimy za to kodować w czystym PHP wspomaganym przez WP. Dotyczy to także funkcji zapewniających bezpieczeństwo, które pora poznać.
Jeżeli chcemy zabezpieczyć treść pokazywaną wewnątrz tagu HTML (to jest między otwierającym i zamykającym tagiem, text content po prostu) używamy esc_html:
<h4><?php echo esc_html( $title ); ?></h4>
Do zabezpieczania atrybutów tagów html mamy funkcję esc_attr:
<ul class="<?php echo esc_attr( $stored_class ); ?>">
Każdy URL zaciągnięty z backendu i wstrzykiwany np. do hrefa przepuszczamy przez esc_url:
<img alt="" src="<?php echo esc_url( $media_url ); ?>" />
Java-scripty nie powinny być zaciągane z backendu, na pewno nie tak jak pokażę to zaraz, ale specjalne atrybuty javascriptowe przepuszczamy przez esc_js:
<div onclick='<?php echo esc_js( $value ); ?>' />
Nigdy tego robić nie będziemy – do podczepania JS mamy w functions.php coś takiego:
function additional_styles() {
//(...)
wp_enqueue_script( 'navbar-script', get_template_directory_uri() .'/navbar.js' );
}
add_action('wp_enqueue_scripts', 'additional_styles');
I ten plik js zawiera normalne query-selectory i event-listenery. Tym niemniej, funkcja esc_js istnieje, ale jeżeli jej używamy, to raczej coś jest nie tak z naszą logiką.
Dalej, mamy funkcję esc_html_e, która w dodatku robi od razu echo:
<h1><?php esc_html_e( 'Title', 'text-domain' )?></h1>
Jeżeli nie piszemy pluginu tylko szablon możemy olać text-domain (drugi argument).
Kolejne funkcje to wp_kses_post i wp_kses_data:
echo wp_kses_post( $partial_html );
echo wp_kses_data( $partial_html );
Post pozwala na tylko te HTMLe, które może mieć post (wpis). Data pozwala tylko na takie, które są dozwolone w komentarzach.
Mamy jeszcze wp_kses, też ciekawy przypadek:
echo wp_kses(
$another_partial_html,
array(
'a' => array(
'href' => array(),
'title' => array(),
),
'br' => array(),
'em' => array(),
'strong' => array(),
)
); ?>
Tutaj pozwalamy tylko na tagi br, em, strong oraz tag a, tylko z atrybutami href i title, żadnymi innymi.
Mamy jeszcze esc_url_raw (gdybyśmy chcieli zapisać do bazy danych url od użytkownika) oraz esc_xml, gdybyśmy tego potrzebowali. I to w zasadzie wszystko jeżeli o sekwencje ucieczkowe chodzi.