Можете да намерите документацията в pre_get_post
филтрирайте тук http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Струва ми се, че проблемът всъщност е как задавате post_ids, които искате да извлечете. Ако се обърнете към връзката по-горе, можете да видите различните стойности, които могат да бъдат зададени в $query
обект, който се предава на филтъра, и post_id
не е един от тях, поради което "работи", когато го зададете, и "не работи", когато зададете p
. Последното е за един идентификатор на публикация, така че ако просто искате 100, ще използвате $query->set('p', 100)
. Ако искате да върнете резултати, при които идентификационният номер на публикацията е в масив, използвайте $query->set('post__in', array(100, 120))
. Вашият SQL код просто връща идентификатора, така че вместо да връщате обекти, можете просто да получите масив директно - предполагам, че повтаряйки заглавието и print_r
редовете само отстраняват грешки:
// 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 );
Възможно е също да не получите резултати, ако има съществуващи конфликтни параметри, зададени в $query
. Можете да проверите тези стойности с var_dump($query->query_vars)
и задайте всеки, който може да е в конфликт, на празен низ - във вашия случай $query->set( 'm', '' );