carhop__dynamiques-theme__P.../includes/utilities.php
Nonimart ae3cc383ba
All checks were successful
continuous-integration/drone/push Build is passing
TEST trying to fix problem with id attributes for links
2025-06-23 16:57:19 +02:00

133 lines
3.2 KiB
PHP

<?php
function getRevueAuthors($revueID)
{
$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' => '=',
),
),
));
$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);
}
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;
}
function build_sommaire_from_content($postID)
{
$blocks = parse_blocks(get_the_content($postID));
$titleBlocks = array_filter(
$blocks,
function ($block) {
return $block['blockName'] === 'core/heading' && isset($block['attrs']['level']) && in_array($block['attrs']['level'], array(2, 3), true);
}
);
$outputIndex = [];
foreach ($titleBlocks as $block) {
$title = strip_tags($block['innerHTML']);
$anchor = $block['attrs']['idName'] ?? sanitize_title($title);
$level = $block['attrs']['level'];
$outputIndex[] = [
'title' => $title,
'anchor' => $anchor,
];
}
return $outputIndex;
}
function build_footnotes_index_from_content($content)
{
if (empty($content)) {
return [];
}
$footnotes = [];
$dom = new DOMDocument();
// On supprime les erreurs de parsing pour le HTML5
@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $dom->getElementsByTagName('a');
foreach ($links as $key => $link) {
if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) {
$footnote_content = $link->getAttribute('footnote-content');
if (!empty($footnote_content)) {
$footnotes[] = array(
'key' => $key + 1,
'anchorID' => $key + 1,
'content' => $footnote_content
);
}
}
}
return $footnotes;
}
add_filter('the_content', 'apply_footnotes_urls_to_content', 10);
function apply_footnotes_urls_to_content($content)
{
$post_type = get_post_type();
if ($post_type !== 'articles' && !is_admin()) return $content;
$footnotes = build_footnotes_index_from_content($content);
$dom = new DOMDocument();
@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$links = $dom->getElementsByTagName('a');
phpinfo();
foreach ($links as $key => $link) {
// write_log($key);
if ($link->hasAttribute('class') && strpos($link->getAttribute('class'), 'footnote-reference') !== false) {
$link->setAttribute('id', 'footnote-' . $key + 1);
write_log($link->getAttribute('id'));
}
}
return $dom->saveHTML();
}