web-dev-qa-db-fra.com

Différentes façons d'interroger des types de publication personnalisés?

J'utilise ce code pour utiliser des types de publication personnalisés, tels que la publication régulière:

add_action( 'pre_get_posts', 'add_my_post_types_to_query' );

function add_my_post_types_to_query( $query ) {
if ( is_home() && $query->is_main_query() )
    $query->set( 'post_type', array( 'post', 'miss_behave', 'emily_davies','gemma_patel','poppy_smythe' ) );
return $query;
}

Mais j'ai aussi vu ce code pour afficher des types de publication personnalisés:

$query = new WP_Query( array(
'post_type' => array( 'post', 'page', 'movie', 'book' )
) );

Je me demande quelles sont les différences entre les deux méthodes.

Merci.

1
Jaeeun Lee

La première façon, en utilisant l'action pre_get_posts, modifiera la requête principale avant le chargement de la page. La deuxième façon créera une nouvelle requête. Il est bien préférable de modifier la requête principale que de créer une nouvelle requête.

0
Chris_O

pre_get_posts

pre_get_posts est utilisé pour modifier la requête principale pour les publications afin que la balise conditionnelle is_home() fonctionne.

Vous pouvez également utiliser la balise conditionnelle is_post_type_archive () pour modifier la requête sur les archives CPT.

add_action( 'pre_get_posts', 'limit_cpt_items' );
function limit_cpt_items( $query ) {

if( $query->is_main_query() && !is_admin() && is_post_type_archive( 'your-cpt' ) ) {
    $query->set( 'posts_per_page', '24' );
    }

}

WP_Query

Vous utiliseriez un nouveau WP_Query pour les demandes de page, y compris des balises conditionnelles pour des pages telles que is_page(), is_page_template() et is_front_page() qui ne fonctionnera PAS avec pre_get_posts qui est exécuté avant WP_Query.

0
Brad Dalton