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.
GROZAV!!!!!!!!!!!!! Mi-a salvat viața!
salut, există vreo șansă să ascundem această funcționalitate de administratorii non-admin în WordPress?
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,
jos, nu jos. 🙂
WHooops 🙂 mulțumesc
[…] [Sursă: WPSNIPP] […]
[…] 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 […]
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”.
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.
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”] );
}
}
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.
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”] );
}
}
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
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.
[…] 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 […]