The get_shortcode_regex() WordPress PHP function retrieves the regular expression used for searching shortcodes in a content. This function combines the shortcode tags into a regex class, allowing to parse and identify different components of a shortcode.
Usage
To use the get_shortcode_regex() function, you simply call it and store its result into a variable. It can be used to find all registered shortcodes or specific ones if they’re passed as an argument. Here’s an example:
$shortcodePattern = get_shortcode_regex(['your_shortcode']);
This line will return the regex pattern to find ‘your_shortcode’ in a string.
Parameters
- $tagnames (array – Optional): This parameter is a list of shortcodes that you want to find. If not specified, the function will default to all registered shortcodes.
More information
See WordPress Developer Resources: get_shortcode_regex()
This function is part of WordPress core and has been around for a long time, it’s not expected to be depreciated soon. It’s related to other shortcode handling functions like add_shortcode
and do_shortcode
.
Examples
Detecting a shortcode in global $post
This function checks if a specific shortcode is present in the global $post content:
function detect_my_shortcode() { global $post; $pattern = get_shortcode_regex(['my_shortcode']); if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches) && array_key_exists(2, $matches) && in_array('my_shortcode', $matches[2])) { // do something if shortcode is being used } } add_action('wp', 'detect_my_shortcode');
This function can only be used when $post is available. The earliest action you can hook into to get access to it is wp
.
Searching for a shortcode in all posts on the index page
This function checks if a specific shortcode is present in any of the posts on the index page:
function detect_my_shortcode() { global $wp_query; $posts = $wp_query->posts; $pattern = get_shortcode_regex(['my_shortcode']); foreach ($posts as $post) { if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches) && array_key_exists(2, $matches) && in_array('my_shortcode', $matches[2])) { // do something if shortcode is being used break; } } } add_action('wp', 'detect_my_shortcode');
Checking multiple shortcodes
You can pass an array of shortcodes to check if any of them are being used in the content:
function detect_my_shortcodes() { global $post; $pattern = get_shortcode_regex(['shortcode1', 'shortcode2']); if (preg_match_all('/'. $pattern .'/s', $post->post_content, $matches) && array_key_exists(2, $matches) && array_intersect(['shortcode1', 'shortcode2'], $matches[2])) { // do something if any of the shortcodes are being used } } add_action('wp', 'detect_my_shortcodes');
Escaping shortcodes
The regex also allows for escaping shortcodes with double [[ ]]
. If you want to use a shortcode as plain text in your content, you can do it by doubling the square brackets:
$content = 'This is a [[my_shortcode]]';
In this example, my_shortcode
will be treated