{"id":85065,"date":"2025-01-01T20:38:23","date_gmt":"2025-01-01T18:38:23","guid":{"rendered":"https:\/\/centcols.org\/?p=85065"},"modified":"2025-07-29T11:31:57","modified_gmt":"2025-07-29T09:31:57","slug":"testschleife","status":"publish","type":"post","link":"https:\/\/centcols.org\/de\/test-loop\/","title":{"rendered":"Test Loop"},"content":{"rendered":"\n<div class=\"wp-block-cover alignfull\" style=\"min-height:250px;aspect-ratio:unset;\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" class=\"wp-block-cover__image-background wp-image-84103 size-full\" alt=\"\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/M01226_2.jpg\" data-object-fit=\"cover\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/M01226_2.jpg 800w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/M01226_2-768x576.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><span aria-hidden=\"true\" class=\"wp-block-cover__background has-black-background-color has-background-dim-20 has-background-dim\"><\/span><div class=\"wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow\">\n<h1 class=\"wp-block-heading has-text-align-center\" style=\"font-size:2.5rem\">Rejoindre le Club des Cent Cols<\/h1>\n<\/div><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Le Club des Cent Cols rassemble des passionn\u00e9\u00b7es de montagne, de libert\u00e9 et d&rsquo;aventure \u00e0 v\u00e9lo. Plus qu&rsquo;une liste de cols, c&rsquo;est un \u00e9tat d&rsquo;esprit&nbsp;! Sur cette page, retrouvez toutes les informations pour nous rejoindre.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">Le Club c\u2019est\u2026<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Une association de passionn\u00e9s de <strong>v\u00e9lo en montagne<\/strong>, fond\u00e9e en 1972, qui rassemble des cyclistes du monde entier unis par l&rsquo;amour des ascensions \u00e0 v\u00e9lo.<\/li>\n\n\n\n<li>Une philosophie tourn\u00e9e vers la d\u00e9couverte, la conqu\u00eate des cols mythiques ou moins connus et l\u2019exploration des vall\u00e9es riches d\u2019histoire et de culture.<\/li>\n\n\n\n<li>Un d\u00e9fi personnel consistant \u00e0 franchir \u00e0 bicyclette au moins cent cols diff\u00e9rents, dont cinq \u00e0 plus de 2000 m\u00e8tres d&rsquo;altitude, pour devenir membre de la confr\u00e9rie.<\/li>\n\n\n\n<li>Une diversit\u00e9 de pratiques cyclistes&nbsp;: v\u00e9lo de route, gravel, VTT, tandem ou handbike, tant que l\u2019effort est fourni par la seule force musculaire.<\/li>\n\n\n\n<li>Une communaut\u00e9 qui valorise la simplicit\u00e9, l&rsquo;amiti\u00e9, le partage d&rsquo;une passion commune et l&rsquo;\u00e9change d&rsquo;informations sur les itin\u00e9raires et les cols \u00e0 d\u00e9couvrir.<\/li>\n\n\n\n<li>Un acc\u00e8s \u00e0 des ressources telles que des catalogues de cols, des randonn\u00e9es permanentes, des brevets et des challenges pour enrichir votre exp\u00e9rience du cyclotourisme en montagne.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<h2 class=\"wp-block-heading\">\u2026 et ce que le Club n\u2019est pas<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Un club r\u00e9serv\u00e9 \u00e0 une \u00e9lite de cyclistes&nbsp;; il est ouvert \u00e0 tous ceux qui partagent l&rsquo;amour du v\u00e9lo en montagne et souhaitent relever le d\u00e9fi des cent cols.<\/li>\n\n\n\n<li>Une comp\u00e9tition&nbsp;: ici, pas de chronom\u00e8tres ni de records \u00e0 battre. L\u2019accent est mis sur le plaisir de la d\u00e9couverte et le d\u00e9passement personnel et non sur la performance sportive.<\/li>\n\n\n\n<li>Une activit\u00e9 r\u00e9serv\u00e9e aux seuls initi\u00e9s&nbsp;: le club est ouvert \u00e0 tous les amateurs de v\u00e9lo, quels que soient leur \u00e2ge ou leur niveau.<\/li>\n\n\n\n<li>Une simple collection&nbsp;: franchir un col, c\u2019est aussi d\u00e9couvrir des panoramas uniques, partager des moments conviviaux et s\u2019immerger dans la richesse culturelle des r\u00e9gions travers\u00e9es.<\/li>\n\n\n\n<li>Une structure rigide imposant des parcours sp\u00e9cifiques&nbsp;; chaque membre est libre de choisir ses itin\u00e9raires et les cols qu&rsquo;il souhaite gravir, dans le respect de la \u00ab\u00a0R\u00e8gle du jeu\u00a0\u00bb.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized is-style-default\"><a href=\"https:\/\/centcols.org\/formulaire-dinscription\/\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"675\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/formulaire2.jpg\" alt=\"\" class=\"wp-image-83221\" style=\"aspect-ratio:16\/9;object-fit:cover;width:800px\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/formulaire2.jpg 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/formulaire2-768x432.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/a><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/centcols.org\/formulaire-dinscription\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>formulaire inscription<\/strong><\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">\u00c0 savoir<\/h2>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n  <div id=\"no-loop-1\" class=\"loop-articles\">\n    <div class=\"row\">\n      \n      \n            <div class=\"col-lg-12\">\n                          <div class=\"row articles-list loading-articles\">\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/comment-faire\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"1750\" height=\"1313\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols.jpg 1750w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols-1200x900.jpg 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols-768x576.jpg 768w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols-1536x1152.jpg 1536w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/rassemblements-sejours-velo-club-cent-cols-600x450.jpg 600w\" sizes=\"auto, (max-width: 1750px) 100vw, 1750px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>\u00c0 savoir<\/p>\n                      <\/div>\n                      <h3>Comment faire ?<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/faciliter-la-saisie-des-cols-pour-les-futurs-adherents\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"343\" height=\"221\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/Image5.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>\u00c0 savoir<\/p>\n                      <\/div>\n                      <h3>Faciliter la saisie des cols pour les futurs adh\u00e9rents<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/regle-du-jeu\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png 1536w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3-1200x800.png 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3-768x512.png 768w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>\u00c0 savoir<\/p>\n                      <\/div>\n                      <h3>R\u00e8gle du jeu<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre adhesion\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/moyens-paiement\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"491\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/moyenspaiements.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/moyenspaiements.jpg 900w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/moyenspaiements-768x419.jpg 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>\u00c0 savoir<\/p>\n                      <\/div>\n                      <h3>Comment effectuer son r\u00e8glement au Club des Cent Cols ?<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre faq\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/faq-les-cols\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"450\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faqcols.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faqcols.jpg 800w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faqcols-768x432.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>FAQ<\/p>\n                      <\/div>\n                      <h3>FAQ &#8211; Les cols<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"a-savoir-rejoindre faq\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/faq-le-club\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faq.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faq.jpg 1600w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faq-1200x675.jpg 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faq-768x432.jpg 768w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/faq-1536x864.jpg 1536w\" sizes=\"auto, (max-width: 1600px) 100vw, 1600px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>FAQ<\/p>\n                      <\/div>\n                      <h3>FAQ \u2013 Le Club<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                      <\/div>\n\n          \n        \n\n      <\/div>\n          <\/div>\n  <\/div>\n  <script>\n    (function() {\n      const container = document.getElementById('no-loop-1');\n      if (!container) return;\n      const checkboxes = container.querySelectorAll('.filter-checkbox');\n      const dropdowns = container.querySelectorAll('.filter-dropdown');\n      const buttons = container.querySelectorAll('.filter-button');\n      const articles = container.querySelectorAll('.article-item');\n      const filterContainer = container.querySelector('.category-hierarchy-sidebar');\n      const articlesContainer = container.querySelector('.articles-list');\n\n      \/\/ \u00c9l\u00e9ments de pagination\n      const prevButton = container.querySelector('.pagination-prev');\n      const nextButton = container.querySelector('.pagination-next');\n      const currentPageSpan = container.querySelector('.current-page');\n      const totalPagesSpan = container.querySelector('.total-pages');\n\n      \/\/ Variables de pagination\n      let currentPage = 1;\n      let totalPages = parseInt(totalPagesSpan?.textContent || '1', 10);\n      const postsPerPage = 15;\n\n      \/\/ Fonction de gestion de la pagination\n      function handlePagination() {\n        if (!prevButton || !nextButton) return;\n\n        prevButton.addEventListener('click', () => {\n          if (currentPage > 1) {\n            currentPage--;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        nextButton.addEventListener('click', () => {\n          if (currentPage < totalPages) {\n            currentPage++;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        \/\/ Initialise l'\u00e9tat des boutons\n        updatePaginationButtons();\n      }\n\n      function updatePagination() {\n        \/\/ Mise \u00e0 jour des boutons\n        updatePaginationButtons();\n\n        \/\/ Mise \u00e0 jour du num\u00e9ro de page affich\u00e9\n        if (currentPageSpan) {\n          currentPageSpan.textContent = currentPage;\n        }\n\n        \/\/ Filtre les articles \u00e0 afficher selon la page actuelle\n        filterArticles();\n      }\n\n      function updatePaginationButtons() {\n        if (prevButton) {\n          prevButton.disabled = currentPage === 1;\n        }\n        if (nextButton) {\n          nextButton.disabled = currentPage === totalPages;\n        }\n      }\n\n      function scrollToTop() {\n        \/\/ Scroll vers le haut de la liste des articles\n        const scrollToElement = articlesContainer || container.querySelector('.loop-articles');\n        if (scrollToElement) {\n          scrollToElement.scrollIntoView({\n            behavior: 'smooth',\n            block: 'start'\n          });\n        }\n      }\n\n      \/\/ Gestion de la popup de description\n      const openPopupBtn = container.querySelector('.open-description-popup');\n      const popupOverlay = container.querySelector('.description-popup-overlay');\n      const closePopupBtn = container.querySelector('.close-popup');\n\n      if (openPopupBtn && popupOverlay) {\n        openPopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'flex';\n          document.body.style.overflow = 'hidden'; \/\/ Emp\u00eacher le d\u00e9filement\n        });\n      }\n\n      if (closePopupBtn && popupOverlay) {\n        closePopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'none';\n          document.body.style.overflow = ''; \/\/ R\u00e9activer le d\u00e9filement\n        });\n\n        \/\/ Fermer en cliquant en dehors du contenu\n        popupOverlay.addEventListener('click', function(e) {\n          if (e.target === popupOverlay) {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n\n        \/\/ Fermer avec Echap\n        document.addEventListener('keydown', function(e) {\n          if (e.key === 'Escape' && popupOverlay.style.display === 'flex') {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n      }\n\n      \/\/ Variable pour suivre si l'initialisation est termin\u00e9e\n      let initialized = false;\n\n      \/\/ Gestion du toggle mobile pour les filtres\n      const filterToggle = container.querySelector('.filter-toggle');\n      const categoryButtons = container.querySelector('.category-buttons');\n\n      if (filterToggle && categoryButtons) {\n        filterToggle.addEventListener('click', function() {\n          const isExpanded = filterToggle.getAttribute('aria-expanded') === 'true';\n          const toggleText = filterToggle.querySelector('.toggle-text');\n          const toggleIcon = filterToggle.querySelector('.toggle-icon');\n\n          if (isExpanded) {\n            \/\/ Fermer\n            categoryButtons.style.display = 'none';\n            filterToggle.setAttribute('aria-expanded', 'false');\n            toggleText.textContent = 'Afficher les filtres';\n            toggleIcon.textContent = '\u25bc';\n            filterToggle.classList.remove('expanded');\n          } else {\n            \/\/ Ouvrir\n            categoryButtons.style.display = 'flex';\n            filterToggle.setAttribute('aria-expanded', 'true');\n            toggleText.textContent = 'Masquer les filtres';\n            toggleIcon.textContent = '\u25b2';\n            filterToggle.classList.add('expanded');\n          }\n        });\n      }\n\n      \/\/ Stocker les options originales de chaque liste d\u00e9roulante pour pouvoir les restaurer\n      const originalOptions = {};\n\n      \/\/ Sauvegarder les options originales de toutes les listes d\u00e9roulantes\n      dropdowns.forEach(dropdown => {\n        const options = Array.from(dropdown.options).map(opt => ({\n          value: opt.value,\n          text: opt.text,\n          disabled: opt.disabled\n        }));\n        originalOptions[dropdown.dataset.group] = options;\n      });\n\n      \/\/ Gestion des boutons (layout=\"buttons\")\n      buttons.forEach(button => {\n        button.addEventListener('click', () => {\n          const cat = button.dataset.category;\n\n          \/\/ Si le bouton est d\u00e9j\u00e0 actif\n          if (button.classList.contains('active')) {\n            \/\/ Compter combien de boutons sont actifs\n            const activeCount = container.querySelectorAll('.filter-button.active').length;\n            \/\/ Si c'est le seul bouton actif, ne rien faire (emp\u00eacher la d\u00e9sactivation)\n            if (activeCount === 1) {\n              return;\n            }\n            \/\/ Sinon, on peut le d\u00e9sactiver normalement\n            button.classList.remove('active');\n          } else {\n            \/\/ D\u00e9sactiver tous les boutons\n            buttons.forEach(btn => btn.classList.remove('active'));\n            \/\/ Activer uniquement le bouton cliqu\u00e9\n            button.classList.add('active');\n          }\n\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des checkboxes (layout=\"filters\")\n      checkboxes.forEach(function(checkbox) {\n        checkbox.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des listes d\u00e9roulantes (nouveau)\n      dropdowns.forEach(function(dropdown) {\n        dropdown.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Fonction principale qui filtre les articles en fonction des filtres actifs\n      function filterArticles() {\n        const groupFilters = {}; \/\/ Structure qui stocke les filtres actifs regroup\u00e9s par \"groupe\"\n        let anyFilterActive = false; \/\/ Pour savoir si au moins un filtre est actif\n\n        \/\/ R\u00e9cup\u00e9ration des checkboxes coch\u00e9es\n        checkboxes.forEach(cb => {\n          if (cb.checked) {\n            anyFilterActive = true;\n            const group = cb.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(cb.dataset.category);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des valeurs de listes d\u00e9roulantes s\u00e9lectionn\u00e9es\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            anyFilterActive = true;\n            const group = dropdown.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(dropdown.value);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des boutons actifs\n        buttons.forEach(btn => {\n          if (btn.classList.contains('active')) {\n            anyFilterActive = true;\n            const group = \"a-savoir-rejoindre\";\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(btn.dataset.category);\n          }\n        });\n\n        \/\/ Pour chaque article, on v\u00e9rifie s'il correspond aux filtres et \u00e0 la page actuelle\n        let visibleCount = 0;\n        let filteredArticles = [];\n\n        articles.forEach(article => {\n          const articleCatList = article.dataset.category.split(' ');\n          let matchesAllGroups = true;\n\n          for (const group in groupFilters) {\n            const groupSet = groupFilters[group];\n            const hasMatchInGroup = Array.from(groupSet).some(cat => articleCatList.includes(cat));\n            if (!hasMatchInGroup) {\n              matchesAllGroups = false;\n              break;\n            }\n          }\n\n          \/\/ Si l'article correspond aux filtres, on le garde pour la pagination\n          if (matchesAllGroups) {\n            filteredArticles.push(article);\n          }\n\n          \/\/ On cache initialement tous les articles\n          article.style.display = 'none';\n        });\n\n        \/\/ Recalcul du nombre total de pages en fonction des articles filtr\u00e9s\n        totalPages = Math.max(1, Math.ceil(filteredArticles.length \/ postsPerPage));\n        if (totalPagesSpan) {\n          totalPagesSpan.textContent = totalPages.toString();\n        }\n\n        \/\/ Si la page actuelle d\u00e9passe le nouveau nombre total de pages, on revient \u00e0 la derni\u00e8re page disponible\n        if (currentPage > totalPages) {\n          currentPage = totalPages;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n        }\n\n        \/\/ Mettre \u00e0 jour les boutons de pagination\n        updatePaginationButtons();\n\n        \/\/ Afficher uniquement les articles de la page actuelle\n        const startIndex = (currentPage - 1) * postsPerPage;\n        const endIndex = Math.min(startIndex + postsPerPage, filteredArticles.length);\n\n        for (let i = startIndex; i < endIndex; i++) {\n          if (filteredArticles[i]) {\n            filteredArticles[i].style.display = 'block';\n          }\n        }\n\n        \/\/ Retire l'effet de chargement si activ\u00e9\n        if (filterContainer && filterContainer.classList.contains('loading')) {\n          filterContainer.classList.remove('loading');\n        }\n\n        \/\/ Une fois les articles filtr\u00e9s et initialis\u00e9s, nous pouvons afficher le conteneur\n        if (!initialized && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        return groupFilters; \/\/ Retourner les filtres actifs pour \u00eatre utilis\u00e9s par updateAvailableFilters()\n      }\n\n      \/\/ Nouvelle fonction pour mettre \u00e0 jour les options disponibles dans les listes d\u00e9roulantes\n      function updateAvailableFilters() {\n        if (dropdowns.length === 0) return;\n\n        \/\/ Ajouter une classe de chargement pendant la mise \u00e0 jour\n        if (filterContainer) filterContainer.classList.add('updating');\n\n        const activeFilters = filterArticles(); \/\/ R\u00e9cup\u00e9rer les filtres actuellement actifs\n\n        \/\/ Pour chaque liste d\u00e9roulante, nous devons d\u00e9terminer quelles options sont valides\n        dropdowns.forEach(dropdown => {\n          const currentGroup = dropdown.dataset.group;\n          const currentValue = dropdown.value;\n\n          \/\/ Cloner les filtters actifs sans inclure le filtre de cette liste d\u00e9roulante\n          const otherFilters = {};\n          for (const group in activeFilters) {\n            if (group !== currentGroup) {\n              otherFilters[group] = new Set(activeFilters[group]);\n            }\n          }\n\n          \/\/ D\u00e9terminer quelles options correspondent aux articles qui passeraient le filtre\n          const validOptions = new Set(['']); \/\/ L'option vide (Tous) est toujours valide\n\n          \/\/ Pour chaque article, v\u00e9rifier si son option est valide avec les autres filtres actifs\n          articles.forEach(article => {\n            const articleCats = article.dataset.category.split(' ');\n            let matchesOtherFilters = true;\n\n            \/\/ V\u00e9rifier si l'article correspond aux filtres des autres groupes\n            for (const group in otherFilters) {\n              const groupSet = otherFilters[group];\n              const hasMatch = Array.from(groupSet).some(cat => articleCats.includes(cat));\n              if (!hasMatch && groupSet.size > 0) {\n                matchesOtherFilters = false;\n                break;\n              }\n            }\n\n            \/\/ Si l'article correspond aux autres filtres, toutes ses cat\u00e9gories sont valides\n            if (matchesOtherFilters) {\n              articleCats.forEach(cat => validOptions.add(cat));\n            }\n          });\n\n          \/\/ R\u00e9tablir toutes les options originales\n          while (dropdown.options.length > 0) {\n            dropdown.remove(0);\n          }\n\n          \/\/ Recr\u00e9er les options en ne gardant que celles qui sont valides\n          originalOptions[currentGroup].forEach(option => {\n            const opt = document.createElement('option');\n            opt.value = option.value;\n            opt.textContent = option.text;\n\n            \/\/ Si l'option n'est pas dans la liste des valides, la d\u00e9sactiver\n            \/\/ sauf si c'est la valeur actuellement s\u00e9lectionn\u00e9e ou l'option \"Tous\"\n            if (!validOptions.has(option.value) && option.value !== currentValue && option.value !== '') {\n              opt.disabled = true;\n            }\n\n            dropdown.appendChild(opt);\n          });\n\n          \/\/ Restaurer la valeur s\u00e9lectionn\u00e9e\n          dropdown.value = currentValue;\n        });\n\n        \/\/ Retirer la classe de chargement\n        if (filterContainer) filterContainer.classList.remove('updating');\n      }\n\n      \/\/ Met \u00e0 jour l'URL avec les filtres actifs (pour partage ou navigation)\n      function updateUrl() {\n        const url = new URL(window.location.href);\n        const params = new URLSearchParams();\n\n        \/\/ Ajouter la page courante aux param\u00e8tres\n        params.set('page', currentPage.toString());\n\n        \/\/ Pour les checkboxes\n        checkboxes.forEach(checkbox => {\n          if (checkbox.checked) {\n            const group = checkbox.dataset.group;\n            if (!params.has(group)) {\n              params.set(group, checkbox.dataset.category);\n            } else {\n              const existing = params.get(group);\n              params.set(group, existing + ',' + checkbox.dataset.category);\n            }\n          }\n        });\n\n        \/\/ Pour les listes d\u00e9roulantes\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            const group = dropdown.dataset.group;\n            params.set(group, dropdown.value);\n          }\n        });\n\n        \/\/ Pour les boutons (un seul sera actif \u00e0 la fois)\n        const activeButton = container.querySelector('.filter-button.active');\n        if (activeButton) {\n          const group = \"a-savoir-rejoindre\";\n          params.set('active_button', activeButton.dataset.category);\n        }\n\n        const queryString = params.toString();\n        const newUrl = queryString ? `${url.origin}${url.pathname}?${queryString}` : `${url.origin}${url.pathname}`;\n\n        history.replaceState(null, '', newUrl);\n      }\n\n      \/\/ Applique les filtres si pr\u00e9sents dans l'URL (ex: apr\u00e8s rechargement ou lien partag\u00e9)\n      function applyUrlParams() {\n        const params = new URLSearchParams(window.location.search);\n        let hasUrlFilters = false;\n\n        \/\/ R\u00e9cup\u00e9rer la page depuis l'URL\n        if (params.has('page')) {\n          currentPage = parseInt(params.get('page'), 10) || 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n          hasUrlFilters = true;\n        }\n\n        \/\/ Pour les checkboxes\n        params.forEach((value, key) => {\n          if (key !== 'active_button' && key !== 'page') {\n            hasUrlFilters = true;\n            const values = value.split(',');\n            values.forEach(val => {\n              const checkbox = container.querySelector(`.filter-checkbox[data-category=\"${val}\"]`);\n              if (checkbox) {\n                checkbox.checked = true;\n              }\n\n              \/\/ Pour les listes d\u00e9roulantes\n              const dropdown = container.querySelector(`.filter-dropdown[data-group=\"${key}\"]`);\n              if (dropdown) {\n                dropdown.value = val;\n              }\n            });\n          }\n        });\n\n        \/\/ Pour le bouton actif depuis l'URL\n        const activeButtonSlug = params.get('active_button');\n        if (activeButtonSlug) {\n          hasUrlFilters = true;\n          const buttonToActivate = container.querySelector(`.filter-button[data-category=\"${activeButtonSlug}\"]`);\n          if (buttonToActivate) {\n            buttonToActivate.classList.add('active');\n          }\n        }\n\n        \/\/ Si des param\u00e8tres d'URL sont pr\u00e9sents, nous maintenons le conteneur cach\u00e9 jusqu'\u00e0 ce que les filtres soient appliqu\u00e9s\n        if (!hasUrlFilters && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        filterArticles();\n        updateAvailableFilters();\n      }\n\n      \/\/ Initialisation au chargement\n      filterArticles();\n      updateAvailableFilters();\n      handlePagination();\n      applyUrlParams();\n    })();\n  <\/script>\n\n\n\n\n\n<h2 class=\"wp-block-heading\">En savoir plus<\/h2>\n\n\n  <div id=\"no-loop-2\" class=\"loop-articles\">\n    <div class=\"row\">\n      \n      \n            <div class=\"col-lg-12\">\n                          <div class=\"row articles-list loading-articles\">\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"en-savoir-plus-rejoindre nous-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/cotisation-annuelle\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"491\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/cotisation-annuelle.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/cotisation-annuelle.jpg 900w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/06\/cotisation-annuelle-768x419.jpg 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>En savoir plus<\/p>\n                      <\/div>\n                      <h3>Cotisation annuelle<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"en-savoir-plus-rejoindre nous-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/en-savoir-plus-sur-le-club-des-cent-cols\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"1536\" height=\"1024\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/en-savoir-plus-01.png\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/en-savoir-plus-01.png 1536w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/en-savoir-plus-01-1200x800.png 1200w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/en-savoir-plus-01-768x512.png 768w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/en-savoir-plus-01-18x12.png 18w\" sizes=\"auto, (max-width: 1536px) 100vw, 1536px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>En savoir plus<\/p>\n                      <\/div>\n                      <h3>En savoir plus sur le Club des Cent Cols<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                          <div class=\"col-xl-4 col-md-6 article-item\" data-category=\"en-savoir-plus-rejoindre\" data-page=\"1\" >\n                <a href=\"https:\/\/centcols.org\/de\/diaporama-club-des-cent-cols\/\">\n                  <article>\n                    <div class=\"image\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"208\" src=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/montcenis-e1743029880875.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" srcset=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/montcenis-e1743029880875.jpg 800w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/montcenis-e1743029880875-768x200.jpg 768w, https:\/\/centcols.org\/wp-content\/uploads\/2025\/02\/montcenis-e1743029880875-600x156.jpg 600w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/div>\n                    <div class=\"contenu\">\n                      <div class=\"cat\">\n                        <p>En savoir plus<\/p>\n                      <\/div>\n                      <h3>Diaporama Club des Cent Cols<\/h3>\n                      <p class=\"btn-secondary\">En savoir plus<\/p>\n                    <\/div>\n                  <\/article>\n                <\/a>\n              <\/div>\n                      <\/div>\n\n          \n        \n\n      <\/div>\n          <\/div>\n  <\/div>\n  <script>\n    (function() {\n      const container = document.getElementById('no-loop-2');\n      if (!container) return;\n      const checkboxes = container.querySelectorAll('.filter-checkbox');\n      const dropdowns = container.querySelectorAll('.filter-dropdown');\n      const buttons = container.querySelectorAll('.filter-button');\n      const articles = container.querySelectorAll('.article-item');\n      const filterContainer = container.querySelector('.category-hierarchy-sidebar');\n      const articlesContainer = container.querySelector('.articles-list');\n\n      \/\/ \u00c9l\u00e9ments de pagination\n      const prevButton = container.querySelector('.pagination-prev');\n      const nextButton = container.querySelector('.pagination-next');\n      const currentPageSpan = container.querySelector('.current-page');\n      const totalPagesSpan = container.querySelector('.total-pages');\n\n      \/\/ Variables de pagination\n      let currentPage = 1;\n      let totalPages = parseInt(totalPagesSpan?.textContent || '1', 10);\n      const postsPerPage = 15;\n\n      \/\/ Fonction de gestion de la pagination\n      function handlePagination() {\n        if (!prevButton || !nextButton) return;\n\n        prevButton.addEventListener('click', () => {\n          if (currentPage > 1) {\n            currentPage--;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        nextButton.addEventListener('click', () => {\n          if (currentPage < totalPages) {\n            currentPage++;\n            updatePagination();\n            scrollToTop();\n          }\n        });\n\n        \/\/ Initialise l'\u00e9tat des boutons\n        updatePaginationButtons();\n      }\n\n      function updatePagination() {\n        \/\/ Mise \u00e0 jour des boutons\n        updatePaginationButtons();\n\n        \/\/ Mise \u00e0 jour du num\u00e9ro de page affich\u00e9\n        if (currentPageSpan) {\n          currentPageSpan.textContent = currentPage;\n        }\n\n        \/\/ Filtre les articles \u00e0 afficher selon la page actuelle\n        filterArticles();\n      }\n\n      function updatePaginationButtons() {\n        if (prevButton) {\n          prevButton.disabled = currentPage === 1;\n        }\n        if (nextButton) {\n          nextButton.disabled = currentPage === totalPages;\n        }\n      }\n\n      function scrollToTop() {\n        \/\/ Scroll vers le haut de la liste des articles\n        const scrollToElement = articlesContainer || container.querySelector('.loop-articles');\n        if (scrollToElement) {\n          scrollToElement.scrollIntoView({\n            behavior: 'smooth',\n            block: 'start'\n          });\n        }\n      }\n\n      \/\/ Gestion de la popup de description\n      const openPopupBtn = container.querySelector('.open-description-popup');\n      const popupOverlay = container.querySelector('.description-popup-overlay');\n      const closePopupBtn = container.querySelector('.close-popup');\n\n      if (openPopupBtn && popupOverlay) {\n        openPopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'flex';\n          document.body.style.overflow = 'hidden'; \/\/ Emp\u00eacher le d\u00e9filement\n        });\n      }\n\n      if (closePopupBtn && popupOverlay) {\n        closePopupBtn.addEventListener('click', function() {\n          popupOverlay.style.display = 'none';\n          document.body.style.overflow = ''; \/\/ R\u00e9activer le d\u00e9filement\n        });\n\n        \/\/ Fermer en cliquant en dehors du contenu\n        popupOverlay.addEventListener('click', function(e) {\n          if (e.target === popupOverlay) {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n\n        \/\/ Fermer avec Echap\n        document.addEventListener('keydown', function(e) {\n          if (e.key === 'Escape' && popupOverlay.style.display === 'flex') {\n            popupOverlay.style.display = 'none';\n            document.body.style.overflow = '';\n          }\n        });\n      }\n\n      \/\/ Variable pour suivre si l'initialisation est termin\u00e9e\n      let initialized = false;\n\n      \/\/ Gestion du toggle mobile pour les filtres\n      const filterToggle = container.querySelector('.filter-toggle');\n      const categoryButtons = container.querySelector('.category-buttons');\n\n      if (filterToggle && categoryButtons) {\n        filterToggle.addEventListener('click', function() {\n          const isExpanded = filterToggle.getAttribute('aria-expanded') === 'true';\n          const toggleText = filterToggle.querySelector('.toggle-text');\n          const toggleIcon = filterToggle.querySelector('.toggle-icon');\n\n          if (isExpanded) {\n            \/\/ Fermer\n            categoryButtons.style.display = 'none';\n            filterToggle.setAttribute('aria-expanded', 'false');\n            toggleText.textContent = 'Afficher les filtres';\n            toggleIcon.textContent = '\u25bc';\n            filterToggle.classList.remove('expanded');\n          } else {\n            \/\/ Ouvrir\n            categoryButtons.style.display = 'flex';\n            filterToggle.setAttribute('aria-expanded', 'true');\n            toggleText.textContent = 'Masquer les filtres';\n            toggleIcon.textContent = '\u25b2';\n            filterToggle.classList.add('expanded');\n          }\n        });\n      }\n\n      \/\/ Stocker les options originales de chaque liste d\u00e9roulante pour pouvoir les restaurer\n      const originalOptions = {};\n\n      \/\/ Sauvegarder les options originales de toutes les listes d\u00e9roulantes\n      dropdowns.forEach(dropdown => {\n        const options = Array.from(dropdown.options).map(opt => ({\n          value: opt.value,\n          text: opt.text,\n          disabled: opt.disabled\n        }));\n        originalOptions[dropdown.dataset.group] = options;\n      });\n\n      \/\/ Gestion des boutons (layout=\"buttons\")\n      buttons.forEach(button => {\n        button.addEventListener('click', () => {\n          const cat = button.dataset.category;\n\n          \/\/ Si le bouton est d\u00e9j\u00e0 actif\n          if (button.classList.contains('active')) {\n            \/\/ Compter combien de boutons sont actifs\n            const activeCount = container.querySelectorAll('.filter-button.active').length;\n            \/\/ Si c'est le seul bouton actif, ne rien faire (emp\u00eacher la d\u00e9sactivation)\n            if (activeCount === 1) {\n              return;\n            }\n            \/\/ Sinon, on peut le d\u00e9sactiver normalement\n            button.classList.remove('active');\n          } else {\n            \/\/ D\u00e9sactiver tous les boutons\n            buttons.forEach(btn => btn.classList.remove('active'));\n            \/\/ Activer uniquement le bouton cliqu\u00e9\n            button.classList.add('active');\n          }\n\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des checkboxes (layout=\"filters\")\n      checkboxes.forEach(function(checkbox) {\n        checkbox.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Gestion des listes d\u00e9roulantes (nouveau)\n      dropdowns.forEach(function(dropdown) {\n        dropdown.addEventListener('change', () => {\n          \/\/ R\u00e9initialiser la pagination \u00e0 la premi\u00e8re page lors du changement de filtre\n          currentPage = 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = '1';\n          }\n\n          filterArticles();\n          updateAvailableFilters();\n          updateUrl();\n        });\n      });\n\n      \/\/ Fonction principale qui filtre les articles en fonction des filtres actifs\n      function filterArticles() {\n        const groupFilters = {}; \/\/ Structure qui stocke les filtres actifs regroup\u00e9s par \"groupe\"\n        let anyFilterActive = false; \/\/ Pour savoir si au moins un filtre est actif\n\n        \/\/ R\u00e9cup\u00e9ration des checkboxes coch\u00e9es\n        checkboxes.forEach(cb => {\n          if (cb.checked) {\n            anyFilterActive = true;\n            const group = cb.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(cb.dataset.category);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des valeurs de listes d\u00e9roulantes s\u00e9lectionn\u00e9es\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            anyFilterActive = true;\n            const group = dropdown.dataset.group;\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(dropdown.value);\n          }\n        });\n\n        \/\/ R\u00e9cup\u00e9ration des boutons actifs\n        buttons.forEach(btn => {\n          if (btn.classList.contains('active')) {\n            anyFilterActive = true;\n            const group = \"en-savoir-plus-rejoindre\";\n            if (!groupFilters[group]) groupFilters[group] = new Set();\n            groupFilters[group].add(btn.dataset.category);\n          }\n        });\n\n        \/\/ Pour chaque article, on v\u00e9rifie s'il correspond aux filtres et \u00e0 la page actuelle\n        let visibleCount = 0;\n        let filteredArticles = [];\n\n        articles.forEach(article => {\n          const articleCatList = article.dataset.category.split(' ');\n          let matchesAllGroups = true;\n\n          for (const group in groupFilters) {\n            const groupSet = groupFilters[group];\n            const hasMatchInGroup = Array.from(groupSet).some(cat => articleCatList.includes(cat));\n            if (!hasMatchInGroup) {\n              matchesAllGroups = false;\n              break;\n            }\n          }\n\n          \/\/ Si l'article correspond aux filtres, on le garde pour la pagination\n          if (matchesAllGroups) {\n            filteredArticles.push(article);\n          }\n\n          \/\/ On cache initialement tous les articles\n          article.style.display = 'none';\n        });\n\n        \/\/ Recalcul du nombre total de pages en fonction des articles filtr\u00e9s\n        totalPages = Math.max(1, Math.ceil(filteredArticles.length \/ postsPerPage));\n        if (totalPagesSpan) {\n          totalPagesSpan.textContent = totalPages.toString();\n        }\n\n        \/\/ Si la page actuelle d\u00e9passe le nouveau nombre total de pages, on revient \u00e0 la derni\u00e8re page disponible\n        if (currentPage > totalPages) {\n          currentPage = totalPages;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n        }\n\n        \/\/ Mettre \u00e0 jour les boutons de pagination\n        updatePaginationButtons();\n\n        \/\/ Afficher uniquement les articles de la page actuelle\n        const startIndex = (currentPage - 1) * postsPerPage;\n        const endIndex = Math.min(startIndex + postsPerPage, filteredArticles.length);\n\n        for (let i = startIndex; i < endIndex; i++) {\n          if (filteredArticles[i]) {\n            filteredArticles[i].style.display = 'block';\n          }\n        }\n\n        \/\/ Retire l'effet de chargement si activ\u00e9\n        if (filterContainer && filterContainer.classList.contains('loading')) {\n          filterContainer.classList.remove('loading');\n        }\n\n        \/\/ Une fois les articles filtr\u00e9s et initialis\u00e9s, nous pouvons afficher le conteneur\n        if (!initialized && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        return groupFilters; \/\/ Retourner les filtres actifs pour \u00eatre utilis\u00e9s par updateAvailableFilters()\n      }\n\n      \/\/ Nouvelle fonction pour mettre \u00e0 jour les options disponibles dans les listes d\u00e9roulantes\n      function updateAvailableFilters() {\n        if (dropdowns.length === 0) return;\n\n        \/\/ Ajouter une classe de chargement pendant la mise \u00e0 jour\n        if (filterContainer) filterContainer.classList.add('updating');\n\n        const activeFilters = filterArticles(); \/\/ R\u00e9cup\u00e9rer les filtres actuellement actifs\n\n        \/\/ Pour chaque liste d\u00e9roulante, nous devons d\u00e9terminer quelles options sont valides\n        dropdowns.forEach(dropdown => {\n          const currentGroup = dropdown.dataset.group;\n          const currentValue = dropdown.value;\n\n          \/\/ Cloner les filtters actifs sans inclure le filtre de cette liste d\u00e9roulante\n          const otherFilters = {};\n          for (const group in activeFilters) {\n            if (group !== currentGroup) {\n              otherFilters[group] = new Set(activeFilters[group]);\n            }\n          }\n\n          \/\/ D\u00e9terminer quelles options correspondent aux articles qui passeraient le filtre\n          const validOptions = new Set(['']); \/\/ L'option vide (Tous) est toujours valide\n\n          \/\/ Pour chaque article, v\u00e9rifier si son option est valide avec les autres filtres actifs\n          articles.forEach(article => {\n            const articleCats = article.dataset.category.split(' ');\n            let matchesOtherFilters = true;\n\n            \/\/ V\u00e9rifier si l'article correspond aux filtres des autres groupes\n            for (const group in otherFilters) {\n              const groupSet = otherFilters[group];\n              const hasMatch = Array.from(groupSet).some(cat => articleCats.includes(cat));\n              if (!hasMatch && groupSet.size > 0) {\n                matchesOtherFilters = false;\n                break;\n              }\n            }\n\n            \/\/ Si l'article correspond aux autres filtres, toutes ses cat\u00e9gories sont valides\n            if (matchesOtherFilters) {\n              articleCats.forEach(cat => validOptions.add(cat));\n            }\n          });\n\n          \/\/ R\u00e9tablir toutes les options originales\n          while (dropdown.options.length > 0) {\n            dropdown.remove(0);\n          }\n\n          \/\/ Recr\u00e9er les options en ne gardant que celles qui sont valides\n          originalOptions[currentGroup].forEach(option => {\n            const opt = document.createElement('option');\n            opt.value = option.value;\n            opt.textContent = option.text;\n\n            \/\/ Si l'option n'est pas dans la liste des valides, la d\u00e9sactiver\n            \/\/ sauf si c'est la valeur actuellement s\u00e9lectionn\u00e9e ou l'option \"Tous\"\n            if (!validOptions.has(option.value) && option.value !== currentValue && option.value !== '') {\n              opt.disabled = true;\n            }\n\n            dropdown.appendChild(opt);\n          });\n\n          \/\/ Restaurer la valeur s\u00e9lectionn\u00e9e\n          dropdown.value = currentValue;\n        });\n\n        \/\/ Retirer la classe de chargement\n        if (filterContainer) filterContainer.classList.remove('updating');\n      }\n\n      \/\/ Met \u00e0 jour l'URL avec les filtres actifs (pour partage ou navigation)\n      function updateUrl() {\n        const url = new URL(window.location.href);\n        const params = new URLSearchParams();\n\n        \/\/ Ajouter la page courante aux param\u00e8tres\n        params.set('page', currentPage.toString());\n\n        \/\/ Pour les checkboxes\n        checkboxes.forEach(checkbox => {\n          if (checkbox.checked) {\n            const group = checkbox.dataset.group;\n            if (!params.has(group)) {\n              params.set(group, checkbox.dataset.category);\n            } else {\n              const existing = params.get(group);\n              params.set(group, existing + ',' + checkbox.dataset.category);\n            }\n          }\n        });\n\n        \/\/ Pour les listes d\u00e9roulantes\n        dropdowns.forEach(dropdown => {\n          if (dropdown.value) {\n            const group = dropdown.dataset.group;\n            params.set(group, dropdown.value);\n          }\n        });\n\n        \/\/ Pour les boutons (un seul sera actif \u00e0 la fois)\n        const activeButton = container.querySelector('.filter-button.active');\n        if (activeButton) {\n          const group = \"en-savoir-plus-rejoindre\";\n          params.set('active_button', activeButton.dataset.category);\n        }\n\n        const queryString = params.toString();\n        const newUrl = queryString ? `${url.origin}${url.pathname}?${queryString}` : `${url.origin}${url.pathname}`;\n\n        history.replaceState(null, '', newUrl);\n      }\n\n      \/\/ Applique les filtres si pr\u00e9sents dans l'URL (ex: apr\u00e8s rechargement ou lien partag\u00e9)\n      function applyUrlParams() {\n        const params = new URLSearchParams(window.location.search);\n        let hasUrlFilters = false;\n\n        \/\/ R\u00e9cup\u00e9rer la page depuis l'URL\n        if (params.has('page')) {\n          currentPage = parseInt(params.get('page'), 10) || 1;\n          if (currentPageSpan) {\n            currentPageSpan.textContent = currentPage.toString();\n          }\n          hasUrlFilters = true;\n        }\n\n        \/\/ Pour les checkboxes\n        params.forEach((value, key) => {\n          if (key !== 'active_button' && key !== 'page') {\n            hasUrlFilters = true;\n            const values = value.split(',');\n            values.forEach(val => {\n              const checkbox = container.querySelector(`.filter-checkbox[data-category=\"${val}\"]`);\n              if (checkbox) {\n                checkbox.checked = true;\n              }\n\n              \/\/ Pour les listes d\u00e9roulantes\n              const dropdown = container.querySelector(`.filter-dropdown[data-group=\"${key}\"]`);\n              if (dropdown) {\n                dropdown.value = val;\n              }\n            });\n          }\n        });\n\n        \/\/ Pour le bouton actif depuis l'URL\n        const activeButtonSlug = params.get('active_button');\n        if (activeButtonSlug) {\n          hasUrlFilters = true;\n          const buttonToActivate = container.querySelector(`.filter-button[data-category=\"${activeButtonSlug}\"]`);\n          if (buttonToActivate) {\n            buttonToActivate.classList.add('active');\n          }\n        }\n\n        \/\/ Si des param\u00e8tres d'URL sont pr\u00e9sents, nous maintenons le conteneur cach\u00e9 jusqu'\u00e0 ce que les filtres soient appliqu\u00e9s\n        if (!hasUrlFilters && articlesContainer) {\n          articlesContainer.classList.remove('loading-articles');\n          initialized = true;\n        }\n\n        filterArticles();\n        updateAvailableFilters();\n      }\n\n      \/\/ Initialisation au chargement\n      filterArticles();\n      updateAvailableFilters();\n      handlePagination();\n      applyUrlParams();\n    })();\n  <\/script>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Der \u201eClub des Cent Cols\u201c vereint Menschen, die sich f\u00fcr die Berge, die Freiheit und das Abenteuer auf dem Fahrrad begeistern. Mehr als nur eine Liste von P\u00e4ssen \u2013 es ist eine Lebenseinstellung! Auf dieser Seite finden Sie alle Informationen, um sich uns anzuschlie\u00dfen. Der Club ist\u2026 \u2026 und was der Club nicht ist Wissenswertes Mehr erfahren<\/p>","protected":false},"author":3,"featured_media":83203,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[244],"tags":[],"class_list":["post-85065","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classifiee"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Test Loop - Club des Cent Cols<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/centcols.org\/de\/testschleife\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Test Loop - Club des Cent Cols\" \/>\n<meta property=\"og:description\" content=\"Le Club des Cent Cols rassemble des passionn\u00e9\u00b7es de montagne, de libert\u00e9 et d&rsquo;aventure \u00e0 v\u00e9lo. Plus qu&rsquo;une liste de cols, c&rsquo;est un \u00e9tat d&rsquo;esprit&nbsp;! Sur cette page, retrouvez toutes les informations pour nous rejoindre. Le Club c\u2019est\u2026 \u2026 et ce que le Club n\u2019est pas \u00c0 savoir En savoir plus\" \/>\n<meta property=\"og:url\" content=\"https:\/\/centcols.org\/de\/testschleife\/\" \/>\n<meta property=\"og:site_name\" content=\"Club des Cent Cols\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-01T18:38:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-29T09:31:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Webmestre\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Webmestre\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/\"},\"author\":{\"name\":\"Webmestre\",\"@id\":\"https:\\\/\\\/centcols.org\\\/#\\\/schema\\\/person\\\/911b404fb133d8c913dd27cdcf71c8e5\"},\"headline\":\"Test Loop\",\"datePublished\":\"2025-01-01T18:38:23+00:00\",\"dateModified\":\"2025-07-29T09:31:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/\"},\"wordCount\":405,\"publisher\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/regledujeu3.png\",\"articleSection\":[\"Non classifi\u00e9(e)\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/\",\"url\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/\",\"name\":\"Test Loop - Club des Cent Cols\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/regledujeu3.png\",\"datePublished\":\"2025-01-01T18:38:23+00:00\",\"dateModified\":\"2025-07-29T09:31:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/centcols.org\\\/test-loop\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#primaryimage\",\"url\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/regledujeu3.png\",\"contentUrl\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/05\\\/regledujeu3.png\",\"width\":1536,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/centcols.org\\\/test-loop\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/centcols.org\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Non classifi\u00e9(e)\",\"item\":\"https:\\\/\\\/centcols.org\\\/rubrique\\\/non-classifiee\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Test Loop\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/centcols.org\\\/#website\",\"url\":\"https:\\\/\\\/centcols.org\\\/\",\"name\":\"Club des Cent Cols\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/centcols.org\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/centcols.org\\\/#organization\",\"name\":\"Club des Cent Cols\",\"url\":\"https:\\\/\\\/centcols.org\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/centcols.org\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/carte-icone.png\",\"contentUrl\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/uploads\\\/2025\\\/01\\\/carte-icone.png\",\"width\":250,\"height\":250,\"caption\":\"Club des Cent Cols\"},\"image\":{\"@id\":\"https:\\\/\\\/centcols.org\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/groups\\\/5261880558\\\/?locale=fr_FR\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/centcols.org\\\/#\\\/schema\\\/person\\\/911b404fb133d8c913dd27cdcf71c8e5\",\"name\":\"Webmestre\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/litespeed\\\/avatar\\\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419\",\"url\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/litespeed\\\/avatar\\\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419\",\"contentUrl\":\"https:\\\/\\\/centcols.org\\\/wp-content\\\/litespeed\\\/avatar\\\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419\",\"caption\":\"Webmestre\"},\"url\":\"https:\\\/\\\/centcols.org\\\/de\\\/author\\\/webmestre\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Test Loop - Club des Cent Cols","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/centcols.org\/de\/testschleife\/","og_locale":"de_DE","og_type":"article","og_title":"Test Loop - Club des Cent Cols","og_description":"Le Club des Cent Cols rassemble des passionn\u00e9\u00b7es de montagne, de libert\u00e9 et d&rsquo;aventure \u00e0 v\u00e9lo. Plus qu&rsquo;une liste de cols, c&rsquo;est un \u00e9tat d&rsquo;esprit&nbsp;! Sur cette page, retrouvez toutes les informations pour nous rejoindre. Le Club c\u2019est\u2026 \u2026 et ce que le Club n\u2019est pas \u00c0 savoir En savoir plus","og_url":"https:\/\/centcols.org\/de\/testschleife\/","og_site_name":"Club des Cent Cols","article_publisher":"https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR","article_published_time":"2025-01-01T18:38:23+00:00","article_modified_time":"2025-07-29T09:31:57+00:00","og_image":[{"width":1536,"height":1024,"url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png","type":"image\/png"}],"author":"Webmestre","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Webmestre","Gesch\u00e4tzte Lesezeit":"3\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/centcols.org\/test-loop\/#article","isPartOf":{"@id":"https:\/\/centcols.org\/test-loop\/"},"author":{"name":"Webmestre","@id":"https:\/\/centcols.org\/#\/schema\/person\/911b404fb133d8c913dd27cdcf71c8e5"},"headline":"Test Loop","datePublished":"2025-01-01T18:38:23+00:00","dateModified":"2025-07-29T09:31:57+00:00","mainEntityOfPage":{"@id":"https:\/\/centcols.org\/test-loop\/"},"wordCount":405,"publisher":{"@id":"https:\/\/centcols.org\/#organization"},"image":{"@id":"https:\/\/centcols.org\/test-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png","articleSection":["Non classifi\u00e9(e)"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/centcols.org\/test-loop\/","url":"https:\/\/centcols.org\/test-loop\/","name":"Test Loop - Club des Cent Cols","isPartOf":{"@id":"https:\/\/centcols.org\/#website"},"primaryImageOfPage":{"@id":"https:\/\/centcols.org\/test-loop\/#primaryimage"},"image":{"@id":"https:\/\/centcols.org\/test-loop\/#primaryimage"},"thumbnailUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png","datePublished":"2025-01-01T18:38:23+00:00","dateModified":"2025-07-29T09:31:57+00:00","breadcrumb":{"@id":"https:\/\/centcols.org\/test-loop\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/centcols.org\/test-loop\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/centcols.org\/test-loop\/#primaryimage","url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png","contentUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/05\/regledujeu3.png","width":1536,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/centcols.org\/test-loop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/centcols.org\/"},{"@type":"ListItem","position":2,"name":"Non classifi\u00e9(e)","item":"https:\/\/centcols.org\/rubrique\/non-classifiee\/"},{"@type":"ListItem","position":3,"name":"Test Loop"}]},{"@type":"WebSite","@id":"https:\/\/centcols.org\/#website","url":"https:\/\/centcols.org\/","name":"Club des Cent Cols","description":"","publisher":{"@id":"https:\/\/centcols.org\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/centcols.org\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/centcols.org\/#organization","name":"Club des Cent Cols","url":"https:\/\/centcols.org\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/centcols.org\/#\/schema\/logo\/image\/","url":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png","contentUrl":"https:\/\/centcols.org\/wp-content\/uploads\/2025\/01\/carte-icone.png","width":250,"height":250,"caption":"Club des Cent Cols"},"image":{"@id":"https:\/\/centcols.org\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/groups\/5261880558\/?locale=fr_FR"]},{"@type":"Person","@id":"https:\/\/centcols.org\/#\/schema\/person\/911b404fb133d8c913dd27cdcf71c8e5","name":"Webmaster","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/centcols.org\/wp-content\/litespeed\/avatar\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419","url":"https:\/\/centcols.org\/wp-content\/litespeed\/avatar\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419","contentUrl":"https:\/\/centcols.org\/wp-content\/litespeed\/avatar\/2d246e4b6b4f773e08515e1ffc53690b.jpg?ver=1789507419","caption":"Webmestre"},"url":"https:\/\/centcols.org\/de\/author\/webmestre\/"}]}},"_links":{"self":[{"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/posts\/85065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/comments?post=85065"}],"version-history":[{"count":0,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/posts\/85065\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/media\/83203"}],"wp:attachment":[{"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/media?parent=85065"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/categories?post=85065"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/centcols.org\/de\/wp-json\/wp\/v2\/tags?post=85065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}