Obrigado pelo seu trabalho nisto, pessoal. Este código me pegou a maior parte do caminho, mas usando o WP 3.8 eu estava recebendo um erro de tabela / alias não exclusivo do SQL, então fiz algumas alterações. Para que funcione na minha configuração, eu tive que configurar um alias postmeta $ wpdb- > que foi usado na instrução JOIN. Eu também verifico apenas uma vez para ver se os ganchos devem ser usados para que não disparem todas as vezes. Espero que isso ajude alguém!
global $postmeta_alias, $is_specials_search;
$cpt_name = 'special';
$postmeta_alias = 'pdpm'; // Change this to whatever your custom post type is
$is_specials_search = is_admin() && $pagenow=='edit.php' && isset( $_GET['post_type'] ) && $_GET['post_type']==$cpt_name && isset( $_GET['s'] );
// Extend search to include 'description' field
if ( $is_specials_search ) {
add_filter( 'posts_join', 'pd_description_search_join' );
add_filter( 'posts_where', 'pd_description_search_where' );
add_filter( 'posts_groupby', 'pd_search_dupe_fix' );
}
function pd_description_search_join ($join){
global $pagenow, $wpdb, $postmeta_alias, $is_specials_search;
if ( $is_specials_search )
$join .='LEFT JOIN '.$wpdb->postmeta. ' as ' . $postmeta_alias . ' ON '. $wpdb->posts . '.ID = ' . $postmeta_alias . '.post_id ';
return $join;
} // END search_join
function pd_description_search_where( $where ){
global $pagenow, $wpdb, $postmeta_alias, $is_specials_search;
if ( $is_specials_search )
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$postmeta_alias.".meta_value LIKE $1)", $where );
return $where;
} // END search_where
function pd_search_dupe_fix($groupby) {
global $pagenow, $wpdb, $is_specials_search;
if ( $is_specials_search )
$groupby = "$wpdb->posts.ID";
return $groupby;
} // END pd_search_dupe_fix