web-dev-qa-db-fra.com

Statut de poste personnalisé ne fonctionne pas

J'essaie de créer deux statuts personnalisés ". J'ai utilisé le Codex pour générer le code et cela n'a pas fonctionné. Ensuite, je suis allé sur http://generatewp.com/post-status et cela n'a pas fonctionné non plus. Il n'apparaît pas dans le menu déroulant à côté de "Statut" dans "Modifier le message".

Voyez-vous quelque chose de mal avec mon code?

// ***** http://generatewp.com/post-status **** //

function custom_post_status() {

$args = array(
'label' => 'Reserve',
'label_count' => 'Reserve (%s)',
'public' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'Reserve', $args );

}

add_action( 'init', 'custom_post_status', 0 );

function custom_post_status_2() {

$args = array(
'label' => 'Ready to be Scheduled',
'label_count' => 'Ready to be Scheduled (%s)',
'public' => false,
'show_in_admin_all_list' => true,
'show_in_admin_status_list' => true,
'exclude_from_search' => false,
);
register_post_status( 'Ready to be Scheduled', $args );

}

add_action( 'init', 'custom_post_status_2', 0 );

Je vous remercie!

5
Tara

Les valeurs post status semblent être codées en dur dans le noyau. Voici le code de la case d'état pour l'écran d'édition:

<span id="post-status-display">
<?php
switch ( $post->post_status ) {
        case 'private':
                _e('Privately Published');
                break;
        case 'publish':
                _e('Published');
                break;
        case 'future':
                _e('Scheduled');
                break;
        case 'pending':
                _e('Pending Review');
                break;
        case 'draft':
        case 'auto-draft':
                _e('Draft');
                break;
}
?>
</span>

Le Codex dit :

AVIS: Cette fonction n'ajoute pas le statut de la publication enregistrée au panneau d'administration. Cette fonctionnalité est en attente de développement futur. Veuillez vous référer au ticket Trac n ° 12706. Considérez le hook d’action post_submitbox_misc_actions pour ajouter ce paramètre.

Le billet # 12706 a été créé il y a 5 ans!

Donc, je ne pense pas que cela soit actuellement pris en charge par le noyau.

Si vous modifiez manuellement le statut d'une publication, en une publication personnalisée, vous le verrez alors dans les onglets de l'écran edit.php.

Test sur WP 4.1:

Quand j'essaie l'exemple du Codex:

function my_custom_post_status(){
        register_post_status( 'unread', array(
                'label'                     => _x( 'Unread', 'post' ),
                'public'                    => true,
                'exclude_from_search'       => false,
                'show_in_admin_all_list'    => true,
                'show_in_admin_status_list' => true,
                'label_count'               => _n_noop( 'Unread <span class="count">(%s)</span>', 'Unread <span class="count">(%s)</span>' ),
        ) );
}
add_action( 'init', 'my_custom_post_status' );

et modifiez manuellement le statut d'une publication en unread, le statut de cette publication est not et apparaît dans la méta-boîte:

Missing status

D'autre part, il apparaît dans les onglets de l'écran edit.php:

Shows in the edit.php tabs

5
birgire

Je changerais la priorité sur add_action en 1 et verrais si cela résout le problème.

À ma connaissance, la priorité doit être un entier compris entre 1 et 99 inclus.

Utilisez 0 ou 100+ et je ne crois pas que votre action sera déclenchée.

Je vous recommanderais également de modifier les noms de vos statuts enregistrés pour qu'ils correspondent à ceux qui existent (par exemple, toutes les minuscules sans espaces et probablement courtes). Vous pouvez vérifier la colonne post_status de la table wp_posts pour connaître les limites, mais essayez:

register_post_status( 'reserve', $args );

register_post_status( 'ready', $args );

Vos étiquettes leur donneront une apparence décente.

0
Privateer