WP_QUERY, пользовательская сортировка и пользовательский фильтр
Вопрос
Возможно ли использование WP_QUERY для возврата фильтрованного списка элементов на основе следующих набора критериев? Кажется, я борюсь, так как есть многочисленные запросы против пользовательских полей.
Select all posts that are of type business_club (post_type)
Where the post has a zone of 'Asia' (meta_value)
Order by country ASC (meta_value)
then by town ASC (meta_value)
then by title (wp value)
Любая помощь очень ценится.
Решение 3
Путь обойти это было создать пользовательский запрос. Более подробную информацию об этом можно посмотреть на кодексе WordPress At http://codex.wordpress.org/displaying_posts_using_a_custom_select_query.
Мой последний код выглядел следующим образом
<?php
$row = 0;
$zone = $_GET['zone'];
if (!$zone) $zone = "United Kingdom";
?>
<table class="formattedTable" cellspacing="1" cellpadding="0">
<tr>
<th width="140">Country</th>
<th width="140">Town</th>
<th>Club</th>
</tr>
<?php
$query = "
SELECT
posts.*
FROM
$wpdb->posts posts
INNER JOIN
$wpdb->postmeta meta1 ON posts.ID = meta1.post_ID
INNER JOIN
$wpdb->postmeta meta2 ON posts.ID = meta2.post_ID
INNER JOIN
$wpdb->postmeta meta3 ON posts.ID = meta3.post_ID
WHERE
posts.post_type = 'club' AND
posts.post_status = 'publish' AND
meta1.meta_key = '_club-zone' AND
meta1.meta_value = '$zone' AND
meta2.meta_key = '_club-country' AND
meta3.meta_key = '_club-town'
ORDER BY
meta2.meta_value,
meta3.meta_value,
posts.post_title";
$posts = $wpdb->get_results($query, object);
if ($posts)
foreach($posts as $post)
{
global $post;
setup_postdata($post);
echo '<tr class="' . ($row % 2 == 0 ? 'odd' : 'even') . '">';
echo '<td>' . get_post_meta(get_the_ID(), '_club-country', true) . '</td>';
echo '<td>' . get_post_meta(get_the_ID(), '_club-town', true) . '</td>';
echo '<td><a href="' . get_permalink(get_the_ID()) . '">' . get_the_title() . '</a></td>';
echo '</tr>';
$row++;
}
?>
</table>
Другие советы
Вы пробовали что -то вроде этого:
$loop = new WP_Query( array(
'post_type' => 'business_club',
'meta_value' => 'United Kingdom',
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_key' => 'zone'
) );
while ( $loop->have_posts() ) : $loop->the_post();
Я еще не знаю, сможете ли вы сделать затем заказ городок а также заглавие.
Если все результаты имеют одинаковую зону, зачем вам заказать по зоне?
Насколько я знаю, вы не можете включить два meta_keys в один запрос. Таким образом, вам придется написать запрос, чтобы вернуть результаты, заказанные заголовком, сохранить их в массиве, а затем привести массив в нужный заказ, который вам нужен с помощью PHP.