ajaydsouza
8/14/2015 - 10:07 AM

Better Search API Examples

Better Search API Examples

<?php

/**
 * Joins the Post Meta table. Filters bsearch_posts_join.
 * 
 * @param string $join
 * @return string
 */
function filter_bsearch_posts_join( $join ) {
	global $wpdb;

	return $join . "
		INNER JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
	";
}
add_filter( 'bsearch_posts_join', 'filter_bsearch_posts_join' );

/**
 * Checks the '_visibility' meta key for 'visible' meta_value. Filters bsearch_posts_where.
 * 
 * @param string $join
 * @return string
 */
function filter_bsearch_posts_where( $where ) {
	global $wpdb;

	return $where . "
		AND ( $wpdb->postmeta.meta_key = '_visibility' AND $wpdb->postmeta.meta_value = 'visible' )
	";
}
add_filter( 'bsearch_posts_where', 'filter_bsearch_posts_where' );

<?php
// Fixes to disregard Hidden products and to add Author Billing field to Better Search plugin queries
function filter_bsearch_posts_join( $join ) {
	global $wpdb, $author_search;
	$join .= "
	INNER JOIN $wpdb->postmeta AS pm ON ($wpdb->posts.ID = pm.post_id)
	";
	if ( $author_search ) {
		$join .= "
		INNER JOIN $wpdb->postmeta AS pma ON ($wpdb->posts.ID = pma.post_id)
		INNER JOIN $wpdb->postmeta AS pmta ON ($wpdb->posts.ID = pmta.post_id)
		";
	}
	return $join;
}
add_filter( 'bsearch_posts_join', 'filter_bsearch_posts_join' );

function filter_bsearch_posts_where( $where, $search_term ) {
	global $wpdb, $author_search;
	$where .= "
	AND ( pm.meta_key = '_visibility' AND pm.meta_value = 'visible' )
	";
	if ( $author_search ) {
		$where .= "
		AND ( pma.meta_key = 'wpcf-author-billing' AND pma.meta_value LIKE '%{$search_term}%' )
		AND ( pmta.meta_key = 'wpcf-title-alphabetical' )
		";
	}
	return $where;
}
add_filter( 'bsearch_posts_where', 'filter_bsearch_posts_where', 10, 2 );

function filter_bsearch_posts_match( $match, $search_term ) {
	global $wpdb, $author_search;
	$author_search = $wpdb->get_results( $wpdb->prepare( "
	SELECT post_id FROM $wpdb->postmeta
	WHERE `meta_key` = 'wpcf-author-billing' AND `meta_value` LIKE '%s'
	", "%".$search_term."%" ) );

	if ( $author_search ) {
		return " ";
	} else {
		return $match;
	}
}
add_filter( 'bsearch_posts_match', 'filter_bsearch_posts_match', 10, 2 );

function filter_bsearch_posts_orderby( $orderby, $search_term ) {
	global $wpdb, $author_search;

	if ( $author_search ) {
		return " pmta.meta_value ASC ";
	} else {
		return $orderby;
	}
}
add_filter( 'bsearch_posts_orderby', 'filter_bsearch_posts_orderby', 10, 2 );