Вы должны дать нам немного больше деталей.Вы получаете ошибку?Если нет, то, что вы ожидаете увидеть, и что вы на самом деле видите?
Одна из возможных проблем заключается в том, что вы передаете "Price High-Low", даже если они выбирают "Price Low-High".Эта строка:
<option value="Price High-Low" <?php echo ($resultsorder == 'Price High-Low')? 'selected="selected"':''; ?>>Price Low-High</option>
неверна.
Редактировать:
Хорошо, я создал простую тему, которая дублирует то, что вам кажетсяиметь.В functions.php
у меня есть:
<?php
add_action('init', 'create_listing_post_type');
function create_listing_post_type() {
register_post_type('listing', array(
'labels' => array(
'name' => 'Listings',
'singular_name' => 'Listing',
'add_new_item' => 'Add a listing',
'edit_item' => 'Edit listing',
'new_item' => 'Add a listing',
'search_items' => 'Find a listing',
'not_found' => 'No listing found',
'not_found_in_trash' => 'No listing found in the trash'
),
'public' => true,
'supports' => array('title', 'editor', 'custom-fields')
));
}
?>
Я зашел на экран администратора и добавил три списка:
- Листинг А, с адресом «Швейцария» и ценой10000.
- Листинг B, с адресом «Австралия» и ценой 50000.
- Листинг C, с адресом «Великобритания» и ценой 20000.
Затем я добавил новый шаблон в showlistings.php
на основе вашего кода:
<?php
/**
* Template Name: showlistings
*/
get_header();
//$resultsorder = 'Price High-Low';
//$resultsorder = 'Price Low-High';
$resultsorder = 'a-z';
switch ($resultsorder) {
case "Price High-Low":
$metakey = 'price';
$order = 'DESC';
$orderby = 'meta_value_num';
break;
case "Price Low-High":
$metakey = 'price';
$order = 'ASC';
$orderby = 'meta_value_num';
break;
case "a-z":
$metakey = 'address';
$order = 'ASC';
$orderby = 'meta_value';
break;
}
$wpq = array (
'post_type' =>'listing',
'meta_key' => $metakey,
'orderby' => $orderby,
'order' => $order);
$listings = new WP_Query($wpq);
foreach( $listings->posts as $listing) {
echo $listing->post_title;
echo '<br />';
}
get_footer(); ?>
Хорошая новость заключается в том, что ваш код работает для меня: поскольку я изменил значение $resultsorder
(изменив закомментированную строку), я получил ожидаемые результаты.
Так что осталось проверить несколько вещей:
- Значение
$resultsorder
установлено так, как вы ожидаете (т.е.отправляется ли он из вашей формы и заполняется ли он из переменной $_POST
? поместите echo "\$resultsorder = $resultsorder";
где-нибудь в выходной файл для проверки. - Сохраняются ли значения
price
способом, который MySQL может анализироватьих как числа? Например, «10000», а не (скажем) «$ 10000». WordPress имеет MySQL преобразовать числа в строки, добавив 0 ких - если они не могут быть проанализированы как числа, они все вернут 0, и любое упорядочение будет бессмысленным. - Заполнены ли переменные
$alllistings
и $_ids
, как вы ожидаете (то есть ожидаемыеветвь вашей if
- then
логики выполняется?Опять же, использование echo
(или print_r
) поможет вам проверить значения. - Точно ли совпадают ваши строковые литералы?Возможно, стоит проверить, что нет никаких тонких различий между значениями вашей формы и значениями, которые вы проверяете в своем PHP.У вас могут быть похожие на вид, но разные символы или небольшие различия в регистре (например, «Цена Хай-Лоу» и «Цена Хай-Лоу»)
Я бы разбил ваше расследование.Убедитесь, что отправка формы работает, что аргументы запроса установлены правильно, а затем, что результаты соответствуют ожидаемым.