Nouveau statut de publication pour le type de publication personnalisé

13

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

Il est actuellement importé et enregistré en tant que «examen en attente». Est-il possible de créer un autre statut de publication appelé Aggregatedqui répertoriera toutes les nouvelles agrégées à publier?

J'ai essayé d'utiliser la register_post_statusfonction, mais cela ne semble 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 pour votre aide.

dclawson
la source
Je pense que le code est juste. Peut-être que vous avez cette source dans une autre fonction pour l'appeler. Lorsque vous exécutez add_action ()?
bueltge
Pourriez-vous expliquer votre réponse plus en détail? Merci!
dclawson
L'add_action ('init' se trouve-t-elle dans une classe ou une fonction, vous y appelez à propos d'un autre hook. Il est possible que vous commenciez cela à lat et que le hook init ne puisse pas être déclenché.
bueltge
Comment avez-vous résolu ce problème? J'ai exactement le même problème maintenant. J'aime ajouter le nouveau statut personnalisé à la liste déroulante de la zone d'administration de la publication personnalisée, qui permet à l'utilisateur de sélectionner (Pendig Reveiw, Draft, NEW_CUSTOM_STATUS) dans la liste Stati ...
Greeso

Réponses:

9

Il y a une grande description étape par étape sur la façon de le faire 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 à 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>
      ';
  }
}

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

Larzan
la source
1
Le lien est rompu. Voici la version la plus récente sur archive.org .
rinogo
@rinogo thanks man, a basculé sur le lien archive.org que vous avez fourni
Larzan
7

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

Si vous vous attendez à ce qu'il apparaisse dans la liste déroulante d'administration, cependant, il s'agit d'un problème permanent: https://core.trac.wordpress.org/ticket/12706

vancoder
la source
1

Enregistrez un statut de publication "agrégé" pour le 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 personnalisé de modification des recettes, ajoutez le statut du message personnalisé dans la liste déroulante et modifiez le libellé du bouton "Enregistrer le brouillon" si le statut du message 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 publication personnalisé dans l'écran d'édition rapide de la grille d'administration de 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 publication personnalisé dans la grille d'administration de 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;
});
sudip
la source
Exactement ce que je cherchais. Cependant, il manque toujours le statut de publication personnalisé dans la liste déroulante de statut de modification de publication en masse.
martin schwartz