Existe-t-il un moyen simple de rechercher des publications qui sont étiquetées avec n'importe quel terme d'une taxonomie particulière?
Je connais cette technique:
$custom_taxonomy_query = new WP_Query(
array(
'taxonomy_name' => 'term_slug',
)
);
Mais je voudrais soit passer un caractère générique à la place de term_slug, ou peut-être juste une chaîne vide. Ensuite, cela me donnerait tous les messages qui sont étiquetés par n'importe quel terme de cette taxonomie, pas seulement un terme spécifique.
Merci pour votre aide, Dave
Quelque chose comme ça pourrait fonctionner:
Vous demandez essentiellement un article attribué à un terme quelconque dans votre_custom_taxonomy.
la source
Salut @Dave Morris:
Vous avez raison, WordPress décide que si vous n'avez pas de terme, il ignorera simplement votre taxonomie.
Il y a trois (3) approches que vous pourriez essayer:
Utilisez une requête SQL complète avec
$wpdb->get_results()
,Obtenez une liste de
$post->ID
s pour tous les messages de votre taxonomie, puis passez-les à l'aide de l''post__id'
argument, ouAnnotez le SQL utilisé par
WP_Query
avec l'un des crochets qui vous permettent d'ajouter un SQLINNER JOIN
référençant les tables de taxonomie.J'essaie d'éviter SQL complet dans WordPress jusqu'à ce que cela ne puisse pas être aidé ou qu'il renvoie simplement une liste d'ID. Et dans ce cas, j'éviterais de tirer une liste de
$post-ID
s à utiliser avec l''post__id'
argument, car cela pourrait entraîner des problèmes de performances et même des problèmes de mémoire si vous aviez beaucoup de messages. Cela nous laisse donc avec # 3.J'ai créé une classe à étendre
WP_Query
appeléePostsByTaxonomy
qui utilise le'posts_join
crochet. Tu peux le voir ici:Vous appelleriez cette classe comme vous le voyez ci-dessous. L'argument
'taxonomy'
est obligatoire mais vous pouvez également passer (tous?) Les autres paramètresWP_Query
attendus, tels que'posts_per_page'
:Vous pouvez copier la
PostsByTaxonomy
classe dans lefunctions.php
fichier de votre thème , ou vous pouvez l'utiliser dans un.php
fichier d'un plugin que vous écrivez.Si vous voulez le tester rapidement, j'ai publié une version autonome du code sur Gist que vous pouvez télécharger et copier à la racine de votre serveur Web en tant que
test.php
, modifier pour votre cas d'utilisation, puis demander à votre navigateur en utilisant une URL commehttp://example.com/test.php
.MISE À JOUR
Pour omettre les messages collants des messages inclus dans la requête, essayez ceci:
Ou s'il est important pour vous que la
PostsByTaxonomy
classe n'inclue jamais de messages collants, vous pouvez le mettre dans le constructeur:MISE À JOUR 2
Après avoir posté ce qui précède, j'ai appris que 'caller_get_posts' sera obsolète et
'ignore_sticky_posts'
sera utilisé dans WordPress 3.1.la source
caller_get_posts=1
et qu'ils devraient disparaître: codex.wordpress.org/Function_Reference/… J'espère que cela vous aidera.if(isset($query->posts_by_taxonomy))
une bonne astuce pour combiner la méthodologie orientée objet avec la méthodologie de hook de WordPress.Vous devez simplement pouvoir définir la taxonomie et annuler pour inclure un terme.
Par exemple.
Ce qui serait à peu près la même que la requête effectuée par une archive de taxonomie.
la source
WP_Query
-la.WP_Query
n'est malheureusement pas implémenté d'une manière aussi élégante. C'est près de 1200 lignes de cas spéciaux codés en dur.