Mysql
 sql >> Database >  >> RDS >> Mysql

I pre_get_post di WordPress non funzionano

Puoi trovare la documentazione su pre_get_post filtra qui http://codex.wordpress.org/Plugin_API/Action_Reference/pre_get_posts

Mi sembra che il problema sia in effetti come stai impostando i post_ids che vuoi recuperare. Se fai riferimento al link sopra, puoi vedere i diversi valori che possono essere impostati su $query oggetto passato al filtro e post_id non è uno di questi, motivo per cui "funziona" quando lo imposti e "non funziona" quando imposti p . Quest'ultimo è per un ID post singolo, quindi se volevi solo 100, useresti $query->set('p', 100) . Se vuoi restituire risultati in cui l'ID del post è in un array, usa $query->set('post__in', array(100, 120)) . Il tuo codice SQL sta solo restituendo l'ID, quindi invece di restituire oggetti, puoi semplicemente ottenere un array direttamente - presumo che echeggi il titolo e print_r le righe stanno solo eseguendo il debug:

// 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 );

Potresti anche non ottenere risultati se sono presenti parametri in conflitto impostati su $query . Puoi controllare questi valori con var_dump($query->query_vars) e imposta quelli che potrebbero essere in conflitto su una stringa vuota - nel tuo caso $query->set( 'm', '' );