Mário Valney
← Arquivo

WordPress

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&amp;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&amp;p=18">Ver post</a>
        [7] => Post salvo.
        [8] => Post enviado. <a href="http://localhost/teste/?post_type=curso&amp;p=18&amp;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&amp;p=18" target="_blank">Visualizar post</a>
        [10] => Rascunho do post atualizado. <a href="http://localhost/teste/?post_type=curso&amp;p=18&amp;preview=true" target="_blank">Visualizar post</a>
    )

    [page] => Array (
        [0] =>
        [1] => Página atualizada. <a href="http://localhost/teste/?post_type=curso&amp;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&amp;p=18">Ver página</a>
        [7] => Página salva.
        [8] => Página enviada. <a href="http://localhost/teste/?post_type=curso&amp;p=18&amp;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&amp;p=18" target="_blank">Visualizar página</a>
        [10] => Rascunho da página atualizado. <a href="http://localhost/teste/?post_type=curso&amp;p=18&amp;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]

Resultado:
Teste de Alteração das Mensagens de Posts

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!