carhop__carhop-theme__DEV/includes/utilities.php
2026-02-24 17:29:25 +01:00

276 lines
7.3 KiB
PHP

<?php
/**
* Fonctions utilitaires pour le calcul du temps de lecture
*/
function calculate_reading_time($content)
{
$content = strip_tags($content);
// Compter les mots (en français, on compte environ 200 mots par minute)
$word_count = str_word_count($content);
$reading_time = ceil($word_count / 200);
return $reading_time;
}
function test()
{
$tags = get_terms(array(
'taxonomy' => 'etiquettes',
'hide_empty' => false,
));
return $tags;
}
function get_archive_page_icon_html($post_type)
{
switch ($post_type) {
case 'analyses-etudes':
return '<img class="page_icon" src="' . get_template_directory_uri() . '/resources/img/icons/icon-analyses-etudes.svg" alt="Analyses et études" />';
case 'revues':
return '<img class="page_icon" src="' . get_stylesheet_directory_uri() . '/resources/img/icons/revues.svg" alt="Revues" />';
case 'expositions':
return '<img class="page_icon" src="' . get_template_directory_uri() . '/resources/img/icons/icon-expositions.svg" alt="Expositions" />';
case 'outils-pedagogiques':
return '<img class="page_icon" src="' . get_template_directory_uri() . '/resources/img/icons/icon-outils-pedagogiques.svg" alt="Outils pédagogiques" />';
case 'actualites':
return '<img class="page_icon" src="' . get_template_directory_uri() . '/resources/img/icons/icon-actualites.svg" alt="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 '<span class="page_subtitle">Accédez à nos recherches et publications thématiques.</span>';
case 'outils-pedagogiques':
return '<span class="page_subtitle">Des ressources pour apprendre et transmettre autrement.</span>';
case 'expositions':
return '<span class="page_subtitle">Découvrez nos expositions passées et actuelles.</span>';
case 'revues':
return '<span class="page_subtitle">Accédez à nos revues et publications</span> ';
case 'actualites':
return '<span class="page_subtitle">Suivez nos projets, événements et publications.</span> ';
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',
'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',
'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;
}