<?php | |
add_filter( 'posts_search', 'm_cars_search_vin' ); | |
function m_cars_search_vin( $where ) { | |
global $pagenow, $wpdb, $wp; | |
// check if we are on the right page & performing a search & for the right post type | |
if ( 'edit.php' != $pagenow || ! is_search() || ! isset( $wp->query_vars['s'] ) || 'cars' != $wp->query_vars['post_type'] ) { | |
return $where; | |
} | |
// the meta key of the custom field we are looking for | |
$meta_key = '_car_vin'; | |
$search_ids = array(); | |
$terms = explode( ',', $wp->query_vars['s'] ); | |
foreach ( $terms as $term ) { | |
if ( is_numeric( $term ) ) { | |
$search_ids[] = $term; | |
} | |
// Attempt to get a VIN | |
$vin_to_id = $wpdb->get_results( $wpdb->prepare( "SELECT ID, post_parent FROM {$wpdb->posts} LEFT JOIN {$wpdb->postmeta} ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id WHERE meta_key='{$meta_key}' AND meta_value LIKE %s;", '%' . $wpdb->esc_like( wc_clean( $term ) ) . '%' ) ); | |
$vin_to_id = array_merge( wp_list_pluck( $vin_to_id, 'ID' ), wp_list_pluck( $vin_to_id, 'post_parent' ) ); | |
// include the ids of relevant posts in the results | |
if ( sizeof( $vin_to_id ) > 0 ) { | |
$search_ids = array_merge( $search_ids, $vin_to_id ); | |
} | |
} | |
$search_ids = array_filter( array_unique( array_map( 'absint', $search_ids ) ) ); | |
if ( sizeof( $search_ids ) > 0 ) { | |
// if ids found, change the where clause | |
$where = str_replace( 'AND (((', "AND ( ({$wpdb->posts}.ID IN (" . implode( ',', $search_ids ) . ")) OR ((", $where ); | |
} | |
return $where; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment