1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
<?php
class PanierAdminMenuPage
{
public static function register()
{
add_action('init', [self::class, 'SD_types']);
add_action('admin_menu', [self::class, 'add_panier_menu']);
}
public static function add_panier_Menu()
{
// Affichage des réponses en attente : Warning bulle
// J'utilise un transient
// https://wordpress.stackexchange.com/questions/15567/add-update-notification-bubble-to-admin-menu-item
// Je dois redéfinir/ recalculer le nombre à chaque appel de la page (ce nombre est par ailleurs modifiable par l'admin (checkbox 'réponse envoyée', ou mise à la corbeille) et par javascript)
$warnings = array();
$Mon_query = new WP_query(array(
'post_type' => 'sdpanier',
'post_status' => 'draft', // Mon post-type est enregistré en 'draft' par défaut (demande soumise par formulaire) et l'admin peut mettre à la corbeille puis supprimer définitivement
));
if ($Mon_query->have_posts()) {
while ($Mon_query->have_posts()) {
$Mon_query->the_post();
$the_id = get_the_ID();
$the_status=get_post_status();
$Data_meta = get_post_meta($the_id, '');
$Data_meta = unserialize($Data_meta['SD_data'][0]);
$reponse = $Data_meta['reponse']; // La valeur que j'utilise pour compter les demandes auxquelles je n'ai pas encore répondu (meta donnée)
if ($the_status == 'draft' && $reponse == "false") {
$warnings = array_merge($warnings, array($the_id));
}
}
set_transient('SD_attente', $warnings);
wp_reset_postdata();
}
if($warnings){
// Affichage d'une bulle à côté du nom du menu, nombre de réponses en attente
$warning_count = count( $warnings );
$warning_title = esc_attr( sprintf( '%d plugin warnings', $warning_count ) );
$menu_label = sprintf( 'Panier %s', "<span class='update-plugins check_demande count-$warning_count' title='$warning_title'><span class='plugin-count update-count'>" . number_format_i18n($warning_count) . "</span></span>" );
add_menu_page('Paramètres', $menu_label, 'manage_options', 'panier', [self::class, 'SD_Rendu_list_page'], 'dashicons-editor-customchar', 4);
}
else
{
// si pas de demande en attente
add_menu_page('Paramètres', 'Panier', 'manage_options', 'panier', [self::class, 'SD_Rendu_list_page'], 'dashicons-editor-customchar', 4);
}
}
// création du custom type
public static function SD_types()
{
register_post_type('sdpanier', [
'label' => 'SD Panier',
'public' => false,
'show_ui' => false,
'show_in_rest' => false,
'has_archive' => false,
]);
}
public static function SD_Rendu_list_page()
{
ob_start();
include_once plugin_dir_path(__FILE__) . 'paniers.php'; // Fichier principal du menu
$template = ob_get_contents();
ob_end_clean();
echo $template;
}
} |
Partager