列出所有符合条件的 true
由于所有is_*()
函数在查询变量中都有它们的等效项(这些函数只是包装器),因此您还可以另一种方式访问它们:只需获取所有true
。
我在core / trac上写了一张票,其中添加了一个功能以列出所有票。
同时,您可以将列出的两个功能用作帮助程序插件,以向您显示在哪个请求上可以使用哪个条件。它将var_dump()
在shutdown
钩子的页脚下方(管理员和公共)打印a 。
<?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()
。
如您所见,Chips硬编码功能最快,然后是我的,最后是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()
);
}