Möchten Sie für jeden Beitrag, den ein Autor erstellt, eine benutzerdefinierte Statusmeldung hinzufügen? Es gibt wahrscheinlich ein Plugin dafür, aber wir haben einen schnellen Code-Schnipsel erstellt, den Sie verwenden können, um benutzerdefinierte Beitragsstatusmeldungen in WordPress im Adminbereich zu erstellen.
Anweisungen:
Sie müssen diesen Code nur zur functions.php-Datei Ihres Themes oder in ein websitespezifisches Plugin einfügen.
Nur Benutzer mit der Berechtigung publish_posts können den Status ändern, während jeder sieht, wie der Status ist (wenn er festgelegt ist). Sie können die Statusbenachrichtigung entfernen, indem Sie keine auswählen.
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"] );
}
}
Hinweis: Wenn Sie zum ersten Mal Code-Schnipsel in WordPress hinzufügen, lesen Sie bitte unseren Leitfaden, wie Sie Code-Schnipsel richtig in WordPress hinzufügen, damit Sie Ihre Website nicht versehentlich beschädigen.
Wenn Ihnen dieser Code-Schnipsel gefallen hat, ziehen Sie bitte in Betracht, unsere anderen Artikel auf der Website zu lesen, wie z. B.: So erstellen Sie beeindruckende WordPress-Opt-in-Formulare und 10 beste WordPress-Testimonial-Plugins.
GROSSARTIG!!!!!!!!!!!!! Hat mir das Leben gerettet!
Hallo, gibt es eine Möglichkeit, diese Funktion für Nicht-Administratoren in WordPress auszublenden?
Wenn Sie alle Aspekte für normale Benutzer entfernen möchten, könnten Sie einfach Folgendes mit den Hooks tun:
if(is_admin()){
add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
add_filter( ‘display_post_states’, ‘custom_post_state’ );
}
Wenn Sie den Status anzeigen möchten, aber Nicht-Admin-Benutzern nicht die Möglichkeit geben möchten, ihn zu ändern, können Sie dasselbe tun, aber nur mit der Funktion, die die Schnittstellenoptionen anzeigt.
if(is_admin()){
add_action( ‘post_submitbox_misc_actions’, ‘custom_status_metabox’ );
}
Ich habe dies nicht getestet, aber es sollte funktionieren,
unten, nicht drinnen. 🙂
WHooops 🙂 danke
[...] [Quelle: WPSNIPP] [...]
[...] WordPress-Theme ermöglicht es Ihnen, benutzerdefinierte Beitragsstatusmeldungen zu erstellen. Dies ist eine aktualisierte Version von (Benutzerdefinierte Beitragsstatusmeldungen im Adminbereich erstellen) mit einigen zusätzlichen Funktionen. Nur Benutzer mit der Berechtigung „publish_posts“ können [...]
Tolles Addon 😉 Ich habe mich gefragt, ob ich es auf meinem WP 3.1.3 ausprobiert habe und es funktioniert großartig. Das Einzige, was ich fragen wollte, ist, wie ich den Status entfernen kann, nachdem der Artikel erneut hochgeladen wurde. Ich habe versucht, „Benutzerdefiniert“ oder „——“ zu verwenden, aber dann wird einer davon auch in der Liste „Beiträge“ angezeigt.
Der einfache Weg wäre, display:none; auf einen der von Ihnen erstellten Status zu setzen, z. B.: .final{display:none;} Es würde den Status immer noch erstellen, ihn aber nicht anzeigen.
Danke dafür! Ich habe Ihren Code angepasst, um den Status zu löschen, wenn er auf „Keine“ gesetzt ist. Ebenfalls enthalten, damit nur diejenigen, die „publish_posts“ können, den Status ändern können, während alle natürlich die gespeicherten Ergebnisse sehen.
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’ );
Benutzerdefinierter Status:
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;
Wenn der Status auf „Keine“ gesetzt ist, möchten wir diese Einstellung löschen.
else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
if ( $_POST[“ourstatus”] == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
}
}
Cool Gabriel, schönes Update, du solltest mich über http://wpsnipp.com/contact/ kontaktieren, damit ich das Update mit deinem Namen als Autor posten kann.
Habe den Code leicht modifiziert, deiner hatte Syntaxfehler und du hast „foreach“ statt „for“ verwendet.
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;
// Verfügbare Statusse
$custom_status = array( ‘Keine’, ‘Rechtschreibung’, ‘Überprüfung’, ‘Fehler’, ‘Quelle’, ‘Abgelehnt’, ‘Endgültig’ );
echo ‘Benutzerdefinierter 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;
Wenn der Status auf „Keine“ gesetzt ist, möchten wir diese Einstellung löschen.
else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
if ( $_POST[“ourstatus”] == ‘None’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
}
}
else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
wirft einen Fehler: Undefined index: ourstatus
Also habe ich das gemacht:
if ( isset($_POST[“ourstatus”]) == ‘Keine’ ) delete_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
else update_post_meta( $post_id, “_status”, $_POST[“ourstatus”] );
wirft denselben Fehler: Undefined index: ourstatus
also habe ich dasselbe getan:
if ( isset($_POST[“ourstatus”]) == ‘Keine’ ) delete_post_meta( $post_id, “_status”, isset($_POST[“ourstatus”] ));
Aber ich kann diesen letzten Fehler nicht beheben:
Undefined index: ps_right_now in . . . wp-content/plugins/post-status-menu-items/cms_post_status_menu.php
Hallo Antonin,
Dies ist eine sehr späte Antwort, aber ich wollte Sie wissen lassen, dass ich glaube, dass der letzte Fehler, den Sie erwähnt haben, heute Morgen in Version 1.3.3 von Post Status Menu Items behoben wurde.
[…] ist ein großartiger Schnipsel von Kevin Chard und wenn Sie diesen Schnipsel zu Ihrer function.php hinzufügen, können Sie benutzerdefinierte Icons für benutzerdefinierte Beitragstypen erstellen; aber […]