Puede encontrar la documentación en pre_get_post
filtra aquí http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts
Me parece que el problema es, de hecho, cómo está configurando los post_ids que desea recuperar. Si consulta el enlace anterior, puede ver los diferentes valores que se pueden establecer en el $query
objeto que se pasa al filtro, y post_id
no es uno de ellos, por lo que "funciona" cuando lo configura y "no funciona" cuando configura p
. El último es para una ID de publicación única, por lo que si solo quisiera 100, usaría $query->set('p', 100)
. Si desea obtener resultados en los que el ID de la publicación está en una matriz, use $query->set('post__in', array(100, 120))
. Su código SQL solo devuelve la ID, por lo que en lugar de devolver objetos, puede obtener una matriz directamente; supongo que repetirá el título y print_r
las líneas solo se están depurando:
// 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 );
Es posible que tampoco obtenga resultados si existen parámetros en conflicto establecidos en $query
. Puede verificar estos valores con var_dump($query->query_vars)
y establezca cualquiera que pueda estar en conflicto en una cadena vacía; en su caso, $query->set( 'm', '' );