Следующий запрос SQL в PHP должен отображать результаты на основе записей заголовка и тега. Теги находятся в таблице wp_terms и сообщениях в wp_posts. В середине у нас есть wp_term_relationships, чтобы связать все.
В wp_posts
поле, которое мы хотим, это post_id
В wp_term_relationships
поле object_id
должно соответствовать идентификатору записи, а term_taxonomy_id
должно соответствовать term_id
.
В wp_terms
term_id
должно соответствовать term_taxonomy_id
в wp_terms_relationships
. Затем нам нужно поле из wp_terms
, которое называется name
для целей поиска.
На данный момент этот код не включает термины в поиске.
SELECT ID, post_name, post_title, post_date
FROM wp_posts
JOIN wp_term_relationships
ON object_id = wp_posts.id
LEFT JOIN wp_terms
ON term_id = wp_term_relationships.term_taxonomy_id
WHERE
wp_posts.post_type = 'post' AND wp_posts.post_status = 'publish'
AND (wp_posts.post_title LIKE '%$my_text%' OR wp_terms.name LIKE '%$my_text%')"
Как нам заставить это работать.
UPDATE
Что должно произойти, так это то, что поиск должен возвращать результаты, основанные на заголовке или теге записи. Проблема в том, что теги post считаются терминами и помогают в другой таблице, для которой требуется треть, чтобы найти соответствующий идентификатор.
Я попытаюсь нанести на карту соответствующий, но.
TABLE: wp_posts
==================================================================
post_id ==== post_title
==================================================================
TABLE wp_terms
==================================================================
term_id ==== name
==================================================================
TABLE wp_term_relationships
==================================================================
object_id ==== term_taxonomy_id
==================================================================
Итак, мы используем wp_term_relationships, чтобы узнать, какие идентификаторы терминов (term_taxonomy_id
) отражают, какие сообщения (object_id
);
Надеюсь, это поможет
Изображение структуры таблицы
