Dokumentację znajdziesz na pre_get_post
filtruj tutaj http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Wygląda na to, że problem polega na tym, jak ustawiasz identyfikatory post_id, które chcesz pobrać. Jeśli odniesiesz się do powyższego linku, możesz zobaczyć różne wartości, które można ustawić w $query
obiekt, który jest przekazywany do filtra i post_id
nie jest jednym z nich, dlatego "działa" po ustawieniu i "nie działa" po ustawieniu p
. To ostatnie dotyczy pojedynczego identyfikatora posta, więc jeśli chcesz tylko 100, użyjesz $query->set('p', 100)
. Jeśli chcesz zwrócić wyniki, w których identyfikator postu znajduje się w tablicy, użyj $query->set('post__in', array(100, 120))
. Twój kod SQL po prostu zwraca identyfikator, więc zamiast zwracać obiekty, możesz po prostu uzyskać tablicę bezpośrednio — zakładam, że powtórzenie tytułu i print_r
linie są tylko debugowane:
// 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 );
Możesz również nie uzyskać wyników, jeśli istnieją sprzeczne parametry ustawione w $query
. Możesz sprawdzić te wartości za pomocą var_dump($query->query_vars)
i ustaw dowolny, który może być w konflikcie, na pusty ciąg - w twoim przypadku $query->set( 'm', '' );