所以,所有query conditionals (is_paged
, is_singular
, 等等)如下所示:
function is_paged() {
global $wp_query;
if ( ! isset( $wp_query ) ) {
_doing_it_wrong( __FUNCTION__, __( \'Conditional query tags do not work before the query is run. Before then, they always return false.\' ), \'3.1\' );
return false;
}
return $wp_query->is_paged();
}
全球化
$wp_query
并调用WP\\u查询对象的相应方法。在这种情况下:
<?php
function is_paged() {
return (bool) $this->is_paged;
}
您遭受的唯一数据库命中是在创建WP\\u查询对象时发生的,这种情况无论如何都会发生。
调用函数会产生成本,使用if语句也会产生成本。今天的硬件成本没什么好担心的。
也就是说,如果您发现自己使用相同的函数进行了大量的条件检查,那么您最好评估程序的控制流。
类似这样:
<?php
if(is_paged() && 1 == get_query_var(\'some_query_var\'))
{
// do stuff
}
else if(is_paged() && 2 == get_query_var(\'some_query_var\'))
{
// do other stuff
}
可能成为:
<?php
if(is_paged())
{
switch(get_query_var(\'some_query_var\'))
{
case 1:
// do stuff
break;
case 2:
// do stuff
break;
default:
// do stuff
break;
}
}
最后一点建议是,如果您多次需要条件(或任何其他合理的函数调用)的结果,我会在同一个函数中“缓存”它们,但我不会缓存对象属性之类的内容,除非您确实需要在方法之间持久化。
这里有一个可怕的例子,它(可能)没有遵循我上面的建议。
<?php
function wpse65916_stuff()
{
$paged = is_paged();
if($paged)
{
// do stuff because paged
}
if($paged && /* some other condition */)
{
// do stuff
}
}