Outils pour utilisateurs

Outils du site


webdev:wordpress:ajout_fonction_page_archive

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
webdev:wordpress:ajout_fonction_page_archive [14/04/2017 17:31] dolowebdev:wordpress:ajout_fonction_page_archive [18/10/2017 16:36] (Version actuelle) dolo
Ligne 1: Ligne 1:
 +====== Ajouter un paramètre de tri custom à la page d'archive ======
 +[[https://codex.wordpress.org/Custom_Queries|Tuto officiel du Codex]] - [[https://wordpress.stackexchange.com/questions/9870/how-do-you-create-a-virtual-page-in-wordpress|Exemple utile]] - **Penser à flush les permaliens à chaque fois pour voir les changements**
 +<Code:php>
 +<?php
 +class ArchiveFilter
 +{
 + public function __construct()
 + {
 + add_filter('query_vars', array($this, 'realisation_queryvars') );
 + add_action('pre_get_posts', array($this, 'realisation_pre_get_posts') );
 + add_action('generate_rewrite_rules', array($this, 'realisation_add_rewrite_rules') );
 + return true;
 + }
  
 + public function realisation_queryvars ( $qvars )
 + {
 + $qvars[] = 'realisation'; // On ajoute le paramètre GET realisation à Wordpress
 + return $qvars;
 + }
 +
 + public function realisation_pre_get_posts ( $query )
 + {
 + if( is_admin() )
 + {
 + return; // Pas touche aux requêtes en admin
 + }
 +
 + // Si la variable realisation est passée dans l'url et qu'elle a la bonne valeur, on modifie la requête
 + if( isset($query->query_vars['realisation']) )
 + {
 + if($query->query_vars['realisation'] == 'terrains-a-vendre' || $query->query_vars['realisation'] == 'realisations')
 + {
 + $query->set('meta_key', 'terrain_a_vendre');
 + $query->set('meta_value', $query->query_vars['realisation']);
 + }
 + }
 + }
 +
 + public function realisation_add_rewrite_rules ( $wp_rewrite )
 + {
 + $new_rules = array(
 + 'terrains-a-vendre\/([^/]+)' => 'index.php?terrain-region=$matches[1]&post_type=terrains&realisation=terrains-a-vendre',
 + 'realisations\/([^/]+)' => 'index.php?terrain-region=$matches[1]&post_type=terrains&realisation=realisations',
 + 'terrains-a-vendre$' => 'index.php?post_type=terrains&realisation=terrains-a-vendre',
 + 'realisations$' => 'index.php?post_type=terrains&realisation=realisations',
 + );
 +
 + //​ Add the new rewrite rule into the top of the global rules array
 + $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
 + }
 +}
 +
 +</Code>
 +
 +==== Note sur le REGEX ====
 +[[http://www.rexegg.com/regex-capture.html]] => il est impossible de récupérer plusieurs groupe récursivement et de les appliquer à différentes variables, le REGEX n'est pas fait pour ça. On peut les rentrer en dur ou juste récupérer un mot clé et renvoyer tout ce qui suit et le parser.
 +
 +Pour faire ça : 
 +<code linenums>
 +'service-technique\/(.+)' => 'index.php?service_technique=$matches[1]',
 +
 +// ...
 +
 +$st_slug = explode( '/', $st_slug );
 +</code>