X

Criar Mensagens de Status de Post Personalizadas no Admin

LinkedInPinCompartilhamentos0
Snippets por IsItWP

Você deseja adicionar uma mensagem de status personalizada para cada postagem que um autor cria? Embora provavelmente exista um plugin para isso, criamos um snippet de código rápido que você pode usar para criar mensagens de status de postagem personalizadas no admin do WordPress.

Instruções:

Tudo o que você precisa fazer é adicionar este código ao arquivo functions.php do seu tema ou a um plugin específico do site.

Apenas usuários com a capacidade publish_posts podem alterar o status, enquanto todos veem qual é o status (se ele estiver definido). Você pode remover a notificação de status selecionando nenhuma.

add_filter( 'display_post_states', 'custom_post_state' );
function custom_post_state( $states ) {
	global $post;
	$show_custom_state = get_post_meta( $post->ID, '_status' );
	// We are using "None" as a way to disable this feature for the current post.
	if ( $show_custom_state && $show_custom_state[0] != 'None' ) $states[] = '<span class="custom_state ' . strtolower( $show_custom_state[0] ) . '">' . $show_custom_state[0] . '</span>';
	return $states;
}
add_action( 'admin_head', 'status_css' );
function status_css()
{
	echo '
	<!-- Styling of Custom Statuses -->
	<style type="text/css">
		.custom{border-top:solid 1px #e5e5e5;}
		.custom_state{
			font-size:9px;
			color:#666;
			background:#e5e5e5;
			padding:3px 6px 3px 6px;
			-moz-border-radius:3px;
                        -webkit-border-radius:3px;
                        border-radius:3px;
			border-radius:3px;
		}
		.spelling{background:#4BC8EB;color:#fff;}
		.review{background:#CB4BEB;color:#fff;}
		.errors{background:#FF0000;color:#fff;}
		.source{background:#D7E01F;color:#333;}
		.rejected{background:#000000;color:#fff;}
		.final{background:#DE9414;color:#333;}
	</style>';
}
// Only those with the capability should be able to change things.
if ( current_user_can( 'publish_posts' ) ) {
	// Insert our "Custom Status" into the Post Publish Box
	add_action( 'post_submitbox_misc_actions', 'custom_status_metabox' );
	function custom_status_metabox() {
		global $post;
		$custom = get_post_custom( $post->ID );
		$status = $custom["_status"][0];
		$i = 0;
		// Available Statuses
		$custom_status = array( 'None', 'Spelling', 'Review', 'Errors', 'Source', 'Rejected', 'Final' );
		echo '
		<div class="misc-pub-section custom">Custom status:
		<select name="ourstatus">';
			for ( $i = 0; $i < count( $custom_status ); $i++ ) {
				echo '<option value="' . $custom_status[$i] . '"';
				if ( $status == $custom_status[$i] ) echo ' selected="selected"';
				echo '>' . $custom_status[$i] . '</option>';
			}
		echo '</select></div>';
	}
	// Save
	add_action( 'save_post', 'save_status' );
	function save_status( $post_id ) {
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return $post_id;
		update_post_meta( $post_id, "_status", $_POST["ourstatus"] );
	}
}

Observação: Se esta é a sua primeira vez adicionando snippets de código no WordPress, consulte nosso guia sobre como adicionar snippets de código corretamente no WordPress, para não quebrar acidentalmente seu site.

Se você gostou deste trecho de código, considere conferir nossos outros artigos no site, como: Como criar formulários de optin impressionantes no WordPress e 10 melhores plugins de depoimentos do WordPress.

LinkedInPinCompartilhamentos0

Comentários   Deixe uma resposta

  1. Edson Santoro 6 de junho de 2012, 3:17

    ÓTIMO!!!!!!!!!!!!! Salvou minha vida!

  2. olá, há alguma chance de ocultar este recurso de não administradores no wordpress?

    1.  Se você quiser remover todos os aspectos de usuários regulares, você pode simplesmente fazer algo como isto com os hooks,

      if(is_admin()){
      add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
      add_filter( ‘display_post_states’, ‘custom_post_state’ );
      }

      Se você quiser exibir o status, mas não der aos usuários não administradores acesso para alterá-lo, você pode fazer o mesmo, mas apenas com a função que exibe as opções de interface.

      if(is_admin()){
      add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
      }

      Eu não testei isso, mas deve funcionar,

  3. abaixo, não bellow. 🙂

    1. Opa 🙂 obrigado

  4. 29 Ajustes no Wordpress para Melhorar Posts e Páginas 18 de outubro de 2011 às 9:03

    […] [Fonte: WPSNIPP] […]

  5. Atualização do WordPress: Crie mensagens de status de postagem personalizadas no admin – 400+ trechos de código do WordPress para o seu blog 19 de julho de 2011, 9:01

    […] tema do wordpress permitirá que você crie mensagens de status de postagem personalizadas. Esta é uma versão atualizada do (Criar mensagens de status de postagem personalizadas no admin) adicionando alguns recursos adicionais. Apenas usuários com a capacidade de “publish_posts” podem […]

  6. Ótimo addon 😉  Eu estava me perguntando, eu tentei no meu WP 3.1.3 e funciona muito bem. A única coisa que eu queria perguntar é como posso remover o status, depois que o artigo foi  recarregado. Eu tentei usar o “Custom” ou o “——” mas então um desses aparece na lista “Post” também. 

    1. A maneira fácil seria definir display:none; em um dos status que você criar, por exemplo: .final{display:none;} ele ainda criaria o status, apenas não o exibiria.

      1. Gabriel Merovingi 16 de julho de 2011, 1:35

        Obrigado por isso! Eu ajustei seu código para excluir o status se definido como “None”. Também incluí para que apenas aqueles que podem “publish_posts” possam alterar o status, enquanto todos veem os resultados salvos, é claro.

        add_filter( ‘display_post_states’, ‘custom_post_state’ );
        function custom_post_state( $states ) {
        global $post;
        $show_custom_state = get_post_meta( $post->ID, ‘_status’ );
        if ( $show_custom_state ) $states[] = ” . $show_custom_state[0] . ”;
        return $states;
        }
        add_action( ‘admin_head’, ‘status_css’ );
        function status_css() {
        echo ‘

        .default{font-weight:bold;}
        .custom{border-top:solid 1px #e5e5e5;}
        .custom_state{font-size:9px; color:#666; background:#e5e5e5; padding:3px 6px 3px 6px; -moz-border-radius:3px; border-radius:3px;}
        .spelling{background:#4BC8EB;color:#fff;}
        .review{background:#CB4BEB;color:#fff;}
        .errors{background:#FF0000;color:#fff;}
        .source{background:#D7E01F;color:#333;}
        .rejected{background:#000000;color:#fff;}
        .final{background:#DE9414;color:#333;}
        ‘;
        }
        if ( current_user_can( ‘publish_posts’ ) ) {
        add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
        add_action( ‘save_post’, ‘save_status’ );
        function custom_status_metabox() {
        global $post;
        $custom = get_post_custom( $post->ID );
        $status = $custom[“_status”][0];
        $i = 0;
        // Status Disponíveis
        $custom_status = array( ‘Nenhum’, ‘Ortografia’, ‘Revisão’, ‘Erros’, ‘Origem’, ‘Rejeitado’, ‘Final’ );

        echo ‘Status personalizado: ‘;

        foreach ( $i = 0; $i < count( $custom_status ); $i++ ) {

        echo '’ . $custom_status[$i] . ”;
        }
        echo ”;
        }
        function save_status( $post_id ) {

        if ( defined( ‘DOING_AUTOSAVE’ ) && DOING_AUTOSAVE ) return $post_id;

        // Se o status for definido como “Nenhum”, queremos excluir esta configuração.

        if ( $_POST[“ourstatus”] == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

        else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

        }

        1. Legal Gabriel, ótima atualização. Você deveria me contatar via http://wpsnipp.com/contact/Assim posso postar a atualização atribuída a você como autor do post.

        2. Fiz uma pequena modificação no código, o seu tinha erros de sintaxe e você usou “foreach” em vez de “for”

          add_filter( ‘display_post_states’, ‘custom_post_state’ );
          function custom_post_state( $states ) {
          global $post;
          $show_custom_state = get_post_meta( $post->ID, ‘_status’ );
          if ( $show_custom_state ) $states[] = ” . $show_custom_state[0] . ”;
          return $states;
          }
          add_action( ‘admin_head’, ‘status_css’ );
          function status_css() {
          echo ‘

          .default{font-weight:bold;}
          .custom{border-top:solid 1px #e5e5e5;}
          .custom_state{font-size:9px; color:#666; background:#e5e5e5; padding:3px 6px 3px 6px; -moz-border-radius:3px; border-radius:3px;}
          .spelling{background:#4BC8EB;color:#fff;}
          .review{background:#CB4BEB;color:#fff;}
          .errors{background:#FF0000;color:#fff;}
          .source{background:#D7E01F;color:#333;}
          .rejected{background:#000000;color:#fff;}
          .final{background:#DE9414;color:#333;}
          ‘;
          }
          if ( current_user_can( ‘publish_posts’ ) ) {
          add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
          add_action( ‘save_post’, ‘save_status’ );
          function custom_status_metabox() {
          global $post;
          $custom = get_post_custom( $post->ID );
          $status = $custom[“_status”][0];
          $i = 0;
          // Available Statuses
          $custom_status = array( ‘Nenhum’, ‘Ortografia’, ‘Revisão’, ‘Erros’, ‘Fonte’, ‘Rejeitado’, ‘Final’ );

          echo ‘Status personalizado: ‘;
          for ( $i = 0; $i < count( $custom_status ); $i++ ) {
          echo '’ . $custom_status[$i] . ”;
          }

          echo ”;
          }
          function save_status( $post_id ) {

          if ( defined( ‘DOING_AUTOSAVE’ ) && DOING_AUTOSAVE ) return $post_id;

          // Se o status for definido como “Nenhum”, queremos excluir esta configuração.

          if ( $_POST[“ourstatus”] == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

          else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

          }

          1. hookedonweb_usa 27 de junho de 2013, 0:33

            if ( $_POST[“ourstatus”] == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

            está gerando um erro: Undefined index: ourstatus

            Então eu fiz isso:

            if ( isset($_POST[“ourstatus”]) == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

            else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );

            está gerando o mesmo erro: Undefined index: ourstatus

            então fiz o mesmo:

            if ( isset($_POST[“ourstatus”]) == ‘None’ ) delete_post_meta( $post_id, “_status”, isset($_POST[“ourstatus”] ));

            Mas não consigo resolver este erro final:

            Undefined index: ps_right_now in . . . wp-content/plugins/post-status-menu-items/cms_post_status_menu.php

          2. Olá Antonin,

            Esta é uma resposta muito tardia, mas eu queria te avisar que acredito que o último erro que você mencionou foi corrigido hoje de manhã na versão 1.3.3 do Post Status Menu Items.

  7. Como criar ícones de status personalizados para posts personalizados | WpCode.net 10 de junho de 2011, 23:37

    […] é um ótimo snippet escrito por Kevin Chard e aplicando este snippet ao seu function.php você pode criar ícones personalizados para tipos de postagem personalizados; mas […]

Adicionar um comentário

Ficamos felizes que você tenha escolhido deixar um comentário. Por favor, tenha em mente que todos os comentários são moderados de acordo com nossa política de privacidade, e todos os links são nofollow. NÃO use palavras-chave no campo do nome. Vamos ter uma conversa pessoal e significativa.

Checklist de Lançamento WordPress

O Checklist Definitivo para Lançamento de WordPress

Compilamos todos os itens essenciais da lista de verificação para o lançamento do seu próximo site WordPress em um e-book prático.
Sim, envie-me o eBook Gratuito!