J'essaie de définir un post__not_in
qui utilise une variable globale $popular
, définie dans le index.php
.
-index.php-
$popular[] = 1 //post id=1
$popular[] = 2 //post id=2
$popular[] = 3 //post id=3
-fonctions.php-
function modify_query_exclude_popular($query) {
if ($query->is_main_query() && $query->is_home()){
global $popular;
$query->set('post__not_in', $popular);
}
}
add_action('pre_get_posts', 'modify_query_exclude_popular' );
Je ne peux tout simplement pas le faire fonctionner, la boucle fonctionne, mais les post_ids populaires ne sont pas exclus. J'ai tout essayé: définir une constante, en utilisant "create_function" etc ...
PS: Si je mets le tableau $popular
dans la fonction modify_query_exclude_popular()
, cela fonctionne, mais je dois absolument définir le tableau dans index.php
(le $popular
utilise post_id d’une autre boucle).
Vous devez déclarer $popular
comme étant global avant de l'utiliser. Basé sur le code que vous avez posté, vous ne l'avez pas fait.
global $popular;
$popular[] = 1 //post id=1
$popular[] = 2 //post id=2
$popular[] = 3 //post id=3
Cependant, si vous parlez du index.php
dans le thème, ce fichier n'est pas toujours utilisé. Vous définissez peut-être la variable dans un fichier qui ne se charge pas lorsque vous en avez besoin. Il est difficile de dire si c'est le cas en raison du code limité que vous avez posté.
De toute façon, pre_get_posts
sera exécuté avant l'un des fichiers de thème, sauf si functions.php
(ou tout fichier inclus à partir de celui-ci). Vous pouvez faire écho aux valeurs de ce filtre et de header.php
pour vous le prouver.
En outre, il peut exister un meilleur moyen de procéder que de déclarer une variable globale. Encore une fois, en raison du code limité, il est difficile de dire.
Globalement, il semble que vous deviez repenser la façon dont vous allez accomplir cela. Une description bien meilleure de ce que vous essayez d'accomplir serait utile.
Le fichier INDEX.php est raffiné bien après le hook pre_get_posts
... vous devez donc définir la variable $popular
avant ce hook.