Anda dapat menemukan dokumentasinya di pre_get_post
filter di sini http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Bagi saya sepertinya masalahnya adalah bagaimana Anda mengatur post_ids yang ingin Anda ambil. Jika Anda merujuk ke tautan di atas, Anda dapat melihat berbagai nilai yang dapat disetel pada $query
objek yang diteruskan ke filter, dan post_id
bukan salah satunya, itulah sebabnya "berfungsi" saat Anda menyetelnya, dan "tidak berfungsi" saat Anda menyetel p
. Yang terakhir adalah untuk satu ID posting, jadi jika Anda hanya ingin 100, Anda akan menggunakan $query->set('p', 100)
. Jika Anda ingin mengembalikan hasil di mana ID posting berada dalam array, Anda menggunakan $query->set('post__in', array(100, 120))
. Kode SQL Anda baru saja mengembalikan ID, jadi daripada mengembalikan objek, Anda bisa mendapatkan array secara langsung - Saya berasumsi bahwa menggemakan judul dan print_r
baris hanya debugging:
// get results as a numeric array
$post_ids = $wpdb->get_results($request, ARRAY_N);
// pass post id array to $query
$query->set( 'post__in', $post_ids );
Anda mungkin juga tidak mendapatkan hasil jika ada parameter yang bertentangan yang disetel pada $query
. Anda dapat memeriksa nilai ini dengan var_dump($query->query_vars)
dan setel apa pun yang mungkin bertentangan ke string kosong - dalam kasus Anda $query->set( 'm', '' );