J'essaie d'afficher une liste de messages liés à la catégorie X et à la balise Y. J'ai essayé le code suivant:
$args = array(
'posts_per_page' => 4,
'tag_id' => $tag_id,
'cat' => $cat_id,
);
query_posts($args);
mais cela ne fonctionne pas correctement et renvoie tous les articles de la co\aégorie.
Aimeriez-vous entendre vos idées?
global $wp_query;
$args = array(
'category__and' => 'category',
'tag__in' => 'post_tag', //must use tag id for this field
'posts_per_page' => -1); //get all posts
$posts = get_posts($args);
foreach ($posts as $post) :
//do stuff
endforeach;
Je pense que c'est un bug dans WordPress qui a été commenté ailleurs, essayez d'utiliser le nom de la balise plutôt que l'ID, alors cela devrait fonctionner:
$args = array(
'posts_per_page' => 3,
'tag' => 'review',
'cat' => 9,
);
query_posts($args);
Dites-nous comment vous vous en sortez, ne savez pas ce qui se passe avec les balises contenant plusieurs mots dans le nom.
Je suis tombé sur le même problème et l'ai résolu en faisant une requête MySQL.
en bref: get_post ($ args) vous renverra les messages qui ont la catégorie = MyCategoryOUle tag = MyTag.
ce que vous voulez, c'est changer votreOUenET.
ma logique était d'aller directement avec une requête MySQL:
J'ai utilisé wpdb au lieu de query_post ();
Un peu de code (en retournant les publications publiées avec la catégorie MyCat et la balise MyTag)} _:
$query_byTag="
SELECT wp_posts.ID
FROM wp_posts, wp_term_relationships, wp_terms
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = 'MyTag'";
$query_byCat="
SELECT wp_posts.ID
FROM wp_posts, wp_term_relationships, wp_terms
WHERE wp_posts.ID = wp_term_relationships.object_id
AND wp_terms.term_id = wp_term_relationships.term_taxonomy_id
AND wp_terms.name = 'MyCat'";
$query ="
SELECT wp_posts.post_title AS title ,
wp_posts.post_content AS content,
wp_posts.post_date AS blogdate
FROM wp_posts
WHERE wp_posts.post_status = 'publish'
AND wp_posts.ID IN (".$query_byTag.")
AND wp_posts.ID IN (".$query_byCat.")
ORDER BY wp_posts.post_date DESC ";
$result= $wpdb->get_results($query);
C'est une façon sale de le faire mais j'espère que ça aide =)
Ce code fonctionne:
$args = array(
'tag' => get_queried_object()->slug, // If permalink like example.com/tag/example-tag, etc.
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'category', // Taxonomy, in my case I need default post categories
'field' => 'slug',
'terms' => 'interior', // Your category slug (I have a category 'interior')
),
)
); // Get all posts
$posts_new = get_posts( $args );