programing

WordPress에서 특정 태그/카테고리가 있는 게시물을 선택하는 방법

css3 2023. 3. 16. 21:43

WordPress에서 특정 태그/카테고리가 있는 게시물을 선택하는 방법

이것은 WordPress에서 구현된 MySQL에 대한 매우 구체적인 질문입니다.

특정 '태그'가 있고 특정 '카테고리'(모두 복수)에 속하는 게시물을 표시(선택)하는 플러그인을 개발하려고 합니다).

카테고리 및 태그 저장 방법 때문에 불가능하다고 들었습니다.

  1. wp_posts투고 이 포함되어 각 는 "
  2. wp_terms에는 용어의 리스트(카테고리와 태그 모두)가 포함되어 있습니다.에는 TERM_MON_MONTERM_MONTERM_MONTERM_MONTDA가 .아이디
  3. wp_term_taxonomy에는 ID 및 각 ID에 대한 분류법 정의(카테고리 또는 태그)가 있습니다.
  4. wp_term_relationships이 있다

'카테고리1' 카테고리에 속하는 '핵' '거래' 태그가 있는 모든 게시물을 얻으려면 어떻게 해야 합니까?

내가 널 오해했어.핵이나 거래를 원하는 줄 알았는데아래는 Nuclear와 Deals만 제시합니다.

select p.*
from wp_posts p, wp_terms t, wp_term_taxonomy tt, wp_term_relationship tr,
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2

where p.id = tr.object_id and t.term_id = tt.term_id and tr.term_taxonomy_id = tt.term_taxonomy_id

and p.id = tr2.object_id and t2.term_id = tt2.term_id and tr2.term_taxonomy_id = tt2.term_taxonomy_id

and p.id = tr3.object_id and t3.term_id = tt3.term_id and tr3.term_taxonomy_id = tt3.term_taxonomy_id

and (tt.taxonomy = 'category' and tt.term_id = t.term_id and t.name = 'Category1')
and (tt2.taxonomy = 'post_tag' and tt2.term_id = t2.term_id and t2.name = 'Nuclear')
and (tt3.taxonomy = 'post_tag' and tt3.term_id = t3.term_id and t3.name = 'Deals')

이것을 시험해 보세요.

select p.*
from wp_posts p, 
wp_terms t, wp_term_taxonomy tt, wp_term_relationship tr
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship tr2

where p.id = tr.object_id
and t.term_id = tt.term_id
and tr.term_taxonomy_id = tt.term_taxonomy_id

and p.id = tr2.object_id
and t2.term_id = tt2.term_id
and tr2.term_taxonomy_id = tt2.term_taxonomy_id

and (tt.taxonomy = 'category' and tt.term_id = t.term_id and t.name = 'Category1')
and (tt2.taxonomy = 'post_tag' and tt2.term_id = t2.term_id and t2.name in ('Nuclear', 'Deals'))

기본적으로는 용어, 용어_택소노믹, 용어_관계라는 두 개의 관련 하위 테이블을 사용하고 있습니다.한 복사본은 '카테고리1' 제한을 적용하고 다른 사본은 '핵' 또는 '거래' 제한을 적용합니다.

그나저나 이게 무슨 프로젝트야? 핵 거래에 관한 게시물들이야?우릴 정부 명단에 올리려는 거야?;)

정말 역겨운 DB 구조군요.

어쨌든 다음과 같은 작업을 수행합니다(참조하는 것이 좋습니다만, 필요에 따라서 Join으로서 재기입할 수 있습니다.대부분의 쿼리 아나라이저에서는 같은 쿼리 플랜으로 정리할 수 있습니다.어떤 식으로든 더 많은 저글링을 해야 할 것 같은데...

SELECT *
  FROM wp_posts p
 WHERE EXISTS( SELECT *
                 FROM wp_term_relationship tr
                WHERE tr.object_id = p.id
                  AND EXISTS( SELECT *
                                FROM wp_term_taxonomy tt
                               WHERE tt.term_taxonomy_id = tr.term_taxonomy_id
                                 AND tt.taxonomy         = 'category'
                                 AND EXISTS( SELECT *
                                               FROM wp_terms t
                                              WHERE t.term_id = tt.term_id
                                                AND t.name    = "Category1" 
                                           )
                            )
                  AND EXISTS( SELECT *
                                FROM wp_term_taxonomy tt
                               WHERE tt.term_taxonomy_id = tr.term_taxonomy_id
                                 AND tt.taxonomy         = 'post_tag'
                                 AND EXISTS( SELECT *
                                               FROM wp_terms t
                                              WHERE t.term_id = tt.term_id
                                                AND t.name    = "Nuclear" 
                                           )
                                 AND EXISTS( SELECT *
                                               FROM wp_terms t
                                              WHERE t.term_id = tt.term_id
                                                AND t.name    = "Deals" 
                                           )
                            )
            )

그래서 저는 WordPress DB에서 두 가지 옵션을 모두 사용해 보았습니다.게시물에서 "Perl"과 "Programming"이라는 태그가 붙은 "Tech"라는 카테고리를 찾았습니다.

가 처음 선택문에 쉼표를 넣었을 때 에릭이 작동했어3개의 레코드를 반환했습니다.문제는 'post_tag'를 찾는 섹션이 실제로 OR 옵션으로 기능하고 있다는 것입니다.내 게시물 중 하나는 둘 다 아닌 하나의 태그만 있었다.또한 SELECT DISTINT를 만드는 것도 좋을 것 같습니다.

매트 버전을 써봤는데 빈 세트가 계속 반환됐어요.저는 그것을 가지고 "잡으려고" 할 수도 있어요.

고마워 @Eric 효과가 있어!향후 참조를 위해 몇 가지 코드 수정 사항:

  • 첫 번째 선택 문장은 wp_term_relation tr2 뒤에 혼수 상태를 놓친다.
  • 동일한 선택 상태에서 다음을 변경해야 합니다.
wp_terms t2, wp_term_taxonomy tt2, wp_term_relationship 

tr2

그래야 한다

wp_terms t3, wp_term_taxonomy tt3, wp_term_relationship 

tr3

정말 좋은 대답이야..많은 도움이 되었습니다.

훌륭한 BCOZ. 그것은 나에게 나의 복잡한 쿼리를 만들기 위한 기본적인 접근을 주었다!

나 같은 준비 완료 사용자용 작은 수정 1개:)

"wp_term_relationship"은 "intern't exist error"를 나타냅니다.wp_term_relations는 올바른 테이블 이름이기 때문에 사용합니다.

고마워 에릭

언급URL : https://stackoverflow.com/questions/28196/how-to-select-posts-with-specific-tags-categories-in-wordpress