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.

scree shot given below

enter image description here


Comments

Popular posts from this blog

php - Calling a template part from a post -

Firefox SVG shape not printing when it has stroke -

How to mention the localhost in android -