Proper usage of get_search_query()
This tutorial explains the two ways to properly use WordPress’ template tag, get_search_query(), depending on context. Note that the information provided in this post also applies to the similar tag, the_search_query().
Case 1: get_search_query() in markup
When using get_search_query() in HTML markup (as opposed to an attribute), it is best practice to set the tag’s $escaped parameter to false, for example:
<h3>Search Results for:
<?php echo esc_html(get_search_query(false)); ?>
</h3>
Here the output is included within an HTML element rather than an attribute, so we want to escape it using esc_html() instead of esc_attr(), which is used by WordPress when the $escaped parameter is omitted or set to true (its default value). The difference is subtle, but is important to escape data properly depending on context.
Case 2: get_search_query() in attributes
When using get_search_query() in HTML attributes, the correct usage is to set the $escaped parameter to true, which happens to be its default value. So when using in HTML attributes, either of the following is correct:
<h3 data-search="<?php echo get_search_query(true); ?>">
Search Results
</h3>
<h3 data-search="<?php echo get_search_query(); ?>">
Search Results
</h3>
In either of these cases it is not necessary to escape the output of get_search_query() because WordPress passes it through esc_attr(). See the WP Codex for more details.
Take-home message
- For HTML/markup use
esc_html(get_search_query(false)) - For attributes use
get_search_query()


