web-dev-qa-db-fra.com

get_posts () avec le type de publication personnalisé ne fonctionne pas en dehors de page.php

J'ai créé un type de message personnalisé appelé "communauté", créé un nouveau message avec une catégorie (cat id = 6). J'utilise le code suivant:

$args = array (
    'numberposts' => -1,
    'post_type'   => 'community',
    'post_status' => 'publish',
    'orderby'     => 'date',
    'order'       => 'DESC',
    'category'    => 6
);
$communities = get_posts($args);

Cela a parfaitement fonctionné dans mon page.php . Cependant, ça ne marche pas quand j'essaye la même page intérieure category.php , je ne reçois pas les posts avec précision! Il renvoie tous les autres messages.

Une idée?

1
Mahmoudco

Mon hypothèse est qu'il existe un filtre - pre_get_posts le plus probable - qui est appliqué à l'archive des catégories et que ce filtre est écrit de manière trop large et qu'il s'applique à toutes les requêtes de la page plutôt qu'à celle à laquelle il est destiné - probablement la requête principale. La bonne solution serait de réparer ce filtre, mais je ne peux pas dire exactement comment sans voir le code. Je suppose que vous devez ajouter if(is_main_query()) {... } mais encore une fois, c'est deviner.

Vous pouvez supprimer le filtre si vous savez ce que son rappel est:

remove_filter('pre_get_posts','callback_name');

Vous en auriez besoin juste avant votre requête et vous pourriez avoir besoin d'une add_filter() après, selon la structure de votre page.

Vous pouvez également utiliser :

remove_all_filters( 'pre_get_posts` );

Mais cela prend vraiment une masse au problème.

1
s_ha_dum