Shortcodes são códigos especiais usados em conteúdos no WordPress que, quando publicados na parte pública do site, se transformam em conteúdos ou funcionalidades especiais. Por exemplo, um shortcode [button color=”blue”] pode vir a se transformar ou como os grids no Superlumina», que são criados com códigos como [sl_grid columns=”3″].
Mas em diversas situações os usuários tentam usar estes códigos em locais que normalmente não permitiriam estes códigos. E ao invés de aparecer o conteúdo transformado (i.e. o botão ou o grid dos exemplos acima) e mostra o código em si.
Hoje, por exemplo, vi um caso de um site onde a descrição de uma seção/categoria (arquivo archive.php na hierarquia de templates do WordPress) deveria contar também com uma imagem e sua legenda. E ao invés da legenda, aparecia o shortcode para legenda.
Em casos como estes, geralmente é possível usar 2 soluções: a função do_shortcode ou o filtro the_content.
função do_shortcode
do_shortcode( $content, false ); |
Esta função recebe um conteúdo em texto (parâmetro $content), verifica e executa todos os shortcodes nele e retorna o conteúdo filtrado. Se o segundo parâmetro for false, ignora shortcodes dentro elementos HTML.
Filtro the_content
apply_filters('the_content', $content); |
Esta função também recebe um conteúdo em texto (parâmetro $content), e executa todo e qualquer filtro que esteja atrelados a ele, incluindo shortcodes e QUALQUER função que temas e plugins tenham configurado para rodar no the_content.
Particularmente, prefiro usar o do_shortcode quando só quero executar shortcodes. Veja alguns exemplos:
Pegar o conteúdo de um campo customizado (custom field) e executar shortcodes:
do_shortcode( get_post_meta($post_id, 'nome_do_campo', true), false ); |
Usar shortcode na descrição de uma categoria e executá-los na área pública (front-end)
do_shortcode( term_description( $term_id, $taxonomy ), false ); |
Neste caso, também pode usar get_term_meta, que funciona de forma similar à get_post_meta
do_shortcode( get_term_meta($term_id, 'nome_do_campo', true), false ); |
Referências na documentação do WordPress, em inglês:
Estes exemplos também estão disponíveis no Github. Espero ter ajudado