Skip to content

Instantly share code, notes, and snippets.

@imath imath/tickets.php Secret
Created Feb 22, 2017

Embed
What would you like to do?
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.
<?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
You can’t perform that action at this time.