Mysql SELECT настраиваемые поля (post_meta) для настраиваемого типа записи - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь запросить сообщения Wordpress.

Я создал пользовательский тип записи People. Каждая запись people имеет настраиваемые поля name, age, location, birthday и другие. Пользовательские поля создаются с помощью плагина Advanced Custom Fields.

Жезл, чтобы запросить все пользовательские поля для People пользовательский тип записи.

Я хочу вывод, подобный этому:

+----+-------------+-----------+--------+-----------------------------+----------+-----+
| id | post_title  | name          | age    | location                    | birthday   | 
+----+-------------+-----------+--------+-----------------------------+----------+-----+
|  1 | SAMPLE      | some_name     | XX     | sample_location             | 10/07/1980 |
|  1 | SAMPLE      | some_name     | XX     | sample_location             | 10/07/1980 |
|  1 | SAMPLE      | some_name     | XX     | sample_location             | 10/07/1980 |
|  1 | SAMPLE      | some_name     | XX     | sample_location             | 10/07/1980 |
|  1 | SAMPLE      | some_name     | XX     | sample_location             | 10/07/1980 |
+----+-------------+-----------+--------+-----------------------------+----------+-----+

Какой будет правильный синтаксис для этого?

Я пытался:

SELECT * 
FROM  `wp_posts` ,  `wp_postmeta` 
WHERE  `post_type` =  'people'

Но в этом списке перечислены все обычные поля WordPress.

Может кто-нибудь помочь с этим?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вот решение, у кого может возникнуть такой же вопрос!

SELECT posts_people.ID AS people_ID,
   posts_people.post_title AS people_post_title,
   (select meta_value from wp_postmeta where meta_key = 'name' AND post_id = posts_people.ID) as name,
   (select meta_value from wp_postmeta where meta_key = 'age' AND post_id = posts_people.ID) as age,
   (select post_title from wp_posts where ID = SUBSTRING_INDEX(SUBSTRING_INDEX((select meta_value from wp_postmeta where meta_key = 'location' AND post_id = posts_people.ID),'";',1),':"',-1)) as location,
   (select meta_value from wp_postmeta where meta_key = 'birthday' AND post_id = posts_people.ID) as stelexos_kinito
FROM wp_posts AS posts_people
WHERE post_type = 'people' and post_status = 'publish'
0 голосов
/ 06 января 2019

Во-первых, вы выбираете одну из двух таблиц, не объединяя и не устанавливая отношения между ними (это должно быть своего рода отношение для объединения каждого набора данных в другой)

Вы можете сделать что-то вроде этого:

SELECT t1.*, t2.* 
FROM posts as t1 
INNER JOIN postmeta as t2 
ON t1.ID = t2.post_id 
WHERE t1.post_type = 'people' 
AND t2.meta_key = 'name'

** ПРИМЕЧАНИЕ: вы должны заметить имена таблиц и при необходимости заменить в запросе также имена столбцов в таблице.

...