Nowy status postu dla niestandardowego typu postu

13

Mam niestandardowy typ postu recipes. Używam skryptu cron do automatycznego agregowania wiadomości w bazie danych.

Obecnie jest importowany i zapisywany jako „Oczekuje na sprawdzenie”. Czy można utworzyć inny status posta o nazwie, Aggregatedktóry będzie zawierał wszystkie zagregowane wiadomości do opublikowania?

Próbowałem użyć tej register_post_statusfunkcji, ale to nie działało:

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' );

Dzięki za pomoc w tym.

dclawson
źródło
Myślę, że kod jest poprawny. Być może masz to źródło w innej funkcji, aby to wywołać. Kiedy uruchomisz add_action ()?
bueltge
Czy mógłbyś bardziej szczegółowo wyjaśnić swoją odpowiedź? dzięki!
dclawson,
Jest dodatkowym działaniem („init” wewnątrz klasy lub funkcji, tam wywołujesz inny hak. Możliwe, że zaczniesz to do lat, a haczyk init nie będzie mógł wystrzelić.
bueltge
Jak rozwiązałeś ten problem? Mam teraz dokładnie ten sam problem. Chciałbym dodać nowy niestandardowy status do rozwijanej listy niestandardowego obszaru administracyjnego, który pozwala użytkownikowi wybrać (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) z listy Stati ...
Greeso

Odpowiedzi:

9

Świetny opis krok po kroku, jak to zrobić tutaj http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Aby dodać niestandardowy status wpisu do menu rozwijanego, po prostu dodaj do skryptu funkcji motywów:

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>
      ';
  }
}

Dzięki temu masz status niestandardowego posta uruchomiony w 5 minut, dzięki czemu zaoszczędziłem sporo czasu!

Larzan
źródło
1
Link jest zepsuty. Oto najnowsza wersja na archive.org .
rinogo,
@ rinogo dzięki, przełączono na podany przez Ciebie link archive.org
Larzan
7

Twój kod powinien być solidny i powinien dodać pożądany status do globalnej tablicy $ wp_post_statuses.

Jeśli jednak spodziewasz się, że pojawi się w menu rozwijanym administratora, jest to ciągły problem: https://core.trac.wordpress.org/ticket/12706

Vancoder
źródło
1

Zarejestruj status „zagregowany” dla niestandardowych „przepisów” typu postu:

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',
                ) );

W metaboxie publikowania niestandardowego ekranu edycji „receptur”, dodając niestandardowy status postu w menu rozwijanym i zmień etykietę przycisku „Zapisz wersję roboczą”, jeśli status wybranego posta jest „zagregowany”:

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>';
    }

});

Dodaj niestandardowy status wpisu na ekranie szybkiej edycji niestandardowej siatki administracyjnej wpisu:

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

Wyświetl niestandardową sumę statusu wpisu w niestandardowej siatce administratora posta:

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
źródło
Dokładnie tego szukałem. Nadal jednak brakuje niestandardowego statusu postu w menu rozwijanym statusu edycji posta zbiorczego.
martin schwartz