'etiquettes', 'hide_empty' => false, )); return $tags; } function get_archive_page_icon_html($post_type) { switch ($post_type) { case 'analyses-etudes': return 'Analyses et études'; case 'revues': return 'Revues'; case 'expositions': return 'Expositions'; case 'outils-pedagogiques': return 'Outils pédagogiques'; case 'actualites': return 'Actualités'; default: return ''; } } function page_has_subtitle($page_id) { $has_page_subtitle = get_field('page_subtitle', $page_id) ? true : false; return $has_page_subtitle; } function get_archive_page_subtitle_html($post_type) { switch ($post_type) { case 'analyses-etudes': return 'Accédez à nos recherches et publications thématiques.'; case 'outils-pedagogiques': return 'Des ressources pour apprendre et transmettre autrement.'; case 'expositions': return 'Découvrez nos expositions passées et actuelles.'; case 'revues': return 'Accédez à nos revues et publications '; case 'actualites': return 'Suivez nos projets, événements et publications. '; default: return ''; } } function handle_posts_numerotation_remapping($post_type) { if (!is_admin()) { return; } $query = new WP_Query(array( 'post_type' => $post_type, 'posts_per_page' => -1, 'orderby' => 'date', 'order' => 'ASC', )); $numerotation = 0; while ($query->have_posts()) { $query->the_post(); $numerotation++; update_post_meta(get_the_ID(), 'post_numerotation', $numerotation); } } function hasPostTypeNumerotation($post_type) { switch ($post_type) { case 'analyses-etudes': case 'expositions': case 'outils-pedagogiques': case 'recherches': case 'revues': return true; default: return false; } } /** * Retourne une WP_Query avec la dernière analyse et la dernière étude (une de chaque type). * Utilisable comme une query classique (->posts, ->post_count, etc.). */ function get_last_analyses_etudes_posts() { $latest_analyse = get_posts(array( 'posts_per_page' => 1, 'post_status' => 'publish', 'post_type' => 'analyses-etudes', 'orderby' => 'date', 'order' => 'DESC', 'tax_query' => array( array( 'taxonomy' => 'type-analyse-etude', 'field' => 'slug', 'terms' => 'analyse', ), ), )); $latest_etude = get_posts(array( 'posts_per_page' => 1, 'post_status' => 'publish', 'post_type' => 'analyses-etudes', 'orderby' => 'date', 'order' => 'DESC', 'tax_query' => array( array( 'taxonomy' => 'type-analyse-etude', 'field' => 'slug', 'terms' => 'etude', ), ), )); $post_ids = array_merge( array_map(function ($p) { return $p->ID; }, $latest_analyse), array_map(function ($p) { return $p->ID; }, $latest_etude) ); $post_ids = array_filter(array_unique($post_ids)); if (empty($post_ids)) { return new WP_Query(array( 'post_type' => 'analyses-etudes', 'posts_per_page' => 0, )); } return new WP_Query(array( 'post_type' => 'analyses-etudes', 'post__in' => $post_ids, 'orderby' => 'post__in', 'posts_per_page' => count($post_ids), )); } /** * Récupère le nombre de likes d'un post * * Cette fonction utilitaire récupère le compteur de likes stocké * dans les métadonnées d'un post. Retourne 0 si aucun like n'existe. * * @param int $post_id L'ID du post * @return int Le nombre de likes (0 si aucun) */ function get_post_likes_count($post_id) { $likes_count = get_post_meta($post_id, 'likes_count', true); return $likes_count ? intval($likes_count) : 0; } /** * Affiche le nombre de likes d'un post avec formatage * * Cette fonction utilitaire formate l'affichage du compteur de likes * avec une icône optionnelle et la gestion du pluriel. * * @param int $post_id L'ID du post * @param bool $show_icon Afficher l'icône cœur (défaut: true) * @return string Le texte formaté (ex: "❤️ 5 likes" ou "3 like") */ function display_likes_count($post_id, $show_icon = true) { $likes_count = get_post_likes_count($post_id); $icon = $show_icon ? '❤️ ' : ''; return $icon . $likes_count . ' like' . ($likes_count > 1 ? 's' : ''); } /** * Construit les URL de partage pour un post * * Cette fonction génère les URL de partage pour un post spécifique. * Elle retourne un tableau associatif contenant les URL de partage pour Facebook, Twitter-X et LinkedIn. * * @return array Tableau associatif contenant les URL de partage */ function build_share_urls() { $post_id = get_the_ID(); $postUrl = get_permalink($post_id); $postTitle = get_the_title($post_id); $facebookUrl = 'https://www.facebook.com/sharer.php?u=' . $postUrl; $twitterUrl = 'https://twitter.com/intent/tweet?text=' . $postTitle . '&url=' . get_the_permalink(get_the_id()); $linkedInUrl = 'https://www.linkedin.com/feed/?shareActive=true&text=' . $postTitle . ' ' . $postUrl; return array( 'Facebook' => $facebookUrl, 'Twitter-X' => $twitterUrl, 'Linkedin' => $linkedInUrl, 'postUrl' => $postUrl ); } function get_author_publications_amount($authorID) { if (empty($authorID)) return 0; if (get_current_blog_id() === 1) { $posts = count_user_posts_by_author($authorID, array('expositions', 'outils-pedagogiques', 'analyses-etudes')); return $posts; } if (get_current_blog_id() === 2) { $posts = count_user_posts_by_author($authorID, 'articles'); return $posts; } return; } /** * Compte le nombre d'articles d'un utilisateur pour un type de post donné * * Cette fonction compte combien d'articles d'un type spécifique * sont associés à un utilisateur donné via le champ custom 'authors'. * * @param int $userID L'ID de l'utilisateur * @param string $postType Le type de post à compter (ex: 'articles') * @return int Le nombre d'articles trouvés */ function count_user_posts_by_author($userID, $postType) { $args = array( 'post_type' => $postType, 'meta_query' => array( array( 'key' => 'authors', 'value' => '"' . $userID . '"', 'compare' => 'LIKE', ), ), ); $query = new WP_Query($args); return $query->found_posts; } function get_activity_title_from_acf_layout_label($label) { switch ($label) { case 'public_cible': return __('Public cible', 'carhop'); case 'lieu': return __('Lieu', 'carhop'); case 'date': return __('Date', 'carhop'); case 'duree': return __('Durée', 'carhop'); case 'prix': return __('Prix', 'carhop'); default: return ''; } } function get_post_type_supports_type($post_type) { switch ($post_type) { case 'activites': case 'analyses-etudes': return true; default: return false; } } function get_post_specific_type_terms($post_id) { $post_type = get_post_type($post_id); $terms = null; switch ($post_type) { case 'activites': $terms = get_the_terms($post_id, 'type-activite'); return $terms; case 'analyses-etudes': $terms = get_the_terms($post_id, 'type-analyse-etude'); return $terms; } return $terms; }