Nuovo stato dei post per un tipo di post personalizzato

4 mar 2013, 19:34:58
Visualizzazioni: 33.8K
Voti: 18

Ho un tipo di post personalizzato recipes. Sto utilizzando 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 del post chiamato Aggregated che elencherà tutte le notizie aggregate da pubblicare?

Ho provato a utilizzare la funzione register_post_status, tuttavia non sembra funzionare:

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

Grazie per l'aiuto.

4
Commenti

Penso che il codice sia corretto. Forse hai questa sorgente in un'altra funzione per chiamarla. Quando esegui l'add_action()?

bueltge bueltge
4 mar 2013 21:36:55

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

AltDan AltDan
5 mar 2013 00:03:18

L'add_action('init') è dentro una classe o funzione, lì stai chiamando un altro hook. È possibile che lo avvii troppo tardi e l'hook init non possa essere attivato.

bueltge bueltge
5 mar 2013 16:13:38

Come hai risolto questo problema? Ho esattamente lo stesso problema adesso. Vorrei aggiungere il nuovo stato personalizzato al menu a discesa dell'area di amministrazione dei custom-post, che permette all'utente di selezionare (In Revisione, Bozza, NUOVO_STATO_PERSONALIZZATO) dalla lista degli stati...

Greeso Greeso
24 ago 2013 12:19:41
Tutte le risposte alla domanda 4
4
15

C'è una fantastica descrizione passo passo su come farlo qui https://www.jclabs.co.uk/create-custom-post-status-in-wordpress-using-register_post_status/

Per aggiungere il tuo stato personalizzato al menu a discesa, aggiungi semplicemente quanto segue al file functions.php del tuo tema:

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 avrai il tuo stato personalizzato attivo e funzionante in 5 minuti, mi ha fatto risparmiare un sacco di tempo!

8 nov 2013 19:21:43
Commenti

Il link è rotto. Ecco la versione più recente su archive.org.

rinogo rinogo
1 ago 2019 05:55:24

@rinogo grazie mille, ho sostituito con il link archive.org che hai fornito

Larzan Larzan
2 ago 2019 14:01:07

Ecco un link aggiornato all'articolo sul nuovo sito di James Collings: https://www.jclabs.co.uk/create-custom-post-status-in-wordpress-using-register_post_status/

joehanna joehanna
1 feb 2022 02:57:39

Grazie @joehanna ho aggiornato il link :)

Larzan Larzan
3 feb 2022 12:58:17
0
10

Il tuo codice dovrebbe essere corretto e dovrebbe aggiungere lo stato desiderato all'array globale $wp_post_statuses.

Se però ti aspetti che venga visualizzato nel menu a discesa dell'amministrazione, questo è un problema noto: https://core.trac.wordpress.org/ticket/12706

5 mar 2013 02:28:40
1
10

Registra uno stato del post "aggregated" per il tipo di post personalizzato "recipes":

register_post_status( 'aggregated', array(
                    'label'                     => _x( 'Aggregated', 'etichetta stato del post', 'plugin-domain' ),
                    'public'                    => true,
                    'label_count'               => _n_noop( 'Aggregated <span class="count">(%s)</span>', 'Aggregated <span class="count">(%s)</span>', 'plugin-domain' ),
                    'post_type'                 => array( 'recipes' ), // Definisci uno o più tipi di post a cui lo stato può essere applicato.
                    '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 schermata di modifica del post personalizzato "recipes", aggiungi lo stato personalizzato nel dropdown del metabox "Pubblica" e modifica l'etichetta del pulsante "Salva Bozza" se lo stato selezionato è "aggregated":

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("Salva Aggregated");
           }
           var jSelect = $("select#post_status");
                
           $("a.save-post-status").on("click", function(){
                
                if( jSelect.val() == "aggregated" ){
                    
                    $("input#save-post").val("Salva Aggregated");
                }
           });
      });
     

SD;

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

});

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

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

Mostra il totale dello stato del post personalizzato nella griglia di amministrazione del post personalizzato:

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

    if( $post->post_type == 'recipes') {
        if ( get_query_var( 'post_status' ) != 'aggregated' ) { // non per le pagine con tutti i post di questo stato
            if ( $post->post_status == 'aggregated' ) {
                return array( 'Aggregated' );
            }
        }
    }
    return $statuses;
});
14 set 2018 22:57:22
Commenti

Esattamente quello che stavo cercando. Tuttavia, mancano ancora gli stati personalizzati dei post nel menu a discesa degli stati per la modifica in blocco dei post.

martin schwartz martin schwartz
4 set 2019 19:39:01
0

Ecco il codice funzionante per WP 6.2 senza utilizzare JQuery

// 1. Registra uno stato personalizzato "aggregato" per i post

add_action('init', 'add_custom_post_status');
function add_custom_post_status()
{
    register_post_status('aggregated', array(
        'label'                     => _x('Aggregato', 'ricette'),
        'public'                    => true,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop('Aggregato<span class="count">(%s)</span>', 'Aggregato <span class="count">(%s)</span>'),
    ));
}

// 2. Nella schermata di modifica del post: aggiungi lo stato personalizzato al dropdown

add_action('admin_footer-post.php', 'append_post_status_list');
function append_post_status_list()
{
    global $post;

    if ($post->post_type != 'recipes') {
        return;
    }

    $selected = 'false';
    $setStatus = '';
    if ($post->post_status == 'aggregated') {
        $selected = 'true';
        $setStatus = 'document.getElementById("post-status-display").innerHTML = "Aggregato";';
    }
    echo '
          <script>
            document.getElementById("post_status").appendChild(new Option("Aggregato", "aggregated", ' . $selected . '));
            ' . $setStatus . '
          </script>
          ';
}

// 3. Nella schermata di modifica rapida (pagina elenco): aggiungi lo stato personalizzato al dropdown

add_action('admin_footer-edit.php', function () {    
    global $post;
    if ($post->post_type != 'recipes') {
        return;
    }

    echo '
    <script>
        document.querySelectorAll("select[name=\"_status\"]").forEach((s) => {
            s.appendChild(new Option("Aggregato", "aggregated"));
        });
    </script>';
});
31 mar 2023 13:28:47