Snippets e Shortcodes

Crie status personalizados em posts WordPress

Google+ Pinterest LinkedIn Tumblr
Anúncios Google

Quem administra blogs e sites com mais de um autor no WordPress provavelmente já andou às voltas com plugins para criar avisos aos colaboradores, como sugestões de revisão e/ou reprovação de conteúdo. Com o método mostrado abaixo você vai criar um sistema simples de status personalizados para as publicações, que serão visíveis em mensagens no painel de administração e, se quiser, dentro dos posts.

Resumindo o funcionamento: digamos que você precisa avaliar posts de colaboradores registrados no site, com rótulos como “Aprovado”, “Reprovado”, etc. Assim, no ciclo normal de trabalho, o colaborador vai entrar no site, escrever o artigo e enviar para a revisão.

Quando você, administrador, abrir o artigo para a revisão, terá um campo extra para rotular o post. Se ele está ok para a publicação, marque como “Aprovado” e publique; se foi reprovado por alguma razão, “Reprovado”, e assim por diante, com quantos status precisar.

Esse status será salvo junto com o post, e quando o colaborador voltar ao site, verá o status na lista de artigos, como abaixo:

status de post WordPress reprovado

Com a segunda parte do snippet, também podem ser inseridas mensagens personalizadas dentro do post; um status “expandir”, por exemplo, serviria para artigos colaborativos precisando de revisão e deixaria uma mensagem no fim do post, algo assim:

status de post WordPress mensagem

Chega de exemplos, acho que você já entendeu. Vamos ao código.

Comece adicionando o seguinte ao arquivo functions.php do seu tema:

// cria a caixa de status
function custom_status_metabox() {
    global $post;
    $custom = get_post_custom($post->ID);
    $status = $custom["_status"][0];
    $i = 0;
    /* ------------------------------------------ */
    /*   Array de status, modifique como quiser   */
    /* ------------------------------------------ */
    $custom_status = array(
	         'Ortografia',
		 'Formatação',
		 'Expandir',
		 'Reprovado',
		 'Aprovado'
		 );
    echo '<div class="misc-pub-section custom">';
    echo '<label>Status: </label><select name="status">';
    echo '<option class="default">Na Fila</option>';
    echo '<option>-----------------</option>';
        for ($i = 0; $i < count($custom_status); $i++) {
         if ($status == $custom_status[$i]) {
             echo '<option value="'. $custom_status[$i] .'" selected="true">'. $custom_status[$i] .'</option>';
        }
		else { 
		echo '<option value="'. $custom_status[$i] .'">'. $custom_status[$i] .'</option>'; }
        }
    echo '</select>';
    echo '<br /></div>';
}
// salva o status
function save_status() {
    global $post;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
    	return $post->ID;
    }
    update_post_meta($post->ID, "_status", $_POST["status"]);
}
// status só pode ser editado por admin
    if ( current_user_can('update_core') ) {
	    add_action( 'post_submitbox_misc_actions', 'custom_status_metabox' );
	    add_action('save_post', 'save_status');
    }

// estilos dos status
function status_css() {
    echo '<style type="text/css">
    .default{ font-weight:bold; }
    .custom{ border-top:solid 1px #e5e5e5; }
    .custom_state { font-size:9px; color:#666; background:#e5e5e5; padding:3px 6px 3px 6px; }
    /* ---------------------------------------------- */
    /*   aqui você pode alterar a cor das mensagens   */
    /* ---------------------------------------------- */
    .ortografia { background:#ff6c45; color:#fff; }
    .formatação { background:#ff6c45; color:#fff; }
    .expandir { background:#007eff; color:#fff; }
    .reprovado { background:#cc0000; color:#fff; }
    .aprovado { background:#30bf58; color:#fff;}
    </style>';
}
add_action('admin_head', 'status_css');

// exibe o status no painel
function custom_post_state($states) {
     global $post;
	 $show_custom_state = get_post_meta($post->ID, '_status');
	 if ($show_custom_state) {
	     $states[] = __('<span class="custom_state '. strtolower($show_custom_state[0]) .'">'. $show_custom_state[0] .'</span>');
		 }
     return $states;
}
add_filter('display_post_states', 'custom_post_state');

O código está bem comentado, acho que não preciso falar muito dele, mas resumindo o que você pode mudar: no array de status estão os status que você terá disponíveis: Ortografia, Formatação, Expandir, Reprovado e Aprovado. Você pode alterar, remover ou criar status à vontade.

Se eu quisesse mais um status, “Fonte” (para indicar que faltou a fonte da notícia), por exemplo, seria simples alterar o array:

$custom_status = array(
	         'Ortografia',
		 'Formatação',
		 'Expandir',
		 'Reprovado',
		 'Aprovado',
		 'Fonte'
		 );

Ficou claro? Se quiser alterar o estilo dos rótulos de status é fácil também, basta alterar nas classes que levam o nome do status (.ortografia, .aprovado, etc).

Então já temos a caixa de status funcionando. Abra um post para edição ou crie um, e ela deverá estar lá 100%.

status de post WordPress lista

Para definir o status, é só escolher na lista e salvar o rascunho.

Status dentro do post

Agora vamos exibir os status personalizados em posts (dentro deles, e não só no painel de controle) , como mostrado no começo. Digamos que o status “Expandir” seja o gatilho para exibir o aviso “Este artigo está marcado para expansão” no final do artigo.

Abra o arquivo single.php ou outro que tenha o loop dos posts do seu tema. No local onde quer a mensagem (pode ser antes ou depois do conteúdo) insira o seguinte:

<?php // checa status; se for Expandir, mostre aviso
$key = '_status';
$the_meta = get_post_meta( $post->ID, $key, TRUE );
if( $the_meta == 'Expandir' ) {
     echo '<div id="post-status">Este artigo está marcado para expansão.</div>';
	 }
?>

Aí é só criar o estilo da sua div “#post-status” como quiser (faça a estilização no aquivo style.css). Teste aí e diga o que aconteceu.

Fundador do Tutoriart em 2010, é ex-instrutor de Photoshop, design web e gráfico. Em quase uma década de redação online, tem cerca de 1500 artigos publicados. Gerencia também o Memória BIT.

Deixe um Comentário

Pin