&lt;?php
/**
 * Charge le bloc pronostics.php du thème et capture le HTML généré.
 *
 * @package JDCom_Pronostics_REST
 */

/**
 * Chargeur qui inclut directement le fichier blocks/pronostics.php
 * du thème enfant, sans passer par do_shortcode() (qui est bloqué
 * en contexte REST par le shortcode [courses-block]).
 *
 * La génération du HTML est capturée via le buffer de sortie PHP
 * (ob_start / ob_get_clean) et retournée sous forme de chaîne.
 *
 * @throws Exception Si le fichier bloc est introuvable.
 */
class JDCOM_Pronostics_Loader {

    /**
     * Date au format DD_MM_YYYY.
     *
     * @var string
     */
    private $date;

    /**
     * Numéro de réunion.
     *
     * @var int
     */
    private $reunion;

    /**
     * Numéro de course.
     *
     * @var int
     */
    private $course;

    /**
     * Chemin absolu vers le fichier blocks/pronostics.php du thème.
     *
     * @var string
     */
    private $block_file_path;

    /**
     * Constructeur.
     *
     * @param string $date    Date au format DD_MM_YYYY.
     * @param int    $reunion Numéro de réunion.
     * @param int    $course  Numéro de course.
     *
     * @throws Exception Si la date est invalide.
     */
    public function __construct($date, $reunion, $course) {
        $this-&gt;date    = $date;
        $this-&gt;reunion = $reunion;
        $this-&gt;course  = $course;

        // Sécurité : le chemin est construit uniquement à partir de valeurs fixes.
        // get_template_directory() est une fonction WordPress qui retourne un chemin validé.
        // Aucune donnée utilisateur n'intervient dans la construction du chemin.
        $theme_dir = get_template_directory();
        $this-&gt;block_file_path = $theme_dir . '/blocks/pronostics.php';
    }

    /**
     * Retourne le chemin absolu du fichier bloc (pour inspection).
     *
     * @return string
     */
    public function get_block_file_path() {
        return $this-&gt;block_file_path;
    }

    /**
     * Exécute le bloc pronostics.php et retourne le HTML capturé.
     *
     * Étapes :
     * 1. Sauvegarde du contexte $_GET actuel
     * 2. Injection des paramètres date/reunion/course dans $_GET
     * 3. Démarrage du buffer de sortie
     * 4. Inclusion du fichier bloc
     * 5. Récupération du contenu du buffer
     * 6. Restauration de $_GET
     *
     * @return string HTML généré par le bloc.
     *
     * @throws Exception Si le fichier bloc n'existe pas ou si l'inclusion échoue.
     */
    public function get_html() {
        // Vérifier que le fichier bloc existe
        if (!file_exists($this-&gt;block_file_path)) {
            throw new Exception(
                sprintf(
                    'Fichier bloc introuvable : %s',
                    // On n'affiche que le basename pour ne pas exposer le chemin serveur
                    basename(dirname($this-&gt;block_file_path)) . '/' . basename($this-&gt;block_file_path)
                )
            );
        }

        // Sauvegarder le contexte $_GET original
        $saved_get = $_GET;

        // Injecter les paramètres pour le bloc
        // Le bloc blocks/pronostics.php lit $_GET['date'], $_GET['reunion'], $_GET['course']
        $_GET['date']    = $this-&gt;date;
        $_GET['reunion'] = $this-&gt;reunion;
        $_GET['course']  = $this-&gt;course;

        // Capturer la sortie du bloc
        ob_start();

        try {
            include $this-&gt;block_file_path;
            $html = ob_get_clean();
        } catch (Exception $e) {
            // Nettoyage du buffer en cas d'erreur
            while (ob_get_level() &gt; 0) {
                ob_end_clean();
            }
            $_GET = $saved_get; // Restaurer $_GET même en cas d'erreur
            throw $e;
        }

        // Restaurer le contexte $_GET original
        $_GET = $saved_get;

        return $html;
    }
}
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="//1-10-courses.fr/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<sitemap>
		<loc>https://1-10-courses.fr/post-sitemap.xml</loc>
		<lastmod>2026-05-30T03:23:38+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://1-10-courses.fr/page-sitemap.xml</loc>
		<lastmod>2026-07-02T17:31:34+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://1-10-courses.fr/category-sitemap.xml</loc>
		<lastmod>2026-05-30T03:23:38+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://1-10-courses.fr/author-sitemap.xml</loc>
		<lastmod>2026-05-30T20:00:09+00:00</lastmod>
	</sitemap>
</sitemapindex>
<!-- XML Sitemap generated by Yoast SEO -->