Check if a filter or function has been already been called

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 rec

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

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745198105a4616189.html

相关推荐

  • Check if a filter or function has been already been called

    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 rec

    6小时前
    20

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信