Como alterar as mensagens de atualização de post do Wordpress
5 min de leitura
Texto de 2014, publicado originalmente em mariovalney.com e mantido como estava. Ferramentas, versões e links citados podem ter mudado desde então.

Tudo bem, Devs?
O Wordpress é uma das maravilhas do mundo moderno. E todos nós já sabemos disso, mas você sabia que além de tudo ele ainda nos permite alterar as mensagens que o sistema gera ao atualizar um post, page ou media? Pois é, jovem gafanhoto!
Vamos ver como funciona?
O objeto
Se você desenvolve para Wordpress, com certeza já deve ter se deparado com algum objeto sendo instanciado, modificado e logo depois atualizado. Isso tudo, geralmente com a ajuda de um filtro. E as mensagens funcionam desse jeito:
[php]
add_filter( 'post_updated_messages', 'update_messages' );
function update_messages( $messages ) {
return $messages;
}
[/php]
No código fica fácil de perceber. Você usa o filtro 'post_updated_messages'.
A função update_messages é então executada e recebe como parâmetro uma array com as mensagens. Sendo assim, basta sabermos o que tem nessa array, modificar e retornar para então fazer efeito. Para isso, temos que saber como essa array vem.
A array
Eu imprimi a array e obtive o seguinte:
Array (
[post] => Array (
[0] =>
[1] => Post atualizado. <a href="http://localhost/teste/?post_type=curso&p=18">Ver post</a>
[2] => Campo personalizado atualizado
[3] => Campo personalizado excluído.
[4] => Post atualizado.
[5] =>
[6] => Post publicado. <a href="http://localhost/teste/?post_type=curso&p=18">Ver post</a>
[7] => Post salvo.
[8] => Post enviado. <a href="http://localhost/teste/?post_type=curso&p=18&preview=true" target="_blank">Visualizar post</a>
[9] => Post agendado para: <strong>29 de junho de 2014 às 20:45</strong>. <a href="http://localhost/teste/?post_type=curso&p=18" target="_blank">Visualizar post</a>
[10] => Rascunho do post atualizado. <a href="http://localhost/teste/?post_type=curso&p=18&preview=true" target="_blank">Visualizar post</a>
)
[page] => Array (
[0] =>
[1] => Página atualizada. <a href="http://localhost/teste/?post_type=curso&p=18">Ver página</a>
[2] => Campo personalizado atualizado
[3] => Campo personalizado excluído.
[4] => Página atualizada
[5] =>
[6] => Página publicada. <a href="http://localhost/teste/?post_type=curso&p=18">Ver página</a>
[7] => Página salva.
[8] => Página enviada. <a href="http://localhost/teste/?post_type=curso&p=18&preview=true" target="_blank">Visualizar página</a>
[9] => Página agendada para: <strong>29 de junho de 2014 às 20:45. <a href="http://localhost/teste/?post_type=curso&p=18" target="_blank">Visualizar página</a>
[10] => Rascunho da página atualizado. <a href="http://localhost/teste/?post_type=curso&p=18&preview=true" target="_blank">Visualizar página</a>
)
[attachment] => Array (
[1] => Mídia atualizada.
[2] => Mídia atualizada.
[3] => Mídia atualizada.
[4] => Mídia atualizada.
[5] => Mídia atualizada.
[6] => Mídia atualizada.
[7] => Mídia atualizada.
[8] => Mídia atualizada.
[9] => Mídia atualizada.
[10] => Mídia atualizada.
)
)
Lembrando, é claro, que essa Array foi gerada em um teste. Caso você tenha algum custom_post_type, ele será incluído (com os valores defaults).
Analisando chegamos a algumas conclusões sobre a estrutura:
- A array contem arrays com as mensagens.
- O índice dessas arrays é o post_type.
- São 10 mensagens passíveis de modificação.
Modificando as mensagens
Para modificar alguma mensagem, basta acessá-la e mudar seu valor. Por exemplo, se eu quiser alterar a mensagem 6 dos posts, ou seja, a mensagem de "post publicado", basta:
[php]
add_filter( 'post_updated_messages', 'update_messages' );
function update_messages( $messages ) {
$messages['post']['6'] = "Post publicado. Funcionou!";
return $messages;
}
[/php]
Massa, né? Observe que o ID da mensagem esteve lá o tempo todo (e você nunca prestou atenção... RUM) rsrsrsrs
Mensagens
Não encontrei em lugar algum uma lista relacionado as mensagens com algum evento, contudo analisando podemos chegar à lista abaixo (por favor, caso observe algum erro ou se puder sugerir melhorias, deixe um comentário).
- 0 - Esse índice não é usado.
- 1 - Quando um post é atualizado.
- 2 - Quando um Custom Field é atualizado.
- 3 - Quando um Custom Field é apagado.
- 4 - Quando um post é atualizado.
- 5 - Quando uma revisão é restaurada.
- 6 - Quando um post é publicado.
- 7 - Quando um post é salvado.
- 8 - Quando um post é enviado.
- 9 - Quando um post é agendado.
- 10 - Quando um rascunho é atualizado.
Obs: Os itens na cor azul foram testados por mim, manualmente. =D
Exemplo
Com tudo isso em mente, provavelmente a maioria de vocês já está com o Sublime aberto e mexendo, mas pra galera que precisar, abaixo vem um exemplo completo de como utilizar. Incluindo comentários para facilitar o entendimento.
[php]
add_filter( 'post_updated_messages', 'update_messages' );
function update_messages( $messages ) {
// IREMOS UTILIZAR ESSES DADOS: O OBJETO "POST" E O OBJETO DO "POST_TYPE" DELE.
$post = get_post();
$post_type = get_post_type($post);
$post_type_object = get_post_type_object($post_type);
// ALTERANDO AS MENSAGENS DO POST_TYPE "produtos":
$messages['post'] = array(
0 => '', // NADA AQUI
1 => __( 'Produto atualizado.', 'dominio-do-seu-plugin' ),
2 => __( 'Custom field atualizado.', 'dominio-do-seu-plugin' ),
3 => __( 'Custom field apagado.', 'dominio-do-seu-plugin' ),
4 => __( 'Produto atualizado.', 'dominio-do-seu-plugin' ),
5 => __( 'Revisão de Produto restaurada.', 'dominio-do-seu-plugin' ),
6 => __( 'Produto publicado.', 'dominio-do-seu-plugin' ),
7 => __( 'Produto salvado.', 'dominio-do-seu-plugin' ),
8 => __( 'Produto enviado.', 'dominio-do-seu-plugin' ),
9 => sprintf(
__( 'Produto agendado para: <strong>%1$s</strong>.', 'dominio-do-seu-plugin' ),
// Vamos usar o formato de data, veja: http://php.net/date
date_i18n( __( 'M j, Y @ G:i', 'dominio-do-seu-plugin' ), strtotime( $post->post_date ) )
),
10 => __( 'Rascunho atualizado.', 'dominio-do-seu-plugin' )
);
// SE O SEU CUSTOM_POST_TYPE FOR "QUERYABLE", OU SEJA, SE PUDER SER CHAMADO POR UMA QUERY, DEVEMOS INCLUIR ESSA URL
// VERIFICA SE "publicly_queryable" É TRUE no "post_type_object"
if ( $post_type_object->publicly_queryable ) {
// RETORNA O PERMALINK DO POST
$permalink = get_permalink( $post->ID );
// LINK PARA VISUALIZAR
$view_link = sprintf( ' <a href="%s">%s</a>', esc_url( $permalink ), __( 'Ver Produto', 'dominio-do-seu-plugin' ) );
// LINK PARA RASCUNHO / PRÉ-VISUALIZAÇÃO
$preview_permalink = add_query_arg( 'preview', 'true', $permalink );
$preview_link = sprintf( ' <a target="_blank" href="%s">%s</a>', esc_url( $preview_permalink ), __( 'Ver Produto', 'dominio-do-seu-plugin' ) );
// REESCREVE AS MENSAGENS 1, 4, 6, 8, 9 E 10 ACRESCENTANDO OS LINKS ACIMA
$messages[ $post_type ][1] .= $view_link;
$messages[ $post_type ][4] .= $view_link;
$messages[ $post_type ][6] .= $view_link;
$messages[ $post_type ][8] .= $preview_link;
$messages[ $post_type ][9] .= $view_link;
$messages[ $post_type ][10] .= $preview_link;
}
return $messages;
}
[/php]
E isso é tudo, pessoal! Quer saber mais? Leia o Codex do WordPress.
Deixe seu comentário, um like não mata e compartilhe no Google Plus!
Abraços e até mais!
