Sort Wordpress Search by Relevance -
i've created pretty advanced search wordpress site i'm working on atm. allowing visitors filter results different taxonomies, sort them date or custom fields normal free text search (which wp offers default).
i've accomplished using pre_get_posts
filter , adding stuff query, this: (note i've left out sanity checks , other code)
<?php add_filter('pre_get_posts', 'my_search'); function my_search ($qry) { # include more post types $qry->set('post_type', array('foo', 'bar')); if ($_get['myorder'] == 'price') { $qry->set('orderby', 'meta_value_num'); $qry->set('meta_key', 'price'); $qry->set('order', 'asc'); } else { $qry->set('orderby', 'date'); $qry->set('order', 'desc'); } }
now add way sort posts, namely relevance. understand common request , solutions problem i've seen include using relevanssi plugin. seeing i've written own "plugin" (well, code @ least) , have search forms , listings set use that, switching relevanssi won't easy @ point.
sooo, i'd know if knows of (preferably) easy way add code i've got?
as far understand, wp search using like
instead of match()
, that's why doesn't have relevance score sort on. if correct assume have write own query altogether? how can without messing wp's pagination etc? or add $qry->set('where', "match(post_content) against('$q' in boolean mode) relevance"); $qry->set('sortby', 'relevance')
reckon?
i think can use relevanssi
without problem need use filter
hook, check relevanssi_modify_wp_query more details, check following code
function func_reli($qry){ $qry->set( 'post_type', array( 'post', 'page', 'restaurant', 'products' ) ); if ($_get['myorder'] == 'price') { $qry->set('orderby', 'meta_value_num'); $qry->set('meta_key', 'price'); $qry->set('order', 'asc'); } else { $qry->set('orderby', 'date'); $qry->set('order', 'desc'); // <-- set (in code 'add' used) } return $qry; // <-- must return, in code didn't } add_filter('relevanssi_modify_wp_query', 'func_reli');
i've tested code , works fine. in example i've used 'restaurant'
, 'products'
custom post types , search works fine, relevant results. can use if php 5.3+
installed
add_filter('relevanssi_modify_wp_query', function($qry){ // same code });
also, if use relevanssi plugin, can use it's setup page set post_type
instead of using ($qry->set( 'post_type', array(...) )
) in functions.php
file.
Comments
Post a Comment