WordPress запрос с помощью настраиваемых полей - PullRequest
1 голос
/ 28 марта 2011

Мои сообщения имеют несколько настраиваемых полей и в настоящее время упорядочены по "over-lenght"

У меня есть еще одно настраиваемое поле под названием "over-lenghtin".

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

Мне интересно, как я могу изменить свой запросили добавить функцию для выполнения этого?

Вот по текущему запросу

$loop = new WP_Query( array ( 'post_type' => 'new', 'orderby' => 'meta_value_num', 'meta_key' => 'over-length', 'meta_query' => array( array( 'key' => 'over-make', 'value' => 'Doral', 'compare' => 'LIKE') ) ) );

Хорошо, поэтому я переписал по запросу, чтобы использовать $ wpdb-> get_results, но я все еще немногозапутался в том, как упорядочить по двум различным настраиваемым полям.

Вот мой новый запрос:

$wpdb->get_results("SELECT * FROM $wpdb->posts, wp_postmeta  WHERE wp_posts.ID = wp_postmeta.post_id AND wp_posts.post_status = 'publish' AND wp_posts.post_type = 'new' AND wp_postmeta.meta_value = 'Doral' ORDER BY");

Теперь мне нужно упорядочить по моим настраиваемым полям «over-length», а затем «over-lengthin '

Кажется, сейчас это работает, вот мой последний запрос:

$wpdb->get_results("SELECT * FROM $wpdb->posts 
LEFT JOIN $wpdb->postmeta AS overlength ON(
$wpdb->posts.ID = overlength.post_id
AND overlength.meta_key = 'over-length'  
)
LEFT JOIN $wpdb->postmeta AS overlengthin ON(
$wpdb->posts.ID = overlengthin.post_id
AND overlengthin.meta_key = 'over-lengthin'  
)
LEFT JOIN $wpdb->postmeta AS overmake ON(
$wpdb->posts.ID = overmake.post_id
AND overmake.meta_key = 'over-make'  
)
WHERE wp_posts.post_status = 'publish' AND wp_posts.post_type = 'new' AND overmake.meta_value = 'Doral' ORDER BY 0+overlength.meta_value DESC, 0+overlengthin.meta_value  DESC");

1 Ответ

1 голос
/ 28 марта 2011

Честно говоря, если речь идет о нескольких настраиваемых полях, самое простое решение - использовать $wpdb->get_results вместо WP_Query.

Вы можете получить запрос, так как он выполняется в данный момент с помощью

echo $GLOBALS['wp_query']->request;

Затем просто обновите SQL и выполните шаги, чтобы создать пересмотренный цикл отсюда:

...