카테고리 및 태그별로 게시물을 쿼리하는 방법은 무엇입니까?


11

카테고리 X 및 태그 Y와 관련된 게시물 목록을 표시하려고합니다. 다음 코드를 시도했습니다.

$args = array(
    'posts_per_page' => 4,
    'tag_id' => $tag_id,
    'cat' => $cat_id,
);
query_posts($args);

그러나 제대로 작동하지 않으며 co \ ategory의 모든 게시물을 반환합니다.

당신이 가진 통찰력을 듣고 싶습니다


query_posts () 사용하면 범주 또는 태그 만 사용할 수 있다고 생각합니다. 확실하지 않지만 함수의 사용이 올바르게 작동하지만 원하는 작업을 수행하지 않는 것으로 제한 될 수 있습니다.
hakre

답변:


19

편집 : 카테고리 및 태그 교차를 쿼리하는 올바른 방법은 아래를 참조하십시오.

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;

3

나는 이것이 다른 곳에서 주석 처리 된 WordPress의 버그라고 생각합니다 .ID 대신 태그 이름을 사용해보십시오.

$args = array(
    'posts_per_page' => 3,
    'tag' => 'review',
    'cat' => 9,
);
query_posts($args);

이름에 여러 단어가 포함 된 태그가 어떻게되는지 잘 모르는 방법을 알려주십시오.


2

나는이 같은 문제에 걸려 MySQL 요청을함으로써 해결했다.

간단히 말해 : get_post ($ args)는 category = MyCategory 또는 tag = MyTag 를 가진 게시물을 반환합니다 .

원하는 것은 ORAND 로 변경하는 것 입니다.

내 논리는 MySQL 쿼리를 사용하는 것입니다.

  • 쿼리 1 = 범주 MyCat를 가진 모든 게시물 선택
  • 검색어 2 = 태그가 MyTag 인 모든 게시물 선택
  • 마지막으로 : 조회 1 및 조회 2에있는 모든 게시물을 선택하십시오.

query_post () 대신 wpdb 를 사용 했습니다 .

약간의 코드 (카테고리가 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);

이것은 더러운 방법이지만 도움이되기를 바랍니다.


7
이 훨씬 더 쉽게 달성되는 WP_Querytax_query와의 관계 , 원시 SQL에 대한 필요가 없습니다.
Milo

이를 위해 WordPress에서 원시 쿼리를 수행 할 필요는 없습니다.
Drmzindec

2

이 코드는 작동합니다 :

$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 );

-1
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"

2
코드 답변 만 품질 표준을 충족하는 경우는 거의 없습니다. 답변을 수정하고 이것이 어떻게 원래 문제를 해결하는 방법에 대한 메모 / 주석과 구현 방법 / 위치를 포함하십시오.
Howdy_McGee

이는 WP_Query와 tax_query AND 관계를 사용하여 훨씬 쉽게 수행 할 수 있으며 원시 SQL이 필요하지 않습니다.
Drmzindec
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.