diff --git a/includes/article.php b/includes/article.php index 3a62342..9b23e54 100644 --- a/includes/article.php +++ b/includes/article.php @@ -80,6 +80,11 @@ function dynamiques_render_article_inject_ids_to_headings($content) $slug = 'anchor'; } + // Ajouter un préfixe si l'ancre commence par un chiffre + if (preg_match('/^[0-9]/', $slug)) { + $slug = 'anchor-' . $slug; + } + return $slug; } diff --git a/includes/utilities.php b/includes/utilities.php index 1bf8d69..e89646e 100644 --- a/includes/utilities.php +++ b/includes/utilities.php @@ -120,6 +120,12 @@ function build_sommaire_from_content($postID) $anchor = $block['attrs']['idName'] ?? sanitize_title($title); + // Ajouter un préfixe si l'ancre commence par un chiffre + if (!empty($anchor) && preg_match('/^[0-9]/', $anchor)) { + $anchor = 'anchor-' . $anchor; + } + + $outputIndex[] = [ 'title' => $title, 'anchor' => $anchor, @@ -183,3 +189,31 @@ function apply_footnotes_urls_to_content($content) return $dom->saveHTML(); } + +// Endpoint AJAX pour sanitize_title +add_action('wp_ajax_sanitize_title_ajax', 'sanitize_title_ajax_handler'); +add_action('wp_ajax_nopriv_sanitize_title_ajax', 'sanitize_title_ajax_handler'); + +function sanitize_title_ajax_handler() +{ + // Vérifier le nonce pour la sécurité + if (!wp_verify_nonce($_POST['nonce'], 'sanitize_title_nonce')) { + wp_die('Erreur de sécurité'); + } + + $title = sanitize_text_field($_POST['title']); + $sanitized_title = sanitize_title($title); + + wp_send_json_success(array('sanitized_title' => $sanitized_title)); +} + +// Ajouter le script et les variables localisées +add_action('wp_enqueue_scripts', 'add_sanitize_title_script'); + +function add_sanitize_title_script() +{ + wp_localize_script('jquery', 'sanitize_title_ajax', array( + 'ajax_url' => admin_url('admin-ajax.php'), + 'nonce' => wp_create_nonce('sanitize_title_nonce') + )); +}