Como alterar as mensagens de atualização de post do WordPress
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:
add_filter( 'post_updated_messages', 'update_messages' ); function update_messages( $messages ) { return $messages; }
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:
add_filter( 'post_updated_messages', 'update_messages' ); function update_messages( $messages ) { $messages['post']['6'] = "Post publicado. Funcionou!"; return $messages; }
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.
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; }
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!