__('Hors ligne', 'metiers-patrimoine-theme'), 'public' => false, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop('Hors Ligne (%s)', 'Hors Ligne (%s)'), )); } add_action('init', 'custom_post_status'); // Permettre aux utilisateurs connectés de voir les posts 'offline' function allow_logged_in_users_to_view_offline_posts($query) { if (!is_admin() && $query->is_main_query() && is_user_logged_in()) { $query->set('post_status', array('publish', 'offline')); } return $query; } add_filter('pre_get_posts', 'allow_logged_in_users_to_view_offline_posts'); function add_to_post_status_dropdown() { global $post; // Ajoute une option 'offline' au menu déroulant des statuts echo ""; } // add_action('post_submitbox_misc_actions', 'add_to_post_status_dropdown'); add_action('admin_footer-post.php', function () { ?> get_var($wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = %s AND post_status = %s", $post_type, $status )); if ($count > 0) { $is_current = (isset($_GET['post_status']) && $_GET['post_status'] === $status); $class = $is_current ? 'current' : ''; $aria_current = $is_current ? ' aria-current="page"' : ''; $views[$status] = sprintf( '%s (%d)', $post_type, $status, $class, $aria_current, __('Hors ligne', 'metiers-patrimoine-theme'), $count ); } return $views; }); /* ------------------------------------------------------------------------------------------ REMPLACER LES LABELS DES FILTRES DE LA LISTE DES ARTISANS (TOUT EN HAUT DANS LE SUBSUBSUB) --------------------------------------------------------------------------------------------*/ add_filter('views_edit-artisans', function ($views) { if (isset($views['publish'])) { $views['publish'] = str_replace('Publié', 'En ligne', $views['publish']); } return $views; }); /* ------------------------------------------------------------------------------------------ AJOUTER LE STATUT 'OFFLINE' DANS LE FILTRE RAPIDE (QUICK EDIT) de BULK ACTIION --------------------------------------------------------------------------------------------*/ function add_custom_bulk_actions($actions) { $actions['mark_offline'] = __('Mettre hors ligne', 'metiers-patrimoine-theme'); $actions['mark_online'] = __('Mettre en ligne', 'metiers-patrimoine-theme'); return $actions; } add_filter('bulk_actions-edit-artisans', 'add_custom_bulk_actions'); // Gérer l'action de groupe pour appliquer le statut 'offline' function handle_custom_bulk_actions($redirect_to, $doaction, $post_ids) { if ($doaction === 'mark_offline') { foreach ($post_ids as $post_id) { wp_update_post(array( 'ID' => $post_id, 'post_status' => 'offline' )); } $redirect_to = add_query_arg('bulk_online_updated', count($post_ids), $redirect_to); } if ($doaction === 'mark_online') { foreach ($post_ids as $post_id) { wp_update_post(array( 'ID' => $post_id, 'post_status' => 'published' )); } $redirect_to = add_query_arg('bulk_offline_updated', count($post_ids), $redirect_to); } return $redirect_to; } add_filter('handle_bulk_actions-edit-artisans', 'handle_custom_bulk_actions', 10, 3); // Ajouter un message d'administration pour confirmer l'action de groupe function custom_bulk_admin_notices() { if (!empty($_REQUEST['bulk_online_updated'])) { $message = sprintf(__('%d artisan(s) mis en ligne', 'metiers-patrimoine-theme'), intval($_REQUEST['bulk_online_updated'])); echo "

{$message}

"; } if (!empty($_REQUEST['bulk_offline_updated'])) { $message = sprintf(__('%d artisans mis hors ligne', 'metiers-patrimoine-theme'), intval($_REQUEST['bulk_offline_updated'])); echo "

{$message}

