Last active
April 5, 2018 23:39
-
-
Save hawkidoki/876f59acb3a9323da22c88db50ae8d82 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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