X

Creați mesaje personalizate pentru starea postărilor în administrator

Fragmente de IsItWP

Doriți să adăugați o stare personalizată pentru fiecare postare pe care o creează un autor? Deși probabil există un plugin pentru asta, am creat o scurtă secțiune de cod pe care o puteți folosi pentru a crea mesaje personalizate de stare a postărilor în administratorul WordPress.

Instrucțiuni:

Tot ce trebuie să faceți este să adăugați acest cod în fișierul functions.php al temei dvs. sau într-un plugin specific site-ului.

Doar utilizatorii cu permisiunea publish_posts pot schimba starea, în timp ce toată lumea vede care este starea (dacă este setată). Puteți elimina notificarea de stare selectând nicio opțiune.

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

Notă: Dacă aceasta este prima dată când adăugați fragmente de cod în WordPress, consultați ghidul nostru despre cum să adăugați corect fragmente de cod în WordPress, pentru a nu vă defecta accidental site-ul.

Dacă v-a plăcut această secțiune de cod, vă rugăm să luați în considerare citirea altor articole de pe site, cum ar fi: Cum să creați formulare de abonare WordPress uimitoare și 10 cele mai bune pluginuri pentru testimoniale WordPress.

Comentarii   Lasă un răspuns

  1. Edson Santoro June 6, 2012 at 3:17 am

    GROZAV!!!!!!!!!!!!! Mi-a salvat viața!

  2. salut, există vreo șansă să ascundem această funcționalitate de administratorii non-admin în WordPress?

    1.  Dacă doriți să eliminați toate aspectele de la utilizatorii obișnuiți, ați putea face ceva de genul acesta cu hook-urile,

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

      Dacă doriți să afișați starea, dar să nu oferiți utilizatorilor non-admin acces pentru a o schimba, puteți face același lucru, dar doar cu funcția care afișează opțiunile de interfață.

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

      Nu am testat asta, dar ar trebui să funcționeze,

  3. jos, nu jos. 🙂

    1. WHooops 🙂 mulțumesc

  4. 29 Wordpress Tweaks to Improve Posts and Pages October 18, 2011 at 9:03 am

    […] [Sursă: WPSNIPP] […]

  5. Wordpress Update: Create custom post status mesasges in admin – 400+ Wordpress code snippets for your blog July 19, 2011 at 9:01 am

    […] tema WordPress vă va permite să creați mesaje personalizate de stare a postărilor. Aceasta este o versiune actualizată a (Crearea mesajelor personalizate de stare a postărilor în administrator) adăugând câteva funcționalități suplimentare. Doar utilizatorii cu permisiunea „publish_posts” pot […]

  6. Un addon grozav 😉  Mă întrebam, l-am încercat pe WP 3.1.3 și funcționează grozav. Singurul lucru pe care voiam să-l întreb este cum pot elimina starea, după ce articolul a fost reîncărcat. Am încercat să folosesc „Custom” sau „——”, dar apoi unul dintre acestea apare și în lista „Postări”. 

    1. Calea ușoară ar fi să setați display:none; pe una dintre stările pe care le creați, de ex: .final{display:none;} ar crea în continuare starea, doar că nu ar afișa-o.

      1. Gabriel Merovingi July 16, 2011 at 1:35 am

        Mulțumesc pentru asta! Am ajustat codul dvs. pentru a șterge starea dacă este setată la „None”. Am inclus, de asemenea, ca doar cei care pot „publish_posts” să poată schimba starea, în timp ce toată lumea vede rezultatele salvate, desigur.

        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 ‘Statut personalizat: ‘;

        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;

        // If the status is set to “None” we want to delete this setting.

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

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

        }
        }

        1. Super Gabriel, actualizare bună, ar trebui să mă contactezi prin http://wpsnipp.com/contact/Așa că pot posta actualizarea atribuită ție ca autor al postării.

        2. Alexander Janus October 19, 2011 at 6:41 pm

          Am făcut o mică modificare la cod, al tău avea erori de sintaxă și ai folosit „foreach” în loc 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( ‘None’, ‘Spelling’, ‘Review’, ‘Errors’, ‘Source’, ‘Rejected’, ‘Final’ );

          echo ‘Custom status: ‘;
          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;

          // If the status is set to “None” we want to delete this setting.

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

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

          }
          }

          1. hookedonweb_usa June 27, 2013 at 12:33 am

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

            generează o eroare: Undefined index: ourstatus

            Așa că am făcut asta:

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

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

            generează aceeași eroare: Undefined index: ourstatus

            așa că am făcut același lucru:

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

            Dar nu pot să scap de această ultimă eroare:

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

          2. Salut Antonin,

            Acesta este un răspuns foarte întârziat, dar voiam să vă informez că cred că ultima eroare pe care ați menționat-o a fost remediată astăzi dimineață în versiunea 1.3.3 a Post Status Menu Items.

  7. How to create custom status icons for custom post | WpCode.net June 10, 2011 at 11:37 pm

    […] este un fragment grozav scris de Kevin Chard și aplicând acest fragment la funcția dvs.php puteți crea pictograme personalizate pentru tipul de postare personalizat; dar […]

Adaugă un comentariu

Suntem bucuroși că ați ales să lăsați un comentariu. Vă rugăm să rețineți că toate comentariile sunt moderate conform politicii noastre de confidențialitate, iar toate linkurile sunt nofollow. NU folosiți cuvinte cheie în câmpul nume. Să avem o conversație personală și semnificativă.

Lista de verificare pentru lansarea WordPress

Lista de verificare finală pentru lansarea WordPress

Am compilat toate elementele esențiale de verificare pentru lansarea următorului dvs. site WordPress într-o singură carte electronică la îndemână.
Da, trimite-mi eBook-ul gratuit!