Nuovo stato dei post per il tipo di post personalizzato


13

Ho un tipo di post personalizzato recipes. Sto usando uno script cron per aggregare automaticamente le notizie nel database.

Attualmente viene importato e salvato come "In attesa di revisione". È possibile creare un altro stato di post chiamato Aggregatedche elencherà tutte le notizie aggregate da pubblicare?

Ho provato a utilizzare la register_post_statusfunzione, tuttavia questo non sembra funzionare:

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

Grazie per l'aiuto.


Penso che il codice sia giusto. Forse hai questa fonte in un'altra funzione per chiamarla. Quando eseguire add_action ()?
fusione

Potresti spiegare la tua risposta in modo più dettagliato? Grazie!
dclawson

Add_action ('init' all'interno di una classe o di una funzione, lì si chiama per un altro hook. È possibile che tu inizi questo a lat e l'hook init non può o sparato.
bueltge

Come hai risolto questo problema? Ho esattamente lo stesso problema ora. Mi piace aggiungere il nuovo stato personalizzato all'elenco a discesa dell'area di amministrazione post personalizzato, che consente all'utente di selezionare (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) dall'elenco degli Stati ...
Greeso

Risposte:


9

C'è una grande descrizione Step by Step su come farlo qui http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Per aggiungere il tuo stato di post personalizzato al menu a discesa, aggiungi quanto segue allo script della funzione temi:

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

Con questo hai il tuo stato di post personalizzato attivo e funzionante in 5 minuti, mi hai fatto risparmiare un sacco di tempo!


1
Il collegamento è interrotto. Ecco la versione più recente su archive.org .
Rinogo,

@rinogo grazie amico, è passato al link archive.org che hai fornito
Larzan,


1

Registra uno stato di post "aggregato" per il tipo di post personalizzato "ricette":

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

Nella metabox di pubblicazione della schermata di modifica del post personalizzato "ricette", aggiungendo lo stato del post personalizzato nel menu a discesa e cambiando l'etichetta del pulsante "Salva bozza" se lo stato del post selezionato è "aggregato":

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

});

Aggiungi lo stato del post personalizzato nella schermata di modifica rapida della griglia di amministrazione post personalizzata:

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

Visualizza il totale dello stato dei post personalizzati nella griglia di amministrazione dei post personalizzati:

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

Esattamente quello che stavo cercando. Tuttavia, manca ancora lo stato dei post personalizzati nel menu a discesa dello stato di modifica dei post collettivi.
Martin Schwartz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.