Skip to content

Instantly share code, notes, and snippets.

@imath
Created February 22, 2017 07:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save imath/0b046d18f9db523f5276c15c35dfddb2 to your computer and use it in GitHub Desktop.
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.
<?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