web-dev-qa-db-fra.com

Nouveau statut de publication pour le type de publication personnalisé

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

Il est actuellement en cours d'importation 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 n'a pas semblé 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 pour l'aide avec ceci.

12
dclawson

Il existe une excellente description étape par étape de la procédure à suivre ici http://jamescollings.co.uk/blog/wordpress-create-custom-post-status/

Pour ajouter votre statut de publication personnalisé au menu déroulant, ajoutez simplement ce qui suit au script de fonction de votre thème:

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

Avec cela, vous avez votre statut de message personnalisé opérationnel en 5 minutes, ce qui m'a fait gagner beaucoup de temps!

9
Larzan

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

Toutefois, si vous vous attendez à ce qu'il apparaisse dans la liste déroulante de l'administrateur, il s'agit d'un problème d'actualité: https://core.trac.wordpress.org/ticket/12706

7
vancoder

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 métaboxe de publication de l'écran de modification de publication personnalisé "recettes", 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 personnalisée de la publication:

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 personnalisée de la publication:

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