Я грав разом із фрагментами коду, які додають метадані до пошукових запитів адміністратора.
Найкращий фрагмент, який я знайшов, написав Стефано в цьому питанні .
Однак, як видається, є 1, дратує помилку під час пошуку неметальних термінів.
Ось кілька захоплень від моєї локальної програми встановлення. Я надрукував на екран 2 запити MySQL.
Перегляд єдиної публікації CPT, яку я використовую для тестування
Цей код працює, як очікувалося, і дозволяє мені шукати метадані від адміністратора
На жаль, код створює дублікати на неметалічні збіги, в даному випадку на заголовок публікації
Захоплення, що показує статус посади, тип посади та предки овець
! Захоплення, що показує статус посади, тип посади та предки овець
Ось код, який я запускаю, він в основному такий же, як і у Стефано, але з моїми грубими спробами змусити запит працювати.
/*
* Search custom fields from admin keyword searches
*/
function rel_search_join( $join ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type'] == 'listings' && $_GET['s'] != '') {
$join .= 'LEFT JOIN ' . $wpdb->postmeta . ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id ';
}
echo '<br><strong>JOIN</strong>: ';
print_r ( $join );
echo '<br>';
return $join;
}
add_filter('posts_join', 'rel_search_join' );
function rel_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_admin() && $pagenow == 'edit.php' && $_GET['post_type']=='listings' && $_GET['s'] != '' ) {
$where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
$where = str_replace( "OR wp_posts.post_status = 'pending'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'private'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'draft'", "", $where );
$where = str_replace( "OR wp_posts.post_status = 'future'", "", $where );
}
echo '<br><strong>WHERE</strong>: ';
print_r ( $where );
echo '<br>';
return $where;
}
add_filter( 'posts_where', 'rel_search_where' );