Tôi đã chơi xung quanh với các đoạn mã có thêm dữ liệu meta vào tìm kiếm của quản trị viên.
Đoạn trích hay nhất mà tôi tìm thấy được viết bởi Stefano về câu hỏi này .
Tuy nhiên, nó dường như có 1 lỗi khó chịu khi tìm kiếm các thuật ngữ không phải meta.
Dưới đây là một số lấy từ cài đặt dev địa phương của tôi. Tôi đã in 2 truy vấn MySQL lên màn hình.
Xem bài đăng CPT duy nhất tôi đang sử dụng để kiểm tra
Đây là mã làm việc như mong đợi và cho phép tôi tìm kiếm dữ liệu meta từ quản trị viên
Thật không may, mã tạo các bản sao trên các kết quả không phải là meta, trong trường hợp này là trên tiêu đề bài đăng
Một ví dụ hiển thị trạng thái bài đăng, loại bài đăng và tổ tiên của bản sao
! Một ví dụ hiển thị trạng thái bài đăng, loại bài đăng và tổ tiên của bản sao
Đây là mã tôi đang chạy, về cơ bản giống như mã của Stefano, nhưng với những nỗ lực thô sơ của tôi để làm cho truy vấn hoạt động.
/*
* 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' );