Anonymous functions have been around for a long time. And since WordPress now supports php 5.6 it can be safely used.
And appears to be allowed?
Personally I’m not a fan of anonymous functions in combination with WordPress actions and filters. My main concern is you can’t remove them once registered. How ever today I found a use case which was very usefull in combination with the use
My example:
<?php /* Template name: some-template */ // Gather all data $condition_for_title = true; $h1_title_override = 'very heavy and complicated check'; // the H1 also needed as the <title> add_filter( 'pre_get_document_title', function( $title ) use ($h1_title_override, $condition_for_title) { if ($condition_for_title) { return $h1_title_override; } return $title; }, 20, 1 ); get_header(); // start body ?> <h1><?php echo $h1_title_override ?>
Here I pass 2 variables h1_title_override
and $condition_for_title
which are created outside the function. In my case these where quite complicated and heavy checks. Of course I could put those in a function and cache the result. And call that check in the filter function. But still I need to check the current template before doing the function.
More traditional Example:
in functions.php
<?php function complicated_check() { // Gather all data $condition_for_title = true; $h1_title_override = 'very heavy and complicated check'; return [ 'condition_for_title' => $condition_for_title, 'h1_title_override' => $h1_title_override, ]; } function title_exception_for_template( $title ) { if ( ! is_page_template('clean-template.php')) { return $title; } $template_data = complicated_check(); if ( $template_data['condition_for_title'] ) { return $template_data['h1_title_override']; } return $title; } add_filter( 'pre_get_document_title', 'title_exception_for_template', 20, 1 );
in clean-template.php
<?php /* Template name: clean-template */ $template_data = complicated_check(); get_header(); // start body ?> <h1><?php echo $template_data['h1_title_override'] ?>
Both these approaches do the same thing. But the more traditional way is a lot more code. Although it has cleaner template.
I probably won’t use this much. If the anonymous function was more complicated it will get hard to read.
But for this case I think it was neat that I could use this little feature.