MENU Mário Valney

Como alterar as mensagens de atualização de post do WordPress

WordPress 29 de junho de 2014 2 comentários
WordPress
  • 29 - 06 - 14
  •        
  • 2

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&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:

add_filter( 'post_updated_messages', 'update_messages' );
function update_messages( $messages ) {
    $messages['post']['6'] = "Post publicado. Funcionou!";
    return $messages;
}

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.

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!

Por favor, considere desativar o AdBlock

Não perca nenhuma novidade, assinando nossa newsletter!



    Não se preocupe: não enviaremos muitos e-mails, nem mostraremos seu e-mail para ninguém. Dúvidas?


    Deixe seu comentário! Dúvida sobre como comentar
    ou vai postar código? Leia antes.