X

Crea Messaggi di Stato Post Personalizzati in Amministrazione

Snippet di IsItWP

Vuoi aggiungere un messaggio di stato personalizzato per ogni post creato da un autore? Sebbene esista probabilmente un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per creare messaggi di stato personalizzati per i post nell'area di amministrazione di WordPress.

Istruzioni:

Tutto quello che devi fare è aggiungere questo codice al file functions.php del tuo tema o in un plugin specifico per il sito.

Solo gli utenti con la capacità publish_posts possono cambiare lo stato, mentre tutti vedono qual è lo stato (se impostato). Puoi rimuovere la notifica di stato selezionando nessuno.

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"] );
	}
}

Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come aggiungere correttamente snippet di codice in WordPress, in modo da non compromettere accidentalmente il tuo sito.

Se ti è piaciuto questo snippet di codice, prendi in considerazione la lettura dei nostri altri articoli sul sito come: Come creare splendidi moduli di optin WordPress e I 10 migliori plugin per testimonianze WordPress.

Commenti   Lascia una risposta

  1. Edson Santoro 6 giugno 2012 alle 3:17

    OTTIMO!!!!!!!!!!!!! Mi hai salvato la vita!

  2. ciao, c'è qualche possibilità di nascondere questa funzionalità ai non amministratori in wordpress?

    1.  Se vuoi rimuovere tutti gli aspetti dagli utenti normali, potresti semplicemente fare qualcosa di simile con gli hook,

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

      Se vuoi visualizzare lo stato ma non dare agli utenti non amministratori la possibilità di cambiarlo, puoi fare la stessa cosa ma solo con la funzione che visualizza le opzioni dell'interfaccia.

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

      Non l'ho testato ma dovrebbe funzionare,

  3. below, non bellow. 🙂

    1. WHooops 🙂 grazie

  4. 29 Tweaks di WordPress per Migliorare Post e Pagine 18 ottobre 2011 alle 09:03

    [...] [Fonte: WPSNIPP] [...]

  5. Aggiornamento WordPress: Crea messaggi di stato personalizzati per i post nell'area di amministrazione – 400+ snippet di codice WordPress per il tuo blog 19 luglio 2011 alle 9:01

    [...] il tema di wordpress ti permetterà di creare messaggi di stato personalizzati per i post. Questa è una versione aggiornata di (Crea messaggi di stato personalizzati per i post nell'area di amministrazione) aggiungendo alcune funzionalità aggiuntive. Solo gli utenti con la capacità "publish_posts" possono [...]

  6. Ottima estensione 😉  Mi stavo chiedendo, l'ho provata sul mio WP 3.1.3 e funziona benissimo. L'unica cosa che volevo chiedere è come posso rimuovere lo stato, dopo che l'articolo è stato ri-caricato. Ho provato a usare "Custom" o "---" ma uno di questi viene visualizzato anche nell'elenco "Post". 

    1. Il modo più semplice sarebbe impostare display:none; su uno degli stati che crei, ad esempio: .final{display:none;} creerebbe comunque lo stato ma non lo visualizzerebbe.

      1. Gabriel Merovingi 16 luglio 2011 alle 1:35

        Grazie per questo! Ho modificato il tuo codice per eliminare lo stato se impostato su "None". Ho anche incluso in modo che solo coloro che possono "publish_posts" possano cambiare lo stato, mentre tutti vedono i risultati salvati, ovviamente.

        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( ‘None’, ‘Spelling’, ‘Review’, ‘Errors’, ‘Source’, ‘Rejected’, ‘Final’ );

        echo ‘Stato personalizzato: ‘;

        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 lo stato è impostato su “Nessuno” vogliamo eliminare questa impostazione.

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

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

        }
        }

        1. Ottimo Gabriel, bel aggiornamento, dovresti contattarmi tramite http://wpsnipp.com/contact/Così posso pubblicare l'aggiornamento attribuito a te come autore del post.

        2. Alexander Janus 19 ottobre 2011 alle 18:41

          Ho apportato una leggera modifica al codice, il tuo aveva errori di sintassi e hai usato “foreach” invece di “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( ‘Nessuno’, ‘Ortografia’, ‘Revisione’, ‘Errori’, ‘Origine’, ‘Rifiutato’, ‘Finale’ );

          echo ‘Stato personalizzato: ‘;
          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 lo stato è impostato su “Nessuno” vogliamo eliminare questa impostazione.

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

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

          }
          }

          1. hookedonweb_usa 27 giugno 2013 alle 12:33

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

            sta generando un errore: Undefined index: ourstatus

            Quindi ho fatto questo:

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

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

            sta generando lo stesso errore: Undefined index: ourstatus

            quindi ho fatto la stessa cosa:

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

            Ma non riesco a risolvere questo ultimo errore:

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

          2. Ciao Antonin,

            Questa è una risposta molto tardiva, ma volevo farti sapere che credo che l'ultimo errore che hai menzionato sia stato corretto stamattina nella versione 1.3.3 di Post Status Menu Items.

  7. Come creare icone di stato personalizzate per post personalizzati | WpCode.net 10 giugno 2011 alle 23:37

    […] è un ottimo snippet scritto da Kevin Chard e applicando questo snippet al tuo function.php puoi creare icone personalizzate per tipi di post personalizzati; ma […]

Aggiungi un commento

Siamo lieti che tu abbia scelto di lasciare un commento. Tieni presente che tutti i commenti sono moderati secondo la nostra normativa sulla privacy e tutti i link sono nofollow. NON utilizzare parole chiave nel campo del nome. Avviamo una conversazione personale e significativa.

Checklist per il lancio di WordPress

La Guida Definitiva per il Lancio di WordPress

Abbiamo raccolto tutti gli elementi essenziali della checklist per il lancio del tuo prossimo sito web WordPress in un comodo ebook.
Sì, Inviami l'eBook Gratuito!