Поддержка → Поиск специалистов → Работа с переменными
Работа с переменными
-
что-то не работает. Убрал у себя
<?php query_posts("cat=190"); ?>
в итоге перестали отображаться посты из данной категории.
Потом решил переместить// Вызов query_posts() по выбранному значению if ( !empty($_POST['select']) ) { $selected_meta_value = _wp_specialchars(($_POST['select'])); query_posts("$query_string&meta_key=$custom_key&meta_value=$selected_meta_value"); }
вниз так как посчитал что логично сначала выбрать а потом применять функцию запроса
в итоге получил на странице это
// Вызов query_posts() по выбранному полю if ( !empty($_POST['select']) ) { $selected_meta_value = _wp_specialchars(($_POST['select'])); query_posts("$query_string&meta_key=$custom_key&meta_value=$selected_meta_value"); }
что-то не хватает:
вот мой исходный код, при котором сейчас есть выпадающий список, в котором отображаются метаданные и отображаются посты из рубрики 190:<?php // Имя произвольного поля $custom_key = 'reg'; // Вызов query_posts() по выбранному полю if ( !empty($_POST['select']) ) { $selected_meta_value = _wp_specialchars(($_POST['select'])); query_posts("$query_string&meta_key=$custom_key&meta_value=$selected_meta_value"); } // Выбор всех значений поля global $wpdb; $mykey_entries = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '$custom_key'"); ?> <?php if ( !empty($mykey_entries) ) : ?> <form method="post" id="order"> Выбрать: <select name="select" onchange='this.form.submit()' style="width:200px"> <?php foreach ( $mykey_entries as $mykey_entry ) : ?> <?php $selected = !strcasecmp($mykey_entry->meta_value, $selected_meta_value) ? ' selected="selected"' : ''; ?> <option value="<?php echo $mykey_entry->meta_value; ?>"<?php echo $selected; ?>><?php echo $mykey_entry->meta_value; ?></option> <?php endforeach; ?> </select> </form> <?php endif; ?> <?php query_posts("cat=190"); ?> <br /><br />
подскажите пожалуйста что здесь не так
что-то не хватает:
Боюсь, что не хватает понимания логики работы движка. query_posts() выбирает посты из базы по указанным критериям, Loop — выводит их.
Второй
query_posts()
отменяет действие первого. Выполняться должен один:<?php // Имя произвольного поля $custom_key = 'reg'; // Идентификатор рубрики $cat_id = 190; // Вызов query_posts() по выбранному полю if ( !empty($_POST['select']) ) { $selected_meta_value = _wp_specialchars(($_POST['select'])); query_posts("cat=$cat_id&meta_key=$custom_key&meta_value=$selected_meta_value"); } else { query_posts("cat=$cat_id"); } // Выбор всех значений поля global $wpdb; $mykey_entries = $wpdb->get_results("SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = '$custom_key'"); ?> <?php if ( !empty($mykey_entries) ) : ?> <?php $mykey_entries = array_intersect_key($mykey_entries, array_unique(array_map('serialize', $mykey_entries))); ?> <form method="post" id="order"> Выбрать: <select name="select" onchange='this.form.submit()' style="width:200px"> <option value="0">Все</option> <?php foreach ( $mykey_entries as $mykey_entry ) : ?> <?php $selected = !strcasecmp($mykey_entry->meta_value, $selected_meta_value) ? ' selected="selected"' : ''; ?> <option value="<?php echo $mykey_entry->meta_value; ?>"<?php echo $selected; ?>><?php echo $mykey_entry->meta_value; ?></option> <?php endforeach; ?> </select> </form> <?php endif; ?> <br /><br />
Ну дак цикл то у меня ниже есть, я его просто не показал в коде, так как он рабочий
Почему цикл рабочий не указан для истории? или он огромный? желательно полные самописные листинги указывать, а то получается проблему решишь и гуляй «вася», чтоб доступно и понятно было всем. Если кто не в курсе ранее созданные свои посты можно править.
Сергей вот как выглядит страничка http://os.pkrai.ru/katalog-predpriyatij-autsorserov/
Смотрите:
1. Выбор по полю все таки не производится, идет ошибка.
Т.е. что-то в коде нужно добавлять или менять.
2. В список попадают все значения, в т.ч. повторяющиеся. А как сделать чтобы отражались только уникальные значения?Исправил предыдущий фрагмент.
1. Оказывается, не было необходимости в$query_string
.
2. Добавлена фильтрация повторяющихся значений.
3. Идентификатор рубрики сделан параметром.Сергей!!!Спасибо!!!
Я про памятник уже говорил?
Все работает!!!
Все кто интересовался фильтрами на странице — вот готовый код.Сергей, как поставить вверху выпадающего списка «все», чтобы отменить действие фильтра при необходимости, а то приходится повторно страницу обновлять
Сергей, еще вопрос, а как сделать 2 фильтра: по разным полям.
Я тупо скопировал код ниже и заменил имя переменной, у меня появилось две формы, но работает только нижняя.1. Добавил вариант «Все» (сразу после
<select>
).
2. Со второй формой сложнее, надо подумать. Сложность в том, чтоquery_posts()
не поддерживает выбор по нескольким полям. Нужен прямой запрос или отдельный цикл для каждого поля. Полей всего два?Хм… и все скромно молчат о цене вопроса.
Так оно и бывает, когда альтруизм встречается с жадностью.
А вот интересно, сколько человеко-часов оставлено в этой теме?Переношу тему в раздел «Специалисты». Это я намекаю кагбэ 🙂
Хотелось бы спросить(Ю.Б. я выспался поверь мне)вот там Сергей приводил верху код , о его работе здесь речь не идет но хотелось бы знать:
вот например кусок кода Сергея
global $wpdb;
$mykey_entries = $wpdb->get_results(«SELECT meta_value FROM $wpdb->postmeta WHERE meta_key = ‘$custom_key'»);я же хочу прописать так
global $wpdbmax;
$mykey_entries = $wpdbmax->get_results(«SELECT meta_value FROM $wpdbmax->postmeta WHERE meta_key = ‘$custom_key'»);
сразу хочу пояснить, что в файле wp-db все подправил(как мог конечно)
$wpdbmax = new wpdbmax(DB_USER, DB_PASSWORD, DB_NAME1, DB_HOST); в конфиге соответственно прописал define(‘DB_NAME1’, ‘база2’); конечно же значение в конфиге осталось define(‘DB_NAME’, ‘база1’);
Вот $wpdbmax использует одного и того же пользователя, пароль, хост что и $wpdb, разница только в таблице, возможно ли что бы она читала с этой таблице, я поставил, много мучился над ошибками, но вроде сейчас нигде ошибки не выдает, файлы движка подправлены, но вот с этой таблицы база2 не читает, то же самое и с фуyкцией get-post и get-id (не буду расписывать тоже изменены мною и теперь существуют и разрешены get-postmax и get-idmax)Но что то не получается, не знаю может я не на верном пути, может действительно на пару дней бросить комп и поспать, как советовал Ю.Б. если что ткни меня где почитать, в русском кодексе не все переведены функции, а в английском запарился переводить.Не нужно править файлы движка. Практически для всего предусмотрены фильтры и действия. Если хотите задать свой вопрос — создайте, пожалуйста, отдельную тему.
Сергей, только сейчас вернулся, спасибо за добавленный выбор по критерию «все»! Все работает.
Полей всего два?
Да 2 поля, еще поле «napravl» аналогично уже сделанному «reg»
- Тема «Работа с переменными» закрыта для новых ответов.