Donc, j'ai un type de message personnalisé, "propriétés".
J'utilise archive-properties.php
et j'ai besoin de définir certains paramètres sur le $query
.
Je ne veux pas utiliser new WP_Query
car j'ai rencontré quelques problèmes dans lesquels un plugin de pagination essayait de paginer le $query
qui existait déjà depuis que nous étions sur une page d'archive, si cela a du sens.
Alors maintenant, mon problème est que, si je règle posts_per_page
à 2
par exemple, et que je me connecte au serveur, il n’affiche que 2 posts.
Donc, j'ai besoin de cela pour changer la requête sur le frontend, mais pas le backend. Je ne sais pas quoi inclure dans la déclaration if.
function set_query_parameters($query) {
if( is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) {
$query->set('posts_per_page', 12);
$query->set('orderby', array(
'date' => 'DESC',
));
}
return $query;
}
add_action( 'pre_get_posts', 'set_query_parameters' );
En ce qui concerne votre décision de ne pas utiliser WP_Query, pre_get_posts
est en fait un excellent choix à faire, plutôt que de créer une nouvelle instance de WP_Query. En fait, pre_get_posts
est exactement ce que vous devriez utiliser lorsque vous souhaitez modifier la requête principale. Plutôt que d'exécuter une requête distincte à chaque chargement de page, il modifie les paramètres de la requête principale avant qu'il exécute. Beaucoup plus efficace!
Tu y es presque. Vous devez simplement ajouter !is_admin()
à votre déclaration if
. Vous devez également appeler spécifiquement is_main_query()
sur l'objet $query
transmis à votre fonction .
Avec ces deux modifications, votre déclaration if
se lirait désormais comme suit:
if( !is_admin() && $query->is_main_query() && is_post_type_archive( 'properties' ) && !$_SESSION ) {
Il convient également de noter qu'il n'est pas nécessaire de renvoyer une valeur à une action Wordpress, par opposition à un filtre. Avec pre_get_posts
, l'argument est transmis par référence afin que toute modification apportée à votre variable $query
prenne effet automatiquement.