Skip to content

Instantly share code, notes, and snippets.

@spencejs
Created March 22, 2013 03:53
Show Gist options
  • Save spencejs/5218840 to your computer and use it in GitHub Desktop.
Save spencejs/5218840 to your computer and use it in GitHub Desktop.
Include Tags In Wordpress Search
@abd-gang
Copy link

How to use this function with my theme which uses PHP?

Thanks

@dmhendricks
Copy link

How to use this function with my theme which uses PHP?

The code above is PHP. You can add it to your theme's functions.php file.

@Connum
Copy link

Connum commented Nov 19, 2021

After the WordPress 4.8.3 security update, you'll have to replace the percent characters in the LIKE statement with the string returned by

$wpdb->placeholder_escape()

And instead of using grouping, it should be enough to set DISTINCT using the posts_distinct.

Also, note that this will perform a search for the whole search query. If you want to match tags matching one word of the query, you'll have to split up the query by spaces, loop over the words and add the $where part for each of the words.

@jfaMan
Copy link

jfaMan commented Aug 17, 2022

After the WordPress 4.8.3 security update, you'll have to replace the percent characters in the LIKE statement with the string returned by

$wpdb->placeholder_escape()

@Connum Could you elaborate why you need to replace them? Isn't that what the changes in the update address? i.e. Don't they get replaced by placeholder escape strings before the query anyway?

@Connum
Copy link

Connum commented Aug 17, 2022

After the WordPress 4.8.3 security update, you'll have to replace the percent characters in the LIKE statement with the string returned by

$wpdb->placeholder_escape()

@Connum Could you elaborate why you need to replace them? Isn't that what the changes in the update address? i.e. Don't they get replaced by placeholder escape strings before the query anyway?

The updated WP code will escape any percentage signs in a query, so they are no longer seen as a wildcard in SQL, in order to prevent injections via user input in places where you don't want to have wildcards. In order to have a real percentage sign in a query written in your plugin or theme code, you'll have to make use of the mentioned method.

@jfaMan
Copy link

jfaMan commented Aug 17, 2022

@Connum Thanks for the quick reply. I'm finding that even if I use your method, if I literally search just % signs like % or %%%, it will return strange posts that don't even exist, some with weird titles and excerpts with actual code in them. The same thing happens if I search with a blank input. Something like 100% will query fine though with your method or the original method.

I have it like this:

function custom_search_where($where){
        global $wpdb;
        $placeholder_string = $wpdb->placeholder_escape();
        if (is_search()) {
            $where .= "OR (t.name LIKE '".$placeholder_string.get_search_query().$placeholder_string."' AND {$wpdb->posts}.post_status = 'publish')";
        }
        return $where;
    }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment