Liste de toutes les conditions qui sont true
Comme toutes les is_*()
fonctions ont leur équivalent dans une variable de requête (les fonctions ne sont que des wrappers), vous pouvez également y accéder d'une autre manière: obtenez simplement tout ce qui existe true
.
J'ai écrit un ticket sur core / trac qui ajoute une fonction pour les lister tous.
En attendant, vous pouvez utiliser les deux fonctions répertoriées comme plugins d'assistance qui vous montrent à quelle demande le conditionnel est disponible. Il imprimera un var_dump()
sous le pied de page (à la fois administrateur et public) au niveau du shutdown
crochet.
<?php
/** Plugin Name: (#62232) »kaiser« List all conditionals that are true */
function get_conditionals()
{
global $wp_query;
foreach ( get_object_vars( $wp_query ) as $is_key => $is_value )
{
if ( $is_value && preg_match( "/is_/", $is_key ) )
$conditionals[] = $is_key;
}
return var_dump( $conditionals );
}
add_action( 'shutdown', 'get_conditionals' );
De cette façon, vous pouvez simplement les parcourir.
@scribu a ajouté sa propre fonction au ticket (une solution intéressante aussi).
<?php
/** Plugin Name: (#62232) »scribu« List all conditionals that are true */
function get_query_flags( $wp_query = null ) {
if ( !$wp_query )
$wp_query = $GLOBALS['wp_query'];
$flags = array();
foreach ( get_object_vars( $wp_query ) as $key => $val ) {
if ( 'is_' == substr( $key, 0, 3 ) && $val )
$flags[] = substr( $key, 3 );
}
return var_dump( $flags );
}
add_action( 'shutdown', 'get_query_flags' );
Performance
J'ai exécuté un test de performance sur chaque fonction au milieu d'un modèle en utilisant timer_start/*_stop();
. Pour être juste, j'ai renommé toutes les fonctions en un nom à un caractère a/b/c()
.
Comme vous pouvez le voir, la fonction codée en dur des puces est la plus rapide, puis la mienne et la dernière est dans ce cas scribus.
Mise à jour
Si vous me connaissez, alors vous connaissez mon amour pour les itérateurs pour leur élégance, leur clarté et leur capacité à ne conserver qu'un seul élément en mémoire au lieu de copier un tableau entier lors de la boucle. Voici donc une classe personnalisée rapide qui étend a \FilterIterator
, ne nécessitant donc qu'une seule méthode retravaillée.
<?php
namespace WPSE;
class ConditionalsFilter extends \FilterIterator
{
/**
* Accepts properties that start with `is_` and have a positive boolean value
* @return bool
*/
public function accept()
{
return 0 === strncasecmp( $this->key(), 'is_', 3 )
and filter_var(
$this->current(),
FILTER_VALIDATE_BOOLEAN,
FILTER_NULL_ON_FAILURE
);
}
}
Il peut être utilisé assez facilement. Le $it->current()
contient la valeur, tandis que $it->key()
renvoie le nom conditionnel / propriété.
$cond = new WPSE\ConditionalsFilter( new \ArrayIterator(
get_object_vars( $GLOBALS['wp_query'] )
) );
foreach ( $cond as $c )
{
var_dump(
$cond->key(),
$cond->current()
);
}