Wordpress - How to detect if a Shortcode is being called on a page?
I have sometimes wondered the same thing - whether wp maybe checked on save and kept a register etc
I had a quick look at the code, and it seems not.
There is however a global $shortcode_tags
, and wp has this function
function get_shortcode_regex() {
global $shortcode_tags;
$tagnames = array_keys($shortcode_tags);
$tagregexp = join( '|', array_map('preg_quote', $tagnames) );
// WARNING! Do not change this regex without changing do_shortcode_tag() and strip_shortcodes()
return '(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)';
}
used here to apply the shortcode:
$pattern = get_shortcode_regex();
return preg_replace_callback('/'.$pattern.'/s', 'do_shortcode_tag', $content);
My regex is not that great, but maybe you could do something with that?
Alternatively:
Then there is the brute force way - for each of the shortcode tags, 'simply' check if '['.$tag
is in the content ?
But then some developers / older plugins do their own funky filters on the content with comments or other custom tags.
So then, you could also check the wp global $wp_filter
for $wp_filter['the_content']
; the contents should the functions called for "the content".
To be clever
You could maybe add an action yourself on post save/update, do the check for filters and shortcodes then and store something in a post-meta. Then all you have to do at display time is check the post-meta.
Whew... is it worth it?
For anyone who came to this question here is the correct answer:
Use has_shorcode() to detect if a specific shortcode was called. Can be viewed here:
https://developer.wordpress.org/reference/functions/has_shortcode/