-
-
Save imath/0b046d18f9db523f5276c15c35dfddb2 to your computer and use it in GitHub Desktop.
Exemple d'utilisation de WP Statuses avec un custom post type. Vous pouvez ajouter ce fichier dans le répertoire wp-content/mu-plugins de votre WordPress.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Exemple d'utilisation de WP Statuses. | |
* | |
* @link http://github.com/imath/wp-statuses | |
*/ | |
// Exit if accessed directly. | |
defined( 'ABSPATH' ) || exit; | |
/** | |
* Initialisation du type de contenu Ticker et de statuts personnalisés. | |
* | |
* @link http://codex.wordpress.org/Function_Reference/register_post_type | |
*/ | |
function exemple_statuts_et_type_de_contenu_persos() { | |
// Initialisation du type de contenu Ticket | |
register_post_type( 'ticket', array( | |
'labels' => array( | |
'name' => _x( 'Tickets', 'post type general name', 'domaine-de-votre-extension' ), | |
'singular_name' => _x( 'Ticket', 'post type singular name', 'domaine-de-votre-extension' ), | |
'menu_name' => _x( 'Tickets', 'admin menu', 'domaine-de-votre-extension' ), | |
'name_admin_bar' => _x( 'Ticket', 'add new on admin bar', 'domaine-de-votre-extension' ), | |
'add_new' => _x( 'Ajouter nouveau', 'book', 'domaine-de-votre-extension' ), | |
'add_new_item' => __( 'Ajouter Un Ticket', 'domaine-de-votre-extension' ), | |
'new_item' => __( 'Nouveau Ticket', 'domaine-de-votre-extension' ), | |
'edit_item' => __( 'Modifier Ticket', 'domaine-de-votre-extension' ), | |
'view_item' => __( 'Voir Ticket', 'domaine-de-votre-extension' ), | |
'all_items' => __( 'Tous les tickets', 'domaine-de-votre-extension' ), | |
'search_items' => __( 'Rechercher les tickets', 'domaine-de-votre-extension' ), | |
'parent_item_colon' => __( 'Ticket parent:', 'domaine-de-votre-extension' ), | |
'not_found' => __( 'Aucun ticket trouvé', 'domaine-de-votre-extension' ), | |
'not_found_in_trash' => __( 'Aucun ticket trouvé dans la corbeille', 'domaine-de-votre-extension' ), | |
'insert_into_item' => __( 'Insérer dans le ticket', 'domaine-de-votre-extension' ), | |
'uploaded_to_this_item' => __( 'Attaché à ce ticket', 'domaine-de-votre-extension' ), | |
'filter_items_list' => __( 'Filtrer la liste des tickets', 'domaine-de-votre-extension' ), | |
'items_list_navigation' => __( 'Navigation de la liste des tickers', 'domaine-de-votre-extension' ), | |
'items_list' => __( 'Liste de tickers', 'domaine-de-votre-extension' ), | |
), | |
'description' => __( 'Illustration de WP Status pour un CPT.', 'domaine-de-votre-extension' ), | |
'public' => true, | |
'publicly_queryable' => true, | |
'show_ui' => true, | |
'show_in_menu' => true, | |
'query_var' => true, | |
'rewrite' => array( 'slug' => 'tickets' ), | |
'capability_type' => 'post', | |
'has_archive' => true, | |
'hierarchical' => false, | |
'menu_position' => null, | |
'menu_icon' => 'dashicons-tickets', // Voir https://developer.wordpress.org/resource/dashicons/#tickets | |
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ), | |
'delete_with_user' => true, | |
'can_export' => true, | |
'show_in_rest' => true, | |
) ); | |
// Initialisation du statut Anomalie | |
register_post_status( 'anomalie', array( | |
'label' => _x( 'Anomalie', 'post status', 'domaine-de-votre-extension' ), | |
'public' => true, | |
'label_count' => _n_noop( 'Anomalie <span class="count">(%s)</span>', 'Anomalies <span class="count">(%s)</span>', 'domaine-de-votre-extension' ), | |
'post_type' => array( 'ticket' ), // Ce statut ne concerne que les types de contenu "ticket" | |
'show_in_admin_all_list' => true, | |
'show_in_admin_status_list' => true, | |
'show_in_metabox_dropdown' => true, | |
'show_in_inline_dropdown' => true, | |
'dashicon' => 'dashicons-hammer', // Voir https://developer.wordpress.org/resource/dashicons/#hammer | |
) ); | |
// Initialisation du statut Evolution | |
register_post_status( 'evolution', array( | |
'label' => _x( 'Evolution', 'post status', 'domaine-de-votre-extension' ), | |
'public' => true, | |
'label_count' => _n_noop( 'Evolution <span class="count">(%s)</span>', 'Evolutions <span class="count">(%s)</span>', 'domaine-de-votre-extension' ), | |
'post_type' => array( 'ticket' ), // Ce statut ne concerne que les types de contenu "ticket" | |
'show_in_admin_all_list' => true, | |
'show_in_admin_status_list' => true, | |
'show_in_metabox_dropdown' => true, | |
'show_in_inline_dropdown' => true, | |
'dashicon' => 'dashicons-admin-tools', // Voir https://developer.wordpress.org/resource/dashicons/#admin-tools | |
) ); | |
// Initialisation du statut Risque | |
register_post_status( 'risque', array( | |
'label' => _x( 'Risque', 'post status', 'domaine-de-votre-extension' ), | |
'private' => true, | |
'label_count' => _n_noop( 'Risque <span class="count">(%s)</span>', 'Risques <span class="count">(%s)</span>', 'domaine-de-votre-extension' ), | |
'post_type' => array( 'ticket' ), // Ce statut ne concerne que les types de contenu "ticket" | |
'show_in_admin_all_list' => true, | |
'show_in_admin_status_list' => true, | |
'show_in_metabox_dropdown' => true, | |
'show_in_inline_dropdown' => true, | |
'labels' => array( | |
'metabox_dropdown' => __( 'Risque de sécurité', 'domaine-de-votre-extension' ), | |
), | |
'dashicon' => 'dashicons-warning', // Voir https://developer.wordpress.org/resource/dashicons/#warning | |
) ); | |
} | |
add_action( 'init', 'exemple_statuts_et_type_de_contenu_persos' ); | |
/** | |
* L'utilisation de ce filtre permet de neutraliser certains statuts de WordPress pour votre type de contenu. | |
* | |
* PS: Je vous invite à maintenir les statuts "Draft" et "Pending" à minima. | |
* | |
* @param array $post_types La liste des types de contenu | |
* @param string $status_name Le statut inclus dans WordPress applicable aux types de contenu. | |
* @return array La liste des types de contenu pour le statut. | |
*/ | |
function exemple_statuts_personnaliser_liste_statuts( $post_types = array(), $status_name = '' ) { | |
if ( 'draft' === $status_name || 'pending' === $status_name ) { | |
return $post_types; | |
} | |
return array_diff( $post_types, array( 'ticket' ) ); | |
} | |
add_filter( 'wp_statuses_get_registered_post_types', 'exemple_statuts_personnaliser_liste_statuts', 10, 2 ); | |
/** | |
* Permet de s'assurer qu'il est possible de directement publier un statut personnalise pour le CPT Ticket | |
*/ | |
function exemple_statuts_autoriser_la_publication_pour_le_statut( $data = array(), $postarr = array() ) { | |
// It's not a Publish action | |
if ( empty( $postarr['publish'] ) ) { | |
return $data; | |
} | |
if ( 'ticket' !== $data['post_type'] ) { | |
return $data; | |
} | |
if ( ! empty( $postarr['_wp_statuses_status'] ) && in_array( $postarr['_wp_statuses_status'], array( | |
'anomalie', | |
'evolution', | |
'risque', | |
), true ) ) { | |
$data['post_status'] = sanitize_key( $postarr['_wp_statuses_status'] ); | |
// Nous utilisons un statut par défaut vu que nous avons désactiver le statut "Publish" pour ce type de contenu. | |
} else { | |
$data['post_status'] = 'anomalie'; | |
} | |
return $data; | |
} | |
add_filter( 'wp_insert_post_data', 'exemple_statuts_autoriser_la_publication_pour_le_statut', 10, 2 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment