Как сортировать по метазначению?

Как я могу сортировать по метазначению? В мета-значении у меня есть «цена» (float).

Я делаю этот запрос, но всегда получаю

Извините, нет записей, удовлетворяющих вашим условиям.

$posts = query_posts( $query_string . '&orderby=meta_value_num&meta_key=Notes&meta_value_num=price&order=ASC'); 

Редактировать:

 meta_value value: "a:6:{s:5:"width";s:3:"580";s:6:"**price**";s:3:"99"". 

Является ли это возможным?

Solutions Collecting From Web of "Как сортировать по метазначению?"

Ваше метазначение представляет собой сериализованный массив.

То, что вы просите, чтобы получить для вас все сообщения с мета с ключом 'Notes' и стоимость 'price' . Ваша мета-стоимость не является 'price' , хотя она

 a:6:{s:5:"width";s:3:"580";s:6:"price";s:3:"99" 

Первое, что вам нужно сделать, чтобы заказать по цене, – это начать использовать полезную структуру ключей / значений. Я предполагаю, что вы используете что-то вроде этого для хранения метаданных:

 update_post_meta( $post_id, 'foobar', array( 'width' => 580, 'price' => 99 ), true ); 

когда ваши потребности указывают, что вам нужно сделать что-то вроде этого:

 update_post_meta( $post_id, 'width', 580, true ); update_post_meta( $post_id, 'price', 99, true ); 

После того, как вы сохраните свои мета значения в этом формате, вы захотите использовать meta_query :

 global $query_string; parse_str( $query_string, $my_query ); $my_query['meta_query'] = array( array( 'key' => 'price', 'value' => 0, 'type' => 'SIGNED', 'compare' => '>=', ) ); $my_query['orderby'] = 'meta_value_num'; $my_query['order'] = 'ASC'; query_posts( $my_query ); 

Мета-запросы являются новыми в WordPress 3.1, поэтому для этого вам понадобится хотя бы эта версия.

Дайте мне знать, если у вас возникнут проблемы!

Может быть, это решение может вам помочь, мне нужно было контролировать сортировку сообщений по meta_key и meta_value по каждому запросу, поэтому я создал фильтр таким образом:

 /** * Filter for every the loop request * * @param mixed $request */ function request( $request ) { $option = $_REQUEST['mysortoption'] ? $_REQUEST['mysortoption'] : 'default'; switch ( strtolower($option) ) { case 'most-viewed': $request['meta_key'] = 'most-viewed'; $request['orderby'] = "meta_value"; break; case 'hot': $request['orderby'] = 'comment_count'; break; default: break; } return $request; } add_filter('request', 'request'); 

Хорошо, это решение является частью большого требования, но то, что мы делаем здесь, просто перехватывает каждый запрос, убедитесь, что есть специальный параметр сортировки, который я добавил ранее, и применил соответствующий сортировку по мета.

Надеюсь, это вам поможет.