Добрый день, у меня вопрос следующего характера:
Custom meta поля для постов у меня храняться в базе в следующем виде:
meta_name meta_value
_my_meta a:2:{s:10:"low_author";s:42:"Хара В.Г., Марущенко В.С.";s:12:"authors_city";s:8:"Київ";}
для вывода этих полей, я пользуюсь функцией get_post_meta и на выходе получаю массив типа $my_meta[‘low_author’],$my_meta[‘low_authors_city’].
Сама задача 🙂
Нужно в get_posts например достать только те посты, для которых например $my_meta[‘low_authors_city’]==’Киев’.
Буду благодарен за любые подсказки.
P.S. Версия WP 2.9.2
http://codex.wordpress.org/Function_Reference/get_posts
http://codex.wordpress.org/Function_Reference/get_posts[/quote]
Ю.Б., я смотрел это в кодексе, но не понял как в моем случае указать meta_key, пробовал так – get_posts(‘meta_key=_my_meta[‘low_author’]&meta_value="Автор"’); но не работает.
Типа так
get_posts(‘meta_key=low_author&meta_value=Автор’);
либо через массив аргументов
$args = array(
‘meta_key’ => ‘low_authors_city’,
‘meta_value’ => ‘Киев’,
);
$posts = get_posts($args);
И не забыть вывести полученный массив 😉
🙂
это работает если мета поля записаны отдельно, воттак:
meta_name meta_value
meta_name1 value1
meta_name2 value2
таким образом на один пост например, несколько meta записей в таблице базы.
У меня же ситуация иная, на один пост много мета данных, но все они хранятся в одной записи под именем _my_meta а в самом поле meta_value в указанном ниже формате хранятся имена и значения данных.
meta_name meta_value
_my_meta a:2:{s:10:"meta_name1";s:42:"value1";s:12:"meta_name2";s:8:"value2";}
По этому указанный вами выше способ к сожалению не работает у меня.
Если в базе хранится php serialize, то mysql его не разберет на части (по крайней мере я не знаю способа), а выборки get_post() делаются средствами mysql.
угу… и за это спасибо, ато я также несмог найти как этот формат называется – serialize, попробую что-то иное придумать.
Я намедни с аналогичной задачкой боролся (не с WP, с serialize). Не придумал ничего лучше, чем загнать весь массив (слава богу, там всего 2.5 метра) в память и построчно-поэлементно подсчитывать, кто сколько раз встречается.