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 trechos de código no WordPress, consulte nosso guia sobre como adicionar trechos de código corretamente no WordPress, para não quebrar acidentalmente seu site.
Se você gostou deste snippet de código, considere conferir nossos outros artigos no site, como: Como criar formulários de optin incríveis no WordPress e 10 melhores plugins de depoimentos para WordPress.
ÓTIMO!!!!!!!!!!!!! Salvou minha vida!
olá, há alguma chance de ocultar este recurso de não administradores no wordpress?
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,
abaixo, não bellow. 🙂
WHooops 🙂 ty
[…] [Fonte: WPSNIPP] […]
[…] 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 […]
Ó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.
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.
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”] );
}
Legal Gabriel, ótima atualização, você deveria entrar em contato comigo via http://wpsnipp.com/contact/So para que eu possa publicar a atualização atribuída a você como autor do post.
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”] );
}
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
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.
[…] é 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 […]