最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Check if a filter or function has been already been called

programmeradmin2浏览0评论

Is there a way in WordPress to check, on a screen load, if a filter has been called or a function has run?

I seem to recall some way to do that, but don't recall the specifics.

A filter is being called 3 times during a page load and I want to check if it has already been called before I run various db intensive code again.

My questions is not specific to the_content, but for example:

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;
}

Is there a way in WordPress to check, on a screen load, if a filter has been called or a function has run?

I seem to recall some way to do that, but don't recall the specifics.

A filter is being called 3 times during a page load and I want to check if it has already been called before I run various db intensive code again.

My questions is not specific to the_content, but for example:

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;
}
Share Improve this question edited Aug 30, 2019 at 15:22 shanebp asked Aug 30, 2019 at 10:43 shanebpshanebp 5,0857 gold badges27 silver badges40 bronze badges 4
  • 1 Can you include a code example of exactly what you're talking about? – Jacob Peattie Commented Aug 30, 2019 at 11:44
  • 1 I'm asking if there is a WP method for doing so. Not a solution to a specific filter. And I know about remove_filter. But I've added a generic filter call above. – shanebp Commented Aug 30, 2019 at 15:19
  • I’m more interested in why you need to check if the filter has run. What are you trying to avoid repeating. I basically want to see if a transient or the object is really what you need, rather than actually knowing about the filter. – Jacob Peattie Commented Aug 30, 2019 at 15:47
  • It's function that includes a filter for an ajax query string. If I use the filter hook and log the calls, it runs 3 times. I cannot stop that, but I hoped there was a native WP way to check if a call to that filter had already been made. I know about transients, etc. – shanebp Commented Aug 30, 2019 at 16:01
Add a comment  | 

1 Answer 1

Reset to default 4

You can use a static variable to achieve this:

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 variable will be false on the first run, and subsequent runs it will be true and the code will not continue. Static variables like this inside a function maintain their values during each execution, instead of initializing like normal variables.

Another example:

function add_one() {
    static $total = 0;

    $total++;

    echo $total;
}

add_one(); // 1
add_one(); // 2
add_one(); // 3
发布评论

评论列表(0)

  1. 暂无评论