Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-addons-for-gutenberg domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the hustle domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /sites/danielkossmann.com/files/wp-includes/functions.php on line 6114
Como utilizar wp_kses() no WordPress - Daniel Kossmann

Com a função PHP wp_kses() você filtra um conteúdo para permitir apenas certos códigos HTML. Isto é muito útil para fazer a limpeza de códigos maliciosos ou então de códigos inapropriados para o local onde o conteúdo será exibido.

Veja o exemplo abaixo que possui um $conteudo com alguns códigos HTML dentro dele. Farei uma limpeza nesses códigos, para deixar somente as $tags_permitidas com a função wp_kses.

<?php
$conteudo = '<p>Oi, eu sou um <strong>conteúdo com HTML</strong> e com <a href="#teste" title="teste">links</a>, vamos ver <em>o que</em> acontece!</p>';

$tags_permitidas = array(
	'p' => array(),
	'a' => array(
		'href' => array(),
	)
);

echo wp_kses( $conteudo, $tags_permitidas );Code language: PHP (php)

O código acima exibirá o seguinte conteúdo em HTML:

<p>Oi, eu sou um conteúdo com HTML e com <a href="#teste">links</a>, vamos ver o que acontece!</p>Code language: HTML, XML (xml)

Você pode notar que as tags <strong> e <em> foram removidas, assim como o atributo title do <a>, pois não estavam especificadas em $tags_permitidas.

A função também possui um terceiro parâmetro para especificar o protocolo ($allowed_protocols), como: HTTP, HTTPS, FTP e TelNet.

Se você quiser um filtro exclusivo para conteúdo de posts, é possível também utilizar a função PHP wp_kses_post().

Lista de tags ou protocolos padrões para utilizar como referência

O WordPress possui uma lista de tags HTML permitidas por padrão que fica disponível no arquivo wp-includes/kses.php.

Também é possível utilizar a função PHP wp_kses_allowed_html() para retornar as tags permitidas, dado um desses contextos:

  1. vazio (valor padrão);
  2. post;
  3. strip;
  4. data;
  5. entities;
  6. ou nome do campo de filtro.

Além disso, também tem a função PHP wp_allowed_protocols() para retornar uma lista com todos os protocolos permitidos por padrão pelo WordPress.

Utilizando wp_kses() para filtrar códigos de editores de texto no WordPress

Um caso bem comum é colar conteúdo de editores de texto (ex: Microsoft Word, Google Docs) ou de planilhas dentro de um campo com editor rico (WYSIWYG) e algumas tags de estilos vem junto, como no exemplo abaixo:

<span style="color: #ff0000;"><span style="font-family: Arial;"><span style="font-size: small;">Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.</span></span></span>Code language: HTML, XML (xml)

Para remover todas as tags que não forem <b> ou <i>, utilize o código abaixo:

<?php
$conteudo = '<span style="color: #ff0000;"><span style="font-family: Arial;"><span style="font-size: small;">Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.</span></span></span>';

$tags_permitidas = array(
	'b' => array(),
	'i' => array()
);

echo wp_kses( $conteudo, $tags_permitidas );Code language: PHP (php)

Que exibirá o seguinte conteúdo em HTML:

Isto é um <b>conteúdo colado</b> do <i>LibreOffice Writer</i>, similar ao Word.Code language: HTML, XML (xml)

Desta forma é possível ter um controle bem granular do tipo de HTML que é permitido, evitando assim vários problemas, inclusive de segurança.



Comments

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *