как запрашивать сообщения по категориям и тегам?
-
-
Я думаю,что с query_posts () вы можете использовать только категорию или тег.Я не уверен,но,возможно,использование функции ограничено тем,что означало бы,что она работает правильно,но не делает то,что вы хотите.I think with query_posts() you can only make use of category or tag. I'm not sure, but maybe the use of the function is limited to that which would mean that this is correctly working but it doesn't do what you want to do it.
- 0
- 2010-11-17
- hakre
-
5 ответ
- голосов
-
- 2010-12-03
Изменить: см. ниже правильный способ запроса пересечений категорий и тегов.
global $wp_query; $args = array( 'category__and' => 'category', //must use category id for this field '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;
Edit: See below for proper way to query category and tag intersections.
global $wp_query; $args = array( 'category__and' => 'category', //must use category id for this field '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;
-
- 2010-12-04
Я думаю,что это ошибка в WordPress,которую комментировали в другом месте,попробуйте использовать имя тега,а не идентификатор,тогда он должен работать:
$args = array( 'posts_per_page' => 3, 'tag' => 'review', 'cat' => 9, ); query_posts($args);
Дайте нам знать,как у вас дела,вы не знаете,что происходит с тегами с несколькими словами в названии.
I think this is bug in WordPress that has been commented on elsewhere, try using the name of the tag rather than the ID then it should work:
$args = array( 'posts_per_page' => 3, 'tag' => 'review', 'cat' => 9, ); query_posts($args);
Let us know how you get on, not sure what happens with tags with multiple words in the name.
-
- 2014-06-08
Я столкнулся с той же проблемой и решил ее,отправив запрос MySQL.
вкратце: get_post ($ args) вернет вам сообщения с категорией=MyCategory ИЛИ тегом=MyTag.
вы хотите изменить ИЛИ на И .
Моя логика заключалась в том,чтобы использовать MySQL Query:
- Запрос 1=выберите все сообщения,которые имеют категорию MyCat
- Запрос 2=выберите все сообщения с тегом MyTag
- И наконец: выберите все сообщения,которые находятся в запросе 1 И запросе 2.
Я использовал wpdb вместо query_post ();
Немного кода (возврат опубликованных сообщений с категорией MyCat и тегом 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);
Это грязный способ сделать это,но я надеюсь,что он поможет=)
I stumbled into this same issue and resolved it by making a MySQL request .
in short : get_post($args) will return you posts who have the category=MyCategory OR the tag=MyTag.
what you want is to change your OR to AND .
my logic was to go straight with a MySQL Query:
- Query 1 = Select all the posts who has the category MyCat
- Query 2 = Select all the posts who has the tag MyTag
- FinalLY : Select all the posts who are in Query 1 AND Query 2 .
I used wpdb instead of query_post();
A bit of code (returning published posts with category MyCat and tag 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);
This is a dirty way to do it but I hope it helps =)
-
Это намного проще сделать с помощью [`WP_Query` и отношения`tax_query` AND] (http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters),без необходимости в чистом SQL.This is much more easily accomplished with [`WP_Query` and a `tax_query` AND relationship](http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters), no need for raw SQL.
- 7
- 2014-06-08
- Milo
-
Для этого совершенно не нужно выполнять необработанные запросы в WordPress.There is absolutely no need to do raw queries in WordPress to achieve this.
- 0
- 2020-01-30
- Drmzindec
-
- 2016-03-11
Этот код работает:
$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 );
This code works:
$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 );
-
- 2016-03-15
SELECT wp_posts.post_name FROM wp_posts, wp_term_relationships, wp_terms, wp_term_taxonomy WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_terms.term_id = wp_term_taxonomy.term_id AND wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id AND wp_terms.name = "MY TAG"
SELECT wp_posts.post_name FROM wp_posts, wp_term_relationships, wp_terms, wp_term_taxonomy WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_terms.term_id = wp_term_taxonomy.term_id AND wp_term_taxonomy.term_taxonomy_id = wp_term_relationships.term_taxonomy_id AND wp_terms.name = "MY TAG"
-
Ответы только на основе кода редко соответствуют стандартам качества.Отредактируйте свой ответ и включите примечания/комментарии о том,как это решает исходную проблему,а также о том,как/где ее реализовать.Code only answers rarely meet quality standards. Please edit your answer and include notes / commentary on how this solves the original issue along with how / where to implement it.
- 2
- 2016-03-15
- Howdy_McGee
-
Это намного проще сделать с помощью WP_Query и отношенияtax_query AND,нет необходимости в чистом SQL.This is much more easily accomplished with WP_Query and a tax_query AND relationship, no need for raw SQL.
- 0
- 2020-01-30
- Drmzindec
Я пытаюсь показать список сообщений,относящихся к категории X и тегу Y. Я пробовал следующий код:
но он работает некорректно и возвращает все сообщения в объединении.
Хотел бы услышать ваше мнение