Add Weight to Entries (posts) within a Specific Category (taxonomy term)
By default SearchWP considers the actual content of taxonomy terms when performing searches. Depending on the way you’ve set up your site, you may want to give extra weight to entries regardless of taxonomy term, but instead add the weight to all entries that have been given a specific taxonomy term.
All hooks should be added to your custom SearchWP Customizations Plugin.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Add Weight to Entries (posts) within a Specific Category (taxonomy term) in SearchWP. | |
// @link https://searchwp.com/documentation/knowledge-base/add-weight-category-tag-term/ | |
add_filter( 'searchwp\query\mods', function( $mods ) { | |
global $wpdb; | |
// Taxonomy bonus weight Mods. | |
$bonuses = [ [ | |
'term_id' => 37, // Term ID to receive extra weight. | |
'weight' => 100, // How much extra weight for this term. | |
], [ | |
'term_id' => 82, // Term ID to receive extra weight. | |
'weight' => 200, // How much extra weight for this term. | |
] ]; | |
$term_mods = []; | |
foreach ( $bonuses as $bonus ) { | |
$mod = new \SearchWP\Mod(); | |
$index_alias = $mod->get_foreign_alias(); | |
$mod->relevance( "IF(( | |
SELECT {$wpdb->prefix}posts.ID | |
FROM {$wpdb->prefix}posts | |
LEFT JOIN {$wpdb->prefix}term_relationships ON ( | |
{$wpdb->prefix}posts.ID = {$wpdb->prefix}term_relationships.object_id | |
) | |
WHERE {$wpdb->prefix}posts.ID = {$index_alias}.id | |
AND {$wpdb->prefix}term_relationships.term_taxonomy_id = {$bonus['term_id']} | |
LIMIT 1 | |
) > 0, {$bonus['weight']}, 0)" ); | |
$term_mods[] = $mod; | |
} | |
$mods = array_merge( $mods, $term_mods ); | |
return $mods; | |
} ); |