列出所有条件true
全部
is_*()
函数在查询变量中有其等价物(函数只是包装器),您也可以通过另一种方式访问它们:简单地获取所有
true
.
我写了张罚单core/trac 这就添加了一个函数来列出所有这些内容。
同时,您可以使用这两个列出的函数作为助手插件,向您显示哪个请求的条件可用。它将打印var_dump()
页脚下方(管理和公共)shutdown
钩
<?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\' );
通过这种方式,您可以简单地遍历它们。
@scribu在票据中添加了自己的功能(也是一个有趣的解决方案)。
<?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\' );
性能我使用
timer_start/*_stop();
. 公平地说,我将所有函数重命名为一个字符的名称
a/b/c()
.
正如您所见,芯片硬编码功能最快,其次是我的,最后一个是scribus。
如果你了解我,那么你就知道我喜欢迭代器,因为它优雅、清晰,并且能够在内存中只保存一个项目,而不是在循环时复制整个数组。下面是一个快速自定义类,它扩展了\\FilterIterator
, 因此,只需要一种方法进行返工。
<?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
);
}
}
它可以很容易地使用。这个
$it->current()
保留值,而
$it->key()
返回条件/属性名称。
$cond = new WPSE\\ConditionalsFilter( new \\ArrayIterator(
get_object_vars( $GLOBALS[\'wp_query\'] )
) );
foreach ( $cond as $c )
{
var_dump(
$cond->key(),
$cond->current()
);
}