Nouveau statut de publication pour le type de publication personnalisé

12

J'ai une publication personnalisée de type recipes . J'utilise un script cron pour regrouper automatiquement les nouvelles dans la base de données.

Il est en train d'être importé et enregistré en tant que "Révision en attente". Est-il possible de créer un autre statut de publication appelé Aggregated qui répertoriera toutes les nouvelles agrégées à publier?

J'ai essayé d'utiliser la fonction register_post_status , mais cela ne semblait pas fonctionner:

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

Merci de l'aide pour cela.

    
posée dclawson 04.03.2013 - 18:34

3 réponses

9

Il existe une excellente description étape par étape pour savoir comment procéder. enlace

Pour ajouter votre statut de publication personnalisé au menu déroulant, ajoutez simplement le texte suivant à votre script de fonction de thèmes:

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

Grâce à cela, votre statut de message personnalisé est opérationnel en moins de 5 minutes et vous m'a fait gagner beaucoup de temps!

    
réponse donnée Larzan 08.11.2013 - 18:21
7

Votre code doit être solide et doit ajouter l'état souhaité au tableau global $ wp_post_statuses.

Si vous vous attendez à ce qu'il apparaisse dans le menu déroulant de l'administrateur, il s'agit d'un problème récurrent: enlace

    
réponse donnée vancoder 05.03.2013 - 01:28
0

Enregistrer un statut de publication "agrégé" pour un type de publication personnalisé "recettes":

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

Dans la boîte à outils de publication de l'écran de modification de publication personnalisé, ajoutez le statut de publication personnalisée dans le menu déroulant et modifiez le libellé du bouton "Enregistrer le brouillon" si le statut de publication sélectionné est "agrégé":

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

});

Ajoutez le statut de la publication personnalisée dans l'écran de modification rapide de la grille de la publication personnalisée:

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

Affichez le total du statut de la publication personnalisée dans la grille de la publication personnalisée:

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;
});
    
réponse donnée sudip 14.09.2018 - 21:57

Lire d'autres questions sur les étiquettes