Neuer Beitragsstatus für benutzerdefinierten Beitragstyp

13

Ich habe einen benutzerdefinierten Beitragstyp recipes. Ich verwende ein Cron-Skript, um Nachrichten automatisch in der Datenbank zusammenzufassen.

Es wird derzeit importiert und als "Ausstehende Überprüfung" gespeichert. Ist es möglich, einen anderen Post-Status zu erstellen, Aggregatedder alle zu veröffentlichenden aggregierten Nachrichten auflistet?

Ich habe versucht, die register_post_statusFunktion zu verwenden, aber dies schien nicht zu funktionieren:

function custom_post_status(){
    register_post_status( 'aggregated', array(
        'label'                     => _x( 'Aggregated', 'recipes' ),
        'public'                    => false,
        'exclude_from_search'       => true,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Aggregated <span class="count">(%s)</span>', 'Aggregated <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'custom_post_status' );

Vielen Dank für Ihre Hilfe.

dclawson
quelle
Ich denke der Code ist richtig. Vielleicht haben Sie diese Quelle in einer anderen Funktion, um dies aufzurufen. Wann wird add_action () ausgeführt?
Bueltge
Könnten Sie bitte Ihre Antwort näher erläutern? Vielen Dank!
Dclawson
Befindet sich die add_action ('init' innerhalb einer Klasse oder Funktion, rufen Sie dort über einen anderen Hook auf. Es ist möglich, dass Sie diese lat starten und der Hook init noch ausgelöst werden kann.
bueltge
Wie haben Sie dieses Problem behoben? Ich habe jetzt genau das gleiche Problem. Ich möchte den neuen benutzerdefinierten Status zur Dropdown-Liste des Administrationsbereichs für benutzerdefinierte Posts hinzufügen, in dem der Benutzer (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) aus der Liste der Stati ...
Greeso

Antworten:

9

Es gibt eine großartige Schritt-für-Schritt-Beschreibung, wie das geht. Http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Um Ihren benutzerdefinierten Beitragsstatus zum Dropdown-Menü hinzuzufügen, fügen Sie Ihrem Themes-Funktionsskript einfach Folgendes hinzu:

add_action('admin_footer-post.php', 'jc_append_post_status_list');
function jc_append_post_status_list(){
 global $post;
 $complete = '';
 $label = '';
 if($post->post_type == 'recipes'){
      if($post->post_status == 'aggregated'){
           $complete = ' selected=\"selected\"';
           $label = '<span id=\"post-status-display\"> Aggregated</span>';
      }
      echo '
      <script>
      jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");
           $(".misc-pub-section label").append("'.$label.'");
      });
      </script>
      ';
  }
}

Damit hast du deinen benutzerdefinierten Post-Status in 5 Minuten eingerichtet und hast mir eine Menge Zeit gespart!

Larzan
quelle
1
Verbindung ist unterbrochen. Hier ist die neueste Version auf archive.org .
rinogo
@Rinogo, danke Mann, wechselte zu dem von Ihnen angegebenen Link archive.org
Larzan
7

Ihr Code sollte solide sein und dem globalen Array $ wp_post_statuses den gewünschten Status hinzufügen.

Wenn Sie jedoch erwarten, dass es im Dropdown-Menü "admin" angezeigt wird, handelt es sich um ein aktuelles Problem: https://core.trac.wordpress.org/ticket/12706

Vancoder
quelle
1

Registrieren Sie einen Beitragsstatus "aggregiert" für benutzerdefinierte Beitragstypen "Rezepte":

register_post_status( 'aggregated', array(
                    'label'                     => _x( 'Aggregated ', 'post status label', 'bznrd' ),
                    'public'                    => true,
                    'label_count'               => _n_noop( 'Aggregated s <span class="count">(%s)</span>', 'Aggregated s <span class="count">(%s)</span>', 'plugin-domain' ),
                    'post_type'                 => array( 'recipes' ), // Define one or more post types the status can be applied to.
                    'show_in_admin_all_list'    => true,
                    'show_in_admin_status_list' => true,
                    'show_in_metabox_dropdown'  => true,
                    'show_in_inline_dropdown'   => true,
                    'dashicon'                  => 'dashicons-businessman',
                ) );

Fügen Sie in der Veröffentlichungs-Metabox des benutzerdefinierten Post-Bearbeitungsbildschirms "Rezepte" den benutzerdefinierten Post-Status in der Dropdown-Liste hinzu und ändern Sie die Beschriftung der Schaltfläche "Entwurf speichern", wenn der ausgewählte Post-Status "aggregiert" ist:

add_action('admin_footer-post.php',function(){

    global $post;
    $complete = '';
    $label = '';

    if($post->post_type == 'recipes') {

        if ( $post->post_status == 'aggregated' ) {
            $complete = ' selected=\"selected\"';
            $label    = 'Aggregated';
        }

        $script = <<<SD


       jQuery(document).ready(function($){
           $("select#post_status").append("<option value=\"aggregated\" '.$complete.'>Aggregated</option>");

           if( "{$post->post_status}" == "aggregated" ){
                $("span#post-status-display").html("$label");
                $("input#save-post").val("Save Aggregated");
           }
           var jSelect = $("select#post_status");

           $("a.save-post-status").on("click", function(){

                if( jSelect.val() == "aggregated" ){

                    $("input#save-post").val("Save Aggregated");
                }
           });
      });


SD;

        echo '<script type="text/javascript">' . $script . '</script>';
    }

});

Fügen Sie den benutzerdefinierten Beitragsstatus im Schnellbearbeitungsbildschirm des benutzerdefinierten Beitragsadministrationsrasters hinzu:

add_action('admin_footer-edit.php',function() {
    global $post;
    if( $post->post_status == 'recipes' ) {
        echo "<script>
    jQuery(document).ready( function() {
        jQuery( 'select[name=\"_status\"]' ).append( '<option value=\"aggregated\">Aggregated</option>' );
    });
    </script>";
    }
});

Zeigen Sie die Gesamtzahl der benutzerdefinierten Post-Status im Raster für benutzerdefinierte Post-Administratoren an:

add_filter( 'display_post_states', function( $statuses ) {
    global $post;

    if( $post->post_type == 'recipes') {
        if ( get_query_var( 'post_status' ) != 'aggregated' ) { // not for pages with all posts of this status
            if ( $post->post_status == 'aggregated' ) {
                return array( 'Aggregated' );
            }
        }
    }
    return $statuses;
});
sudip
quelle
Genau das, wonach ich gesucht habe. Der benutzerdefinierte Post-Status wird jedoch in der Dropdown-Liste für den Status der Bulk-Post-Bearbeitung weiterhin nicht angezeigt.
Martin Schwartz