"; } } add_action('admin_notices', 'custom_bulk_admin_notices'); /* ------------------------------------------------------------------- POST STATUS AFTER TITLE ON EDIT PAGE WITH ALL POSTS (POST STATES COLUMN) -------------------------------------------------------------------*/ // Ajouter un statut personnalisé dans la colonne des statuts, uniquement dans la vue "Tous" function add_custom_post_status($post_states, $post) { // Vérifier si on est dans l'admin et si le post appartient au CPT 'artisans' if ('artisans' === $post->post_type) { global $pagenow; // Vérifier si on est sur la page d'index des articles (Tous les articles) if ('edit.php' === $pagenow && !isset($_GET['post_status'])) { // Ajouter le statut "Publié" si l'article est publié if ('publish' === $post->post_status) { $post_states[] = __('En ligne', 'metiers-patrimoine-theme'); // Affiche "Publié" } // Ajouter votre statut personnalisé (ex : "offline") si c'est le cas if ('offline' === get_post_status($post->ID)) { $post_states[] = __('Hors ligne', 'metiers-patrimoine-theme'); // Affiche "En attente" } } } return $post_states; } add_filter('display_post_states', 'add_custom_post_status', 10, 2); /* ---------------------------------------------------------------------- REORDER ADMIN MENU & POST TYPE ORDER ON MENU BAR ------------------------------------------------------------------------*/ /** * Filters WordPress' default menu order */ function metiers_new_admin_menu_order($menu_order) { // define your new desired menu positions here // for example, move 'upload.php' to position #9 and built-in pages to position #1 $new_positions = array( 'edit.php?post_type=artisans' => 3, 'edit.php?post_type=chantiers' => 4, 'export_datas' => 8, 'edit-tags.php?taxonomy=metiers&post_type=artisans' => 9, 'edit-tags.php?taxonomy=elementsbatiments&post_type=artisans' => 10, 'edit.php?post_type=page' => 11, 'upload.php' => 12, 'theme-general-settings' => 13, 'rank-math' => 20, ); // helper function to move an element inside an array function metiers_move_element(&$array, $a, $b) { $out = array_splice($array, $a, 1); array_splice($array, $b, 0, $out); } // traverse through the new positions and move // the items if found in the original menu_positions foreach ($new_positions as $value => $new_index) { if ($current_index = array_search($value, $menu_order)) { metiers_move_element($menu_order, $current_index, $new_index); } } return $menu_order; }; add_action('admin_menu', function () { add_filter('menu_order', 'metiers_new_admin_menu_order'); add_filter('custom_menu_order', '__return_true'); }); /* ---------------------------------------------------------------------- BODY CLASS ------------------------------------------------------------------------*/ //** BODY CLASS FOR USER ROLE *// function add_user_role_to_admin_body_class($classes) { $current_user = wp_get_current_user(); if (!empty($current_user->roles)) { foreach ($current_user->roles as $role) { $classes .= ' role-' . $role; } } return $classes; } add_filter('admin_body_class', 'add_user_role_to_admin_body_class'); //** BODY CLASS FOR POST STATUS *// function add_post_status_to_body_class($classes) { global $post; if ($post && isset($post->post_status)) { $post_status = $post->post_status; $classes .= ' post-status-' . $post_status; } return $classes; } add_filter('admin_body_class', 'add_post_status_to_body_class'); /* --------------------------------------------------------------------------------- RÉ-AJOUT DES ITEMS DE TAXONOMY DANS LE MENU, MAIS PAS SOUS ARTISANS MAIS À PART -----------------------------------------------------------------------------------*/ function add_custom_taxonomy_menu_item() { add_menu_page( 'Métiers', 'Métiers', 'edit_others_posts', 'edit-tags.php?taxonomy=metiers&post_type=artisans', '', 'dashicons-tag', 50 ); add_menu_page( 'Éléments du batiment', 'Éléments du batiment', 'edit_others_posts', 'edit-tags.php?taxonomy=elementsbatiments&post_type=artisans', '', 'dashicons-tag', 58 ); } add_action('admin_menu', 'add_custom_taxonomy_menu_item'); /* ------------------------------------------------------------------------------------------ Masquer le menu "Chantiers" pour les utilisateurs non autorisés --------------------------------------------------------------------------------------------*/ function hide_chantiers_menu() { $current_user = wp_get_current_user(); $allowed_roles = array('administrator', 'editor'); if (current_user_can('editor')) return; remove_menu_page('edit.php?post_type=chantiers'); } // add_action('admin_menu', 'hide_chantiers_menu', 999);