{"id":234251,"date":"2023-02-21T15:29:00","date_gmt":"2023-02-21T12:29:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=234251"},"modified":"2023-02-21T15:30:55","modified_gmt":"2023-02-21T12:30:55","slug":"mettre-en-place-un-filtrage-anime-des-publications-par-categorie","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/mettre-en-place-un-filtrage-anime-des-publications-par-categorie\/","title":{"rendered":"Mettre en place un filtrage anim\u00e9 des publications par cat\u00e9gorie"},"content":{"rendered":"\n<p>Vous avez toujours voulu faire une belle colonne de pr\u00e9sentation des articles avec des filtres de cat\u00e9gorie au-dessus qui m\u00e9langent et filtrent les articles avec une belle animation\u00a0? Alors c&rsquo;est le tutoriel pour vous.<\/p>\n<p>Ce que nous allons faire dans ce didacticiel est une liste de tous les messages (de pr\u00e9f\u00e9rence dans un type de message personnalis\u00e9 tel que les employ\u00e9s) joliment dans les colonnes et avec leurs images en vedette. Au-dessus des messages, nous g\u00e9n\u00e9rons des filtres pour la taxonomie connect\u00e9e. En cliquant sur un filtre, les publications seront m\u00e9lang\u00e9es avec une belle animation et masqueront les publications qui ne sont pas pr\u00e9sentes dans la cat\u00e9gorie choisie.<\/p>\n<\/p>\n<p>Pour ce faire, nous utilisons une biblioth\u00e8que Javascript pour le filtrage. Il en existe de nombreux &#8211; certains n\u00e9cessitent jQuery et d&rsquo;autres non &#8211; certains sont open source et d&rsquo;autres n\u00e9cessitent une licence commerciale. Les plus populaires sont <a href=\"https:\/\/www.kunkalabs.com\/mixitup\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">MixItUp<\/a> et <a href=\"https:\/\/isotope.metafizzy.co\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Isotope<\/a>. Cependant, les deux n\u00e9cessitent une licence commerciale. Pour mon projet, j&rsquo;avais besoin d&rsquo;une biblioth\u00e8que qui fasse l&rsquo;affaire tout en \u00e9tant totalement libre d&rsquo;utilisation dans des projets commerciaux. J&rsquo;en ai essay\u00e9 plusieurs et le meilleur que j&rsquo;ai trouv\u00e9 jusqu&rsquo;\u00e0 pr\u00e9sent est <a href=\"https:\/\/yiotis.net\/filterizr\/#\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">FilterizR<\/a>. Commen\u00e7ons ce tutoriel en mettant la main sur cette biblioth\u00e8que\u00a0!<\/p>\n<h2>La librairie FilterizR<\/h2>\n<p>D\u00e9couvrez la d\u00e9mo sur la page d&rsquo; <a href=\"https:\/\/yiotis.net\/filterizr\/#\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">accueil de FilterizR<\/a> pour voir si cette biblioth\u00e8que est faite pour vous. Vous pouvez m\u00eame jouer avec les options en temps r\u00e9el. Cette biblioth\u00e8que prend en charge le filtrage (ce que nous allons faire dans ce didacticiel), le brassage (ordre al\u00e9atoire), la recherche et le tri. Il est r\u00e9actif et optimis\u00e9 pour les appareils mobiles. Si loin de ce que j&rsquo;ai v\u00e9cu, il g\u00e8re \u00e9galement tr\u00e8s bien le r\u00e9glage de la hauteur automatique du conteneur sur chaque article.<\/p>\n<p>FilterizR propose trois types d&rsquo;utilisation diff\u00e9rents :<\/p>\n<ul>\n<li>Vanilla Javascript\u00a0: expose le FilterizR en tant que fonction globale \u00e0 appeler en Javascript standard.<\/li>\n<li>jQuery: permet de l&rsquo;utiliser <code>jQuery<\/code>pour l&rsquo;initialiser et le configurer.<\/li>\n<li>Biblioth\u00e8que Javascript pure\/npm\u00a0: \u00e0 utiliser dans les importations ES6 (par exemple, si vous \u00e9crivez des blocs personnalis\u00e9s pour Gutenberg).<\/li>\n<\/ul>\n<p>La deuxi\u00e8me option est la plus simple pour les personnes qui ne connaissent pas Javascript. La plupart des gens commencent avec jQuery. Mais gardez \u00e0 l&rsquo;esprit que jQuery est une biblioth\u00e8que volumineuse et lourde \u00e0 charger dans votre projet, et si cela peut \u00eatre \u00e9vit\u00e9, vous devriez le faire. Dans ce tutoriel, nous utiliserons la m\u00e9thode Javascript vanilla. Si vous impl\u00e9mentez cela dans un bloc Gutenberg personnalis\u00e9, vous devriez envisager d&rsquo;utiliser la troisi\u00e8me option. Ensuite, vous pouvez simplement l&rsquo;installer via <code>npm<\/code>et importer la biblioth\u00e8que dans votre code de bloc.<\/p>\n<h2>T\u00e9l\u00e9chargement et configuration des fichiers<\/h2>\n<p>Prenons le dossier appropri\u00e9\u00a0! Allez sur <a href=\"https:\/\/github.com\/giotiskl\/filterizr\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">le Github de FilterizR<\/a> pour t\u00e9l\u00e9charger. Sauf si vous installez via npm (troisi\u00e8me option), vous pouvez aller dans le dossier &lsquo; <code>dist<\/code>&lsquo; et t\u00e9l\u00e9charger la biblioth\u00e8que minifi\u00e9e dont vous avez besoin. Comme je vais l&rsquo;utiliser avec vanilla Javascript dans ce tutoriel, je vais t\u00e9l\u00e9charger le <code>vanilla.filterizr.min.js<\/code>fichier et le placer dans mon <code>theme-folder\/assets\/js\/<\/code>dossier. L&rsquo;endroit o\u00f9 vous placez la biblioth\u00e8que d\u00e9pend bien s\u00fbr enti\u00e8rement de vous, ajustez simplement le chemin plus bas.<\/p>\n<p>Nous aurons \u00e9galement besoin d&rsquo;un autre fichier Javascript pour initialiser et d\u00e9cider des options. Je vais cr\u00e9er un fichier <code>theme-folder\/assets\/js\/filtering-main.js<\/code>. Nous reviendrons sur ce dossier ult\u00e9rieurement. Ce n&rsquo;est bien s\u00fbr pas n\u00e9cessaire si vous l&rsquo;impl\u00e9mentez dans un bloc Gutenberg personnalis\u00e9.<\/p>\n<p>Pour que WordPress inclue les scripts, nous devons mettre les deux scripts en file d&rsquo;attente dans le <code>wp_enqueue_scripts<\/code>crochet. Cela peut \u00eatre ajout\u00e9 quelque part dans le fichier <code>functions.php<\/code>. Ainsi:<\/p>\n<pre><code>add_action('wp_enqueue_scripts', function() {\n    wp_enqueue_script('filterizr', get_template_directory_uri(). '\/assets\/js\/vanilla.filterizr.min.js', [], false, true);\n    wp_enqueue_script('filtering-script', get_template_directory_uri(). '\/assets\/js\/filtering-main.js', ['filterizr'], false, true);\n});<\/code><\/pre>\n<p>Ajustez les noms de fichiers et\/ou les chemins en fonction de votre projet\/th\u00e8me. Le code ci-dessus met en file d&rsquo;attente le script vanilla filterizR, et deuxi\u00e8mement le <code>filtering-main.js<\/code>script qui a une d\u00e9pendance au script filterizR. Cela garantit que le script d&rsquo;initialisation est charg\u00e9 apr\u00e8s la biblioth\u00e8que n\u00e9cessaire.<\/p>\n<h2>Rendu du mod\u00e8le<\/h2>\n<p>La prochaine \u00e9tape consiste \u00e0 avoir un endroit o\u00f9 nous voulons rendre cette liste de messages. Cela d\u00e9pend enti\u00e8rement de vous. Pour rester simple dans ce tutoriel, je vais utiliser un mod\u00e8le de page dans mon th\u00e8me. Si vous l&rsquo;impl\u00e9mentez dans un bloc Gutenberg, vous pouvez le rendre soit avec PHP (pour les blocs dynamiques), soit avec Javascript dans la <code>save<\/code>m\u00e9thode du bloc. L&rsquo;important est de restituer correctement le code HTML entourant les publications et les filtres.<\/p>\n<h3>Rendu des filtres<\/h3>\n<p>Je vais cr\u00e9er un mod\u00e8le de page <code>template-filters.php<\/code>dans mon dossier de th\u00e8me et ajouter mon code PHP pour y rendre la sortie.<\/p>\n<p>Dans ce didacticiel, nous supposons que nous voulons rendre les publications dans un type de publication personnalis\u00e9. Vous pouvez le faire avec des publications et des cat\u00e9gories standard, mais les publications deviendront g\u00e9n\u00e9ralement assez nombreuses, ce qui n&rsquo;est pas r\u00e9alisable pour ce type d&rsquo;affichage. Supposons par exemple un type de publication personnalis\u00e9 pour les employ\u00e9s avec une taxonomie personnalis\u00e9e connect\u00e9e pour le service. Je ne montrerai pas comment ajouter le type de publication personnalis\u00e9 dans ce didacticiel, gardez simplement \u00e0 l&rsquo;esprit que le nom du type de publication est <code>employees<\/code>et que le nom de la taxonomie personnalis\u00e9e est <code>department<\/code>. Changez les noms de votre type de publication et de votre taxonomie. Si vous ne savez pas comment ajouter un type de publication personnalis\u00e9, j&rsquo;ai un <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/creer-des-types-de-publication-personnalises-et-des-taxonomies-personnalisees-dans-wordpress-par-code\/\" title=\"tutoriel sur la cr\u00e9ation de types de publication et de taxonomies personnalis\u00e9s\">tutoriel sur la cr\u00e9ation de types de publication et de taxonomies personnalis\u00e9s<\/a>.<\/p>\n<p>Dans mon mod\u00e8le, je commence par g\u00e9n\u00e9rer les filtres. Je vais r\u00e9cup\u00e9rer tous les termes non vides dans ma taxonomie personnalis\u00e9e en utilisant <code>[get_terms](https:\/\/developer.wordpress.org\/reference\/functions\/get_terms\/)()<\/code>et les ajouter dans une liste non ordonn\u00e9e.<\/p>\n<pre><code>&lt;?php\n$departments = get_terms([\n    'taxonomy' =&gt; 'department'\n]);\n?&gt;&lt;ul class=\"filter-controls\"&gt;\n    &lt;li data-filter=\"all\"&gt;&lt;?php _e('All', 'txtdomain'); ?&gt;&lt;\/li&gt;&lt;?php\n    foreach ($departments as $department) {\n        ?&gt;&lt;li data-filter=\"&lt;?php echo $department-&gt;slug; ?&gt;\"&gt;&lt;?php echo $department-&gt;name; ?&gt;&lt;\/li&gt;&lt;?php\n    }\n?&gt;&lt;\/ul&gt;\n\u00a0<\/code><\/pre>\n<p>Avant de g\u00e9n\u00e9rer les \u00e9l\u00e9ments pour chaque terme de la taxonomie, je m&rsquo;assurerai de cr\u00e9er un \u00e9l\u00e9ment pour &quot;Tous&quot; (ligne <code>#6<\/code>). Pour que le filtrage FilterizR fonctionne, nous devons fournir l&rsquo;attribut de donn\u00e9es &quot;<code>data-filter<\/code>\u00a0&quot; \u00e0 chaque \u00e9l\u00e9ment de filtre. Le contenu doit signifient de mani\u00e8re unique une valeur de filtrage unique, dans notre cas le slug du terme (vous pouvez utiliser l&rsquo;ID de terme ou autre chose si vous le souhaitez).Cela signifie que je dois \u00e9galement ajouter les slugs du terme en tant qu&rsquo;attributs de donn\u00e9es aux messages (voir plus tard) donc FilterizR peut savoir quels messages appartiennent \u00e0 quel filtre.<\/p>\n<p>Avec le code ci-dessus, vous devriez obtenir une liste avec &quot;Tous&quot; suivi de tous les termes non vides. Super!<\/p>\n<p>Maintenant, juste en dessous, je vais commencer \u00e0 rendre les messages.<\/p>\n<h3>Rendre les messages<\/h3>\n<p>Lors du rendu des messages, vous devez vous rappeler deux choses. L&rsquo;une consiste \u00e0 envelopper tous les messages dans un conteneur, auquel je donnerai le nom de la classe <code>filter-container<\/code>. Cette classe est ce que nous devons cibler avec Javascript pour faire fonctionner FilterizR. Et deuxi\u00e8mement, chaque \u00e9l\u00e9ment doit avoir un attribut de donn\u00e9es &quot;<code>data-category<\/code>&quot; qui r\u00e9pertorie tous les termes s\u00e9par\u00e9s par une virgule. Les valeurs ici doivent correspondre aux valeurs que vous avez g\u00e9n\u00e9r\u00e9es dans l&rsquo; <code>data-filter<\/code>attribut &quot; &quot; des filtres.<\/p>\n<p>J&rsquo;interroge tous les messages du type de message personnalis\u00e9 avec <code>[WP_Query](https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/)<\/code>et parcourt les messages. Ce que vous affichez par publication d\u00e9pend enti\u00e8rement de vous, mais l&rsquo;exemple ci-dessous affiche l&rsquo;image en vedette, le titre de la publication et une seule m\u00e9ta de publication personnalis\u00e9e pour le titre du poste. Tous les liens int\u00e9rieurs envelopp\u00e9s qui vont \u00e0 l&#8217;employ\u00e9 unique.<\/p>\n<pre><code>&lt;?php\n$employees = new WP_Query([\n    'post_type' =&gt; 'employees',\n    'posts_per_page' =&gt; -1,\n    'orderby' =&gt; 'name',\n    'order' =&gt; 'ASC'\n]);\nif ($employees-&gt;have_posts()) {\n    ?&gt;&lt;div class=\"filter-container\"&gt;&lt;?php\n    while ($employees-&gt;have_posts()) {\n        $employees-&gt;the_post();\n\u00a0\n        $dep = wp_get_object_terms(get_the_ID(), 'department', ['fields' =&gt; 'slugs']);\n        ?&gt;&lt;div class=\"filtr-item\" data-category=\"&lt;?php echo implode(',', $dep); ?&gt;\"&gt;\n            &lt;a href=\"&lt;?php the_permalink(); ?&gt;\" title=\"&lt;?php the_title(); ?&gt;\"&gt;&lt;?php\n        if (has_post_thumbnail()) {\n            the_post_thumbnail('employees-thumb');\n        }\n\u00a0\n        $job_title = get_post_meta(get_the_ID(), 'job_title', true);\n        ?&gt;&lt;div class=\"employee-info\"&gt;\n            &lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;\/h2&gt;\n            &lt;span class=\"job-title\"&gt;&lt;?php echo $job_title; ?&gt;&lt;\/span&gt;\n        &lt;\/div&gt;&lt;?php\n\u00a0\n\u00a0\n        ?&gt;&lt;\/a&gt;&lt;\/div&gt;&lt;?php\n    }\n    wp_reset_postdata();\n    ?&gt;&lt;\/div&gt;&lt;?php\n}\n?&gt;<\/code><\/pre>\n<p>La requ\u00eate \u00e0 la ligne <code>#2-7<\/code>s&rsquo;assure que je r\u00e9cup\u00e8re tous les messages publi\u00e9s des employ\u00e9s de type post, class\u00e9s par ordre alphab\u00e9tique. Avant de rendre l&rsquo;habillage <code>div<\/code>de chaque article, \u00e0 la ligne <code>#13<\/code>, j&rsquo;utilise <code>[wp_get_object_terms](https:\/\/developer.wordpress.org\/reference\/functions\/wp_get_object_terms\/)()<\/code>pour r\u00e9cup\u00e9rer tous les termes attribu\u00e9s \u00e0 cet article. En param\u00e8tre, je ne demande que les slugs des termes. Le retour est un tableau de tous les slugs de terme attribu\u00e9s. J&rsquo;utilise ensuite la fonction PHP <code>[implode](https:\/\/www.php.net\/manual\/en\/function.implode.php)()<\/code>pour cr\u00e9er une cha\u00eene \u00e0 partir de tous les \u00e9l\u00e9ments du tableau s\u00e9par\u00e9s par une virgule. Ceci est renvoy\u00e9 comme <code>data-category<\/code>attribut requis \u00e0 la racine <code>div<\/code>&#8211; ce qui fait fonctionner les filtres.<\/p>\n<p>En ce qui concerne le contenu de chaque publication, la sortie est assez standard. Nous g\u00e9n\u00e9rons l&rsquo;image s\u00e9lectionn\u00e9e de la publication en utilisant une taille d&rsquo;image personnalis\u00e9e (&lsquo; <code>employees-thumb<\/code>&lsquo;), le titre de la publication et la valeur d&rsquo;une seule m\u00e9ta de publication personnalis\u00e9e (pour le titre du poste). Tout est envelopp\u00e9 dans un lien qui m\u00e8ne \u00e0 la vue unique de cet employ\u00e9. J&rsquo;ai \u00e9galement ajout\u00e9 des classes et des wrappers pour faciliter le ciblage avec CSS. La sortie de chaque \u00e9l\u00e9ment d\u00e9pend bien s\u00fbr enti\u00e8rement de vous.<\/p>\n<p>\u00c0 ce stade, le rendu PHP devrait \u00eatre termin\u00e9. Vous \u00eates invit\u00e9s \u00e0 styliser et \u00e0 lui donner une belle apparence, mais ne vous emb\u00eatez pas \u00e0 styliser les colonnes. FilterizR g\u00e9n\u00e9rera des colonnes (flexbox) pour vous. La prochaine \u00e9tape consiste en fait \u00e0 initialiser le script de filtrage\u00a0!<\/p>\n<h2>Initialisation du script de filtre<\/h2>\n<p>La derni\u00e8re partie est l&rsquo;\u00e9dition du <code>filtering-main.js<\/code>script. Nous devons simplement dire \u00e0 FilterizR d&rsquo;initialiser le filtrage sur notre contenu rendu. Il y a cependant quelques \u00e9l\u00e9ments \u00e0 garder \u00e0 l&rsquo;esprit ici\u00a0:<\/p>\n<p>FilterizR s&rsquo;assurera que le conteneur d&#8217;emballage de tous les messages est automatiquement dimensionn\u00e9 pour s&rsquo;adapter \u00e0 la vue. Par exemple, si le filtre actif affiche les publications sur une ligne et que nous cliquons sur un autre filtre comportant quatre lignes, le conteneur se redimensionnera automatiquement \u00e0 la bonne hauteur. Assurez-vous ainsi que tout contenu qui vient apr\u00e8s ne soit pas cach\u00e9 derri\u00e8re. Mais pour que ce redimensionnement automatique fonctionne, toutes les images doivent avoir \u00e9t\u00e9 charg\u00e9es en premier. Dans certains cas, le script peut \u00eatre charg\u00e9 et ex\u00e9cut\u00e9 avant la fin du chargement de chaque image, ce qui entra\u00eene la r\u00e9duction automatique du conteneur \u00e0 une hauteur de 0. Ce n&rsquo;est pas bon. Nous devons donc placer le code d&rsquo;initialisation dans une fonction o\u00f9 nous savons que les images sont charg\u00e9es. Pour le Javascript vanille, c&rsquo;est <code>window.onload<\/code>. Pour jQuery, vous utiliseriez <code>$(window).load()<\/code>.<\/p>\n<p>Deuxi\u00e8mement, nous voulons nous assurer que notre script n&rsquo;initialise FilterizR que s&rsquo;il existe effectivement un conteneur filtrable. Si nous initialisons FilterizR et que la page actuelle n&rsquo;a pas la classe wrapper n\u00e9cessaire, cela entra\u00eenera une erreur Javascript. Nous pouvons r\u00e9soudre ce probl\u00e8me en v\u00e9rifiant d&rsquo;abord si la classe de conteneur existe. En Javascript vanille, vous pouvez utiliser <code>document.getElementById()<\/code>ou <code>document.getElementsByClassName()<\/code>. Voir l&rsquo;exemple ci-dessous. Pour jQuery, vous utiliseriez <code>jQuery('&lt;selector&gt;').length<\/code>pour v\u00e9rifier cela.<\/p>\n<p>La fa\u00e7on d&rsquo;initialiser FilterizR par vanilla Javascript est de cr\u00e9er une nouvelle instance de <code>Filterizr<\/code>, en fournissant le s\u00e9lecteur de conteneur comme premier param\u00e8tre et \u00e9ventuellement un objet de param\u00e8tres comme deuxi\u00e8me param\u00e8tre. Voici un exemple des plus basiques :<\/p>\n<pre><code>window.onload = function() {\n    var filterContainer = document.getElementsByClassName('filter-container');\n    if (filterContainer.length &gt; 0) {\n        filterizr = new Filterizr('.filter-container');\n    }\n\u00a0\n}<\/code><\/pre>\n<p>L&rsquo;initialisation a lieu \u00e0 la ligne <code>#4<\/code>. Nous fournissons le nom de la classe au conteneur qui entoure nos messages avec un point devant, signifiant un s\u00e9lecteur de classe. Avec le code ci-dessus, FilterizR devrait maintenant reprendre vos messages et les placer dans des colonnes. Parce que nous avons utilis\u00e9 les attributs de donn\u00e9es appropri\u00e9s, les filtres devraient \u00e9galement fonctionner automatiquement\u00a0!<\/p>\n<h3>Personnalisation des options de FilterizR<\/h3>\n<p>J&rsquo;ai juste quelques derniers conseils pour optimiser FilterizR, ce que nous pouvons faire en fournissant un objet de param\u00e8tres. Je vous recommande de jeter un \u0153il aux <a href=\"https:\/\/yiotis.net\/filterizr\/#\/documentation\/vanilla\/options\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">options possibles<\/a> pour FilterizR pour voir ce que vous pouvez faire. Vous pouvez contr\u00f4ler la vitesse d&rsquo;animation, le type d&rsquo;animation et bien plus encore\u00a0!<\/p>\n<p>Afin que les colonnes fonctionnent de mani\u00e8re optimale dans des tailles r\u00e9actives, j&rsquo;ai constat\u00e9 que le r\u00e9glage <code>layout<\/code>sur &lsquo; <code>sameWidth<\/code>&lsquo; permet \u00e0 FilterizR de mieux fonctionner avec des publications de hauteurs diff\u00e9rentes. Il en r\u00e9sulte un style &quot;Ma\u00e7onnerie&quot;. Dans notre exemple, nous r\u00e9percutons le contenu suppl\u00e9mentaire apr\u00e8s l&rsquo;image, ce qui peut entra\u00eener des hauteurs variables (les noms peuvent \u00eatre plus longs, le for\u00e7ant sur plusieurs lignes). Cela peut entra\u00eener un comportement \u00e9trange.<\/p>\n<p>Par d\u00e9faut, chaque \u00e9l\u00e9ment n&rsquo;a pas d&rsquo;espace entre les autres. Si vous vouliez un espacement entre chaque \u00e9l\u00e9ment, vous pouvez d\u00e9finir la taille de l&rsquo;\u00e9cart en px pour <code>gutterPixels<\/code>. Dans l&rsquo;exemple ci-dessus, j&rsquo;ai utilis\u00e9 10px comme taille d&rsquo;\u00e9cart. PS\u00a0: la taille de l&rsquo;espace est \u00e9galement ajout\u00e9e au conteneur d&#8217;emballage. Ce n&rsquo;est peut-\u00eatre pas toujours ce que vous voulez. Pour remplacer cela, j&rsquo;ai simplement ajout\u00e9 un style <code>padding: 0!important<\/code>\u00e0 <code>.filter-container<\/code>.<\/p>\n<p>Voici le code ajust\u00e9 pour initialiser FilterizR avec mes options\u00a0:<\/p>\n<pre><code>window.onload = function() {\n    var filterContainer = document.getElementsByClassName('filter-container');\n    if (filterContainer.length &gt; 0) {\n        var options = {\n            layout: 'sameWidth',\n            gutterPixels: 10,\n        }\n        filterizr = new Filterizr('.filter-container', options);\n    }\n\u00a0\n}<\/code><\/pre>\n<p>Avec quelques styles mineurs, le r\u00e9sultat ressemble \u00e0 ceci\u00a0:<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152296-61e4d54c4aa2b.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-152296-61e4d54c4aa2b.png\" alt=\"Mettre en place un filtrage anim\u00e9 des publications par cat\u00e9gorie\"><\/a><\/p>\n<p>Gardez \u00e0 l&rsquo;esprit que le filtrage n&rsquo;est qu&rsquo;une des choses que FilterizR peut faire\u00a0! Consultez les exemples sous &quot;Tutoriels&quot; sur leur <a href=\"https:\/\/yiotis.net\/filterizr\/#\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">page d&rsquo;accueil<\/a>. Vous pouvez ajouter des commandes pour trier, m\u00e9langer et\/ou rechercher. Et vous avez \u00e9galement plus d&rsquo;options pour contr\u00f4ler la mise en page.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez toujours voulu faire une belle colonne de pr\u00e9sentation des articles avec des filtres de cat\u00e9gorie au-dessus qui filtrent les articles avec une belle animation\u00a0? Alors ne cherchez plus !<\/p>\n","protected":false},"author":1,"featured_media":152297,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[915,893,893,717,717,915,1110,925,925,841,841,862,862],"tags":[1167],"class_list":{"0":"post-234251","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-autre","8":"category-code-2","10":"category-developpeur","13":"category-n-a","14":"category-sujets","16":"category-tutoriels","18":"category-wordpress-3","20":"tag-affiai-fr"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=234251"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/234251\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/152297"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=234251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=234251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=234251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}