Skip to content

Instantly share code, notes, and snippets.

@hawkidoki
Last active April 5, 2018 23:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hawkidoki/876f59acb3a9323da22c88db50ae8d82 to your computer and use it in GitHub Desktop.
Save hawkidoki/876f59acb3a9323da22c88db50ae8d82 to your computer and use it in GitHub Desktop.
<?php
function hwk_loop($args = array()){
// Arguments par défaut
$args = wp_parse_args_recursive($args, array(
'template' => 'loop.php', // Fichier de Template par défaut: /wp-content/themes/<theme>/loop.php
'not_found' => false, // Fichier de Template en cas de résultat non trouvé
'pagination' => false, // Paramètre de pagination. Utilisé par le fichier de Template. true | false
'query' => array(), // Arguments de WP_Query. Si vide, alors utiliser la WP_Query globale
'query_addon' => false, // Utiliser l'argument 'query' pour l'ajouter à la WP_Query globale. true | false
'result' => array(), // Injecter directement les résultats d'une Query antérieur. Bypass l'argument 'query'
'exclude' => array(
'add' => true, // Ajouter les résultats dans la liste des posts à exclure pour les prochains appels. true | false
'get' => true // Utiliser la liste des posts à exclure pour cette Query. true | false
),
'options' => array(), // Tableau d'options personnalisés.
'wrapper' => array(
'element' => 'div', // Element <div> qui servira de conteneur à notre Template
'attr' => array(
'id' => '', // Ajouter un attribut id=""
'class' => '', // Ajouter un attribut class=""
'style' => '' // Ajouter un attribut style=""
), // Note: Il est possible d'ajouter son propre attribut personnalisé ici.
)
));
// Get Global WP_Query
global $wp_query;
// Exclude: GET query_var
$exclude = get_query_var('hwk_loop_exclude', array());
// Result: si existe, pas de WP_Query
if(empty($args['result'])){
// Query: Executer une nouvelle WP_Query
if(!empty($args['query'])){
// Query Addon: Utiliser les arguments de la WP_Query globale pour créer une nouvelle Query
if($args['query_addon'] && isset($wp_query->query) && !empty($wp_query->query))
$args['query'] = $wp_query->query;
// Exclude: Ajouter 'post__not_in' à la WP_Query
if($args['exclude']['get'] && !empty($exclude))
$args['query']['post__not_in'] = $exclude;
// New WP_Query
$args['result'] = new WP_Query($args['query']);
}else{
// Utiliser la WP_Query globale
$args['result'] = $wp_query;
// Récupération des arguments de la WP_Query globale
if(isset($wp_query->query) && !empty($wp_query->query))
$args['query'] = $wp_query->query;
}
}
// Not Found: Inclure le fichier 'not_found' si défini
if(!$args['result']->have_posts() && $args['not_found'])
return locate_template(array($args['not_found']), true, false);
// Exclude: SET query_var
if($args['exclude']['add']){
foreach($args['result']->posts as $p){
if(in_array($p->ID, $exclude))
continue;
$exclude[] = $p->ID;
}
set_query_var('hwk_loop_exclude', $exclude);
}
// Ajout de tous les paramètres dans une query_var
set_query_var('hwk_loop', $args);
// Début du Wrapper. Si défini
hwk_loop_wrapper('start', $args);
// Affichage du Template
locate_template(array($args['template']), true, false);
// Fin du Wrapper. Si défini
hwk_loop_wrapper('end', $args);
return;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment