Skip to content

Instantly share code, notes, and snippets.

@jchristopher
Last active April 26, 2021 06:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jchristopher/95acc86c229cfd6604be589476809c81 to your computer and use it in GitHub Desktop.
Save jchristopher/95acc86c229cfd6604be589476809c81 to your computer and use it in GitHub Desktop.
Add Weight to Entries (posts) within a Specific Category (taxonomy term) in SearchWP
<?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;
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment