'articles', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'related_revue', 'value' => $revueID, 'compare' => '=', ), ), )); $authors = array(); foreach ($revueRelatedArticles->posts as $article) { $currentArticleAuthors = get_field('authors', $article->ID); if (empty($currentArticleAuthors) || !is_array($currentArticleAuthors)) continue; foreach ($currentArticleAuthors as $authorID) { $authors[] = $authorID; } } return array_unique($authors); } /** * Récupère tous les termes uniques d'une taxonomie pour une revue * * Cette fonction collecte tous les termes d'une taxonomie spécifique * associés aux articles d'une revue. Elle parcourt tous les articles * liés à la revue et retourne les termes uniques de la taxonomie donnée. * * @param int $revueID L'ID de la revue * @param string $taxonomy Le nom de la taxonomie (ex: 'etiquettes', 'category') * @return array Tableau d'objets de termes uniques */ function get_revue_terms($revueID, $taxonomy) { $revueRelatedArticles = new WP_Query(array( 'post_type' => 'articles', 'posts_per_page' => -1, 'post_status' => 'publish', 'meta_query' => array( array( 'key' => 'related_revue', 'value' => $revueID, 'compare' => '=', ), ), )); $terms = array(); foreach ($revueRelatedArticles->posts as $article) { $currentArticleTerms = get_the_terms($article->ID, $taxonomy); if (empty($currentArticleTerms) || !is_array($currentArticleTerms)) continue; foreach ($currentArticleTerms as $term) { $terms[] = $term->term_id; } } foreach (array_unique($terms) as $term) { $termObject = get_term($term, $taxonomy); $uniquesTermsArray[] = $termObject; } return $uniquesTermsArray; } function count_user_articles($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; } /** * Génère un sommaire automatique à partir du contenu d'un post * * Cette fonction analyse les blocs Gutenberg d'un post pour extraire * tous les titres de niveau 2 (h2) et créer un index de navigation. * Elle génère des ancres automatiques pour chaque titre. * * @param int $postID L'ID du post à analyser * @return array Tableau associatif contenant les éléments du sommaire * Chaque élément contient: title, anchor, level */ function build_sommaire_from_content($postID) { $blocks = parse_blocks(get_the_content($postID)); $titleBlocks = array_filter( $blocks, function ($block) { // Vérifier si c'est un bloc heading if ($block['blockName'] !== 'core/heading') { return false; } // Extraire le niveau depuis le HTML si les attributs sont vides if (empty($block['attrs']['level'])) { // Chercher seulement h2 dans le HTML if (preg_match('/