[ 'name' => 'Fiches Jeux Vidéo', 'singular_name' => 'Fiche Jeu Vidéo', 'menu_name' => 'Jeux Vidéo', 'add_new' => 'Ajouter un jeu', 'add_new_item' => 'Ajouter une nouvelle fiche de jeu', 'edit_item' => 'Modifier la fiche', 'new_item' => 'Nouvelle fiche de jeu', 'view_item' => 'Voir la fiche', 'search_items' => 'Rechercher des fiches', ], 'public' => true, 'has_archive' => false, 'rewrite' => ['slug' => 'jeux-videos'], 'menu_icon' => 'dashicons-games', 'show_in_rest' => true, 'supports' => ['title', 'editor', 'thumbnail'/*, 'comments' */], ]);}add_action('init', 'register_video_game_cpt');//Ajouter des Colonnes Personnaliséesfunction video_game_custom_columns($columns) { // Supprimer la colonne "Date" par défaut si nécessaire unset($columns['date']); $columns['thumbnail'] = 'Image'; $columns['release_date'] = 'Date de sortie'; $columns['release_physical_date'] = 'Date de sortie boite'; $columns['console'] = 'Consoles'; $columns['test_score'] = 'Note'; $columns['shortcode'] = 'Shortcode'; //$columns['date'] = 'Date de publication'; return $columns;}add_filter('manage_video_game_posts_columns', 'video_game_custom_columns');//Renseigner les Valeurs des Colonnesfunction video_game_custom_columns_content($column, $post_id) { switch ($column) { case 'thumbnail': echo get_the_post_thumbnail($post_id, [50, 50]) ?: '—'; break; case 'release_date': $release_date = get_post_meta($post_id, '_release_date', true); echo $release_date ? date_i18n('d/m/Y', strtotime($release_date)) : '—'; break; case 'release_physical_date': $release_physical_date = get_post_meta($post_id, '_release_physical_date', true); echo $release_physical_date ? date_i18n('d/m/Y', strtotime($release_physical_date)) : '—'; break; case 'console': $consoles = get_the_terms($post_id, 'game_consoles'); if (!empty($consoles)) { $console_links = []; foreach ($consoles as $console) { $console_links[] = '' . esc_html($console->name) . ''; } echo implode(', ', $console_links); } else { echo '—'; } break; case 'test_score': $score = get_post_meta($post_id, '_test_score', true); $score_url = get_post_meta($post_id, '_test_url', true); echo $score !== '' ? '' . esc_html($score) . '' : '—'; break; case 'shortcode': $shortcode_basic = '[video_game_info id="' . $post_id . '"]'; $shortcode_with_desc = '[video_game_info id="' . $post_id . '" with-desc="true"]'; echo '
'; echo ''; echo ''; echo '
'; break; }}add_action('manage_video_game_posts_custom_column', 'video_game_custom_columns_content', 10, 2);function video_game_sortable_columns($columns) { $columns['release_date'] = 'release_date'; $columns['test_score'] = 'test_score'; // Rendre la note triable return $columns;}add_filter('manage_edit-video_game_sortable_columns', 'video_game_sortable_columns');// Ajouter la logique de tri pour la notefunction video_game_sort_columns_logic($query) { if (!is_admin() || !$query->is_main_query()) { return; } if ($query->get('orderby') === 'release_date') { $query->set('meta_key', '_release_date'); $query->set('orderby', 'meta_value'); } if ($query->get('orderby') === 'test_score') { $query->set('meta_key', '_test_score'); $query->set('orderby', 'meta_value_num'); // Utiliser meta_value_num pour un tri numérique }}add_action('pre_get_posts', 'video_game_sort_columns_logic');// Ajouter un filtre par console dans l'adminfunction video_game_console_filter() { global $typenow; if ($typenow === 'video_game') { $taxonomy = 'game_consoles'; $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : ''; $terms = get_terms($taxonomy, ['hide_empty' => false]); if (!empty($terms)) { echo ''; } }}add_action('restrict_manage_posts', 'video_game_console_filter');// Modifier la requête pour filtrer par consolefunction filter_video_game_by_console($query) { global $pagenow; if ($pagenow === 'edit.php' && isset($_GET['game_consoles']) && $_GET['game_consoles'] !== '') { $query->query_vars['tax_query'] = [ [ 'taxonomy' => 'game_consoles', 'field' => 'slug', 'terms' => $_GET['game_consoles'], ] ]; }}add_action('pre_get_posts', 'filter_video_game_by_console');// Ajouter les champs de filtre pour une plage de datesfunction video_game_date_range_filter() { global $typenow; if ($typenow === 'video_game') { $start_date = $_GET['release_date_start'] ?? ''; $end_date = $_GET['release_date_end'] ?? ''; echo 'Date de sortie : '; echo ''; echo ''; }}add_action('restrict_manage_posts', 'video_game_date_range_filter');// Modifier la requête pour filtrer par une plage de datesfunction filter_video_game_by_date_range($query) { global $pagenow; if ($pagenow === 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] === 'video_game') { $meta_query = []; if (!empty($_GET['release_date_start'])) { $meta_query[] = [ 'key' => '_release_date', 'value' => $_GET['release_date_start'], 'compare' => '>=', 'type' => 'DATE' ]; } if (!empty($_GET['release_date_end'])) { $meta_query[] = [ 'key' => '_release_date', 'value' => $_GET['release_date_end'], 'compare' => '<=', 'type' => 'DATE' ]; } if (!empty($meta_query)) { $query->set('meta_query', $meta_query); } }}add_action('pre_get_posts', 'filter_video_game_by_date_range');function remove_quick_edit_from_video_games($actions, $post) { if ($post->post_type === 'video_game') { unset($actions['inline hide-if-no-js']); // Supprime "Modification rapide" } return $actions;}add_filter('post_row_actions', 'remove_quick_edit_from_video_games', 10, 2);/** * Ajoute le JavaScript pour copier les shortcodes dans le presse-papier. * * @since 0.9.5 * @param string $hook_suffix Le suffixe de la page admin actuelle * @return void */function enqueue_video_game_admin_scripts($hook_suffix) { // Charger uniquement sur la page de liste des jeux vidéo if ($hook_suffix !== 'edit.php') { return; } global $post_type; if ($post_type !== 'video_game') { return; } // Ajouter le script inline ?> ID, '_release_date', true); $release_physical_date = get_post_meta($post->ID, '_release_physical_date', true); $local_player_numbers = get_post_meta($post->ID, '_local_player_numbers', true) ?: 1; $online_player_numbers = get_post_meta($post->ID, '_online_player_numbers', true); $test_url = get_post_meta($post->ID, '_test_url', true); $amazon_url = get_post_meta($post->ID, '_amazon_url', true); $eshop_url = get_post_meta($post->ID, '_eshop_url', true); $test_score = get_post_meta($post->ID, '_test_score', true); $physical_support_type = get_post_meta($post->ID, '_physical_support_type', true); $same_as_release = empty($release_physical_date) || $release_physical_date === $release_date; ?>

Informations sur les dates

La date de sortie physique est la même

Options de jeu

Test

Liens d'achat

Shortcodes

Utilisez ces shortcodes pour afficher ce jeu dans vos articles ou pages.

prefix . 'vg_user_collections'; // Vérifier que le jeu existe $game_exists = get_post($game_id); if (!$game_exists || $game_exists->post_type !== 'video_game') { wp_send_json_error('Ce jeu n\'existe pas.'); } // Vérifier si le jeu est déjà dans la collection $existing = $wpdb->get_var($wpdb->prepare( "SELECT id FROM $table_name WHERE user_id = %d AND game_id = %d", $user_id, $game_id )); if ($existing) { wp_send_json_success([ 'message' => 'Ce jeu est déjà dans votre collection.', 'in_collection' => true ]); } // Ajouter le jeu à la collection $result = $wpdb->insert( $table_name, [ 'user_id' => $user_id, 'game_id' => $game_id, 'date_added' => current_time('mysql') ], ['%d', '%d', '%s'] ); if ($result) { wp_send_json_success([ 'message' => 'Jeu ajouté à votre collection !', 'in_collection' => true ]); } else { wp_send_json_error('Erreur lors de l\'ajout du jeu à votre collection.'); }}/** * Retire un jeu vidéo de la collection de l'utilisateur connecté. * * @since 0.9.4 * @return void Envoie une réponse JSON (succès ou erreur) */function vg_remove_game_from_collection(){ // Vérifier le nonce pour la sécurité if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'vg_collection_nonce')) { wp_send_json_error('Erreur de sécurité. Veuillez rafraîchir la page.'); } // Vérifier que l'ID du jeu est fourni if (!isset($_POST['game_id']) || empty($_POST['game_id'])) { wp_send_json_error('ID du jeu manquant.'); } $game_id = intval($_POST['game_id']); $user_id = get_current_user_id(); global $wpdb; $table_name = $wpdb->prefix . 'vg_user_collections'; // Supprimer le jeu de la collection $result = $wpdb->delete( $table_name, [ 'user_id' => $user_id, 'game_id' => $game_id ], ['%d', '%d'] ); if ($result) { wp_send_json_success([ 'message' => 'Jeu retiré de votre collection !', 'in_collection' => false ]); } else { wp_send_json_error('Erreur lors de la suppression du jeu de votre collection ou ce jeu n\'est pas dans votre collection.'); }}// Fonction pour vérifier si un jeu est dans la collectionfunction vg_check_game_in_collection(){ // Vérifier le nonce pour la sécurité if (!isset($_POST['nonce']) || !wp_verify_nonce($_POST['nonce'], 'vg_collection_nonce')) { wp_send_json_error('Erreur de sécurité. Veuillez rafraîchir la page.'); } // Vérifier que l'ID du jeu est fourni if (!isset($_POST['game_id']) || empty($_POST['game_id'])) { wp_send_json_error('ID du jeu manquant.'); } $game_id = intval($_POST['game_id']); $user_id = get_current_user_id(); global $wpdb; $table_name = $wpdb->prefix . 'vg_user_collections'; // Vérifier si le jeu est dans la collection $exists = $wpdb->get_var($wpdb->prepare( "SELECT id FROM $table_name WHERE user_id = %d AND game_id = %d", $user_id, $game_id )); wp_send_json_success([ 'in_collection' => !empty($exists) ]);}// Fonction pour traiter les requêtes des utilisateurs non connectésfunction vg_user_not_logged_in(){ wp_send_json_error([ 'message' => 'Vous devez être connecté pour gérer votre collection.', 'require_login' => true ]);}// Fonction pour afficher les boutons d'ajout/suppressionfunction vg_display_collection_buttons($game_id){ if (!is_user_logged_in()) { return 'Connectez-vous pour ajouter à votre collection'; } $output = '
'; $output .= ''; $output .= ''; $output .= ''; $output .= '
'; return $output;}// Enqueue scripts et styles pour la collectionfunction vg_enqueue_collection_scripts(){ if (is_singular('video_game')) { wp_enqueue_script( 'vg-collection-js', plugin_dir_url(__FILE__) . 'assets/js/vg-collection.js', ['jquery'], '1.0.0', true ); wp_enqueue_style( 'vg-collection-css', plugin_dir_url(__FILE__) . 'assets/css/vg-collection.css' ); // Ajouter les variables locales pour JavaScript wp_localize_script('vg-collection-js', 'vgCollection', [ 'ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('vg_collection_nonce'), 'i18n' => [ 'adding' => 'Ajout en cours...', 'removing' => 'Suppression en cours...', 'error' => 'Une erreur est survenue.', 'loginRequired' => 'Vous devez être connecté.' ] ]); }}add_action('wp_enqueue_scripts', 'vg_enqueue_collection_scripts'); 'boolean', 'default' => true, 'sanitize_callback' => 'boolval' ) );}add_action('admin_init', 'register_video_game_options');// Charger les styles CSS pour la page d'optionsfunction enqueue_video_game_options_styles($hook) { // Charger uniquement sur la page d'options if ($hook !== 'video_game_page_video_game_options') { return; } wp_enqueue_style( 'video-game-options-css', plugin_dir_url(__FILE__) . 'assets/css/options.css', array(), '1.0.0' );}add_action('admin_enqueue_scripts', 'enqueue_video_game_options_styles');// Fonction de rendu de la page "Options"function render_options_page() { // Récupérer la valeur actuelle de l'option en utilisant la fonction globale $collection_enabled = function_exists('vg_is_collection_enabled') ? vg_is_collection_enabled() : get_option('video_game_collection_enabled', true); // Traiter le formulaire s'il est soumis if (isset($_POST['submit_video_game_options'])) { // Vérifier le nonce pour la sécurité if (!isset($_POST['video_game_options_nonce']) || !wp_verify_nonce($_POST['video_game_options_nonce'], 'video_game_options_action')) { echo '

Erreur de sécurité. Veuillez réessayer.

'; } else { // Mettre à jour l'option de collection $collection_enabled = isset($_POST['video_game_collection_enabled']) ? true : false; update_option('video_game_collection_enabled', $collection_enabled); // Afficher un message de succès echo '

Options mises à jour avec succès.

'; } } ?>

Options des Jeux Vidéo

Paramètres généraux

Lorsque cette option est activée, les utilisateurs connectés peuvent ajouter des jeux à leur collection personnelle.
Désactiver cette option masquera les boutons d'ajout à la collection sur les fiches de jeux.