检查是否已调用筛选器或函数

时间:2019-08-30 作者:shanebp

WordPress中是否有方法在屏幕加载时检查是否调用了筛选器或函数是否已运行?

我似乎想起了一些方法,但不记得具体细节。

在页面加载期间,一个过滤器被调用了3次,我想在再次运行各种db密集型代码之前检查它是否已经被调用。

我的问题不是针对the_content, 但例如:

add_filter( \'the_content\', \'asdf_the_content\', 99, 1 );

function asdf_the_content( $content ) {

     // check if the_content has already been 
     // filtered by some other function

     $content = ucwords( $content );

    return $content;
}

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

可以使用静态变量来实现这一点:

add_filter( \'the_content\', \'asdf_the_content\', 99, 1 );

function asdf_the_content( $content ) {
     static $has_run = false;

     if ( $has_run ) {
         return $content;
     }

     $has_run = true;

     // check if the_content has already been 
     // filtered by some other function

     $content = ucwords( $content );

    return $content;
}
The$has_run 变量将为false 在第一次运行和后续运行时true 代码将不会继续。函数中的静态变量在每次执行期间都会保持其值,而不是像普通变量一样初始化。

另一个例子:

function add_one() {
    static $total = 0;

    $total++;

    echo $total;
}

add_one(); // 1
add_one(); // 2
add_one(); // 3

相关推荐

apply_filters to $GLOBALS

我正在使用Pootle页面构建插件构建一个单页网站。使用get\\u page,我在1页上显示每个单独的页面。为了针对Pootle页面生成器内容,我使用以下代码:$content = $GLOBALS[\'Pootle_Page_Builder_Render_Layout\']->panels_render( $page_data->ID ); 当我尝试实现一个像旋转木马这样的插件时,我需要使用一个短代码,但短代码不起作用。为了使短代码有效,我需要使用apply_filters(\'