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.
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.
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.