WordPress에서 특정 태그/카테고리가 있는 게시물을 선택하는 방법
이것은 WordPress에서 구현된 MySQL에 대한 매우 구체적인 질문입니다.
특정 '태그'가 있고 특정 '카테고리'(모두 복수)에 속하는 게시물을 표시(선택)하는 플러그인을 개발하려고 합니다).
카테고리 및 태그 저장 방법 때문에 불가능하다고 들었습니다.
wp_posts
투고 이 포함되어 각 는 "wp_terms
에는 용어의 리스트(카테고리와 태그 모두)가 포함되어 있습니다.에는 TERM_MON_MONTERM_MONTERM_MONTERM_MONTDA가 .아이디wp_term_taxonomy
에는 ID 및 각 ID에 대한 분류법 정의(카테고리 또는 태그)가 있습니다.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
'programing' 카테고리의 다른 글
대응 - 하위 구성 요소가 값을 상위 양식에 다시 보낼 수 있습니까? (0) | 2023.03.16 |
---|---|
응용 프로그램 구성 설정 저장 (0) | 2023.03.16 |
React-redux는 업데이트를 저장하지만 React는 저장되지 않음 (0) | 2023.03.16 |
WordPress: post_parent 제목 가져오기 (0) | 2023.03.16 |
배열 내의 MongoDB 데이터베이스 이름 변경 필드 (0) | 2023.03.16 |