将is_page()这样的函数赋给一个变量而不是多次使用它有意义吗?

时间:2012-09-21 作者:mashup

实际上这是一个简单的问题,但我需要确保为函数的结果指定一个变量可以帮助提高站点的速度,例如。

功能:if is_paged(){ $paged = 1; }

替代品: if $paged == "1" .. then do - 而不是反复使用相同的函数

W3 total cache很可能会缓存它,但有时用户会访问未缓存的页面,我认为这可以提高网站的速度,is my assumption correct?

2 个回复
最合适的回答,由SO网友:chrisguitarguy 整理而成

所以,所有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
    }
}

SO网友:Chip Bennett

查询条件是WordPress对象缓存的一部分,调用时不会产生额外的资源。

结束

相关推荐

Get paged outside of loop?

是否可以在标准WP循环之外进行寻呼?我已经在循环中使用了:<?php if ( $paged >= 2 ) { ?> Some text for the 2nd page on up <?php } ?> 但我希望能够在第二页或更大的所有页面上,在循环之外回显一些文本。可能的还是更好的方法?