Всем привет. Пишу php функцию на вордпресс.
Суть в том, что пользователь выбирает в выпадающем списке свой город. Выбранный город записывается в глобальную переменную вордпресса в сессию для того, чтобы после перезагрузки страницы отобразить посты, метка которого соответствует выбранному городу.
После выбора пункта должна просто обновиться страница и вместо "Выбор города" должно появиться имя выбранного города. На его основе я буду отображать посты только с меткой этого города вот таким способом:
<?php $page = (get_query_var('paged')) ? get_query_var('paged') : 1; ?>
<?php if(have_posts()) : query_posts('category_name=news&numberposts=0&paged='.$page.'&tag='.get_query_var($vibor_gor[0])); while(have_posts()) : the_post(); ?>
...
<?php endwhile; ?>
<?php endif; wp_reset_query(); ?>
Для наглядности посмотрите картинку ниже.
Функция должна отслеживать изменение поля select
и записывать его значение в глобальную переменную в сессию.
Саму функцию пишу в файле темы function.php
Вот код:
function select_city() {
session_start(); //открываю сессию (может быть открываю не там)
global $vibor_gor; //объявляю глобаньную переменную
$vibor_gor = array(); //говорю что эта переменная массив
$tags = get_tags(); //получаю массив существующих тегов
foreach ($tags as $tag){
array_push($vibor_gor, $tag->name); //циклом вытягиваю имена тегов
}
if(!empty($_SESSION['sesgor'])) //если в нем что-то есть
{
$vstavka = $_SESSION['sesgor'];
}
else $vstavka= "Выбор города"; //если пользователь еще не выбрал город, то выводим это
$html = '<select class="vibor_gor" name="vibor_gor" onchange="location.reload()">
<option disabled selected value>'.$vstavka.'</option>'; //первая опция просто для вида, что тут можно выбарть город
foreach ($vibor_gor as $value){
$html .= "<option value='{$value}'>{$value}</option>"; //заполняем все опции нашими тегами городов
array_push($_SESSION['sesgor'], $value); //тут я пытаюсь заполнить массив в сессии нашими городами
}
$html .= '</select>';
echo $html;
};
Проблема в том, что после выбора города и обновления страницы значение select
либо остается "Выбор города", либо "Array", либо последним в списке массива, а именно "Старый Оскол", либо вообще пустым. Пробовал по разному, но всегда не то что нужно.
Пробовал искать плагин для выбора городов. То что нужно - нет, или не нашел. Если хотите - используйте этот код для написания такового плагина на вордпресс. Очень будет востребован.
Сразу несколько проблем.
session_start() лучше использовать в самом начале скрипта, т.к. не понятно когда запустится ваша функция, сколько раз она запустится, и запустится ли вообще. А сессия - это глобальный массив, и по-хорошему должен быть доступен везде и всегда.
Вы хотите запомнить в сессии выбор пользователя, но сохраняете значение на этапе формирования формы, а не при её сабмите. В скрипте, который вы здесь представили, вы просто заполняете в сессию все города, которые у вас есть, отсюда и ARRAY
в качестве вабранного элемента (т.е. в сесии действительно хранится массив).
В итоге, вам нужно сохранять сессию, когда вы уже получили что-то от юзера. Т.е. где-то внутри if (have_posts())
нужно вытащить значение, которое выбрал пользователь и сохранить его в сессию. Не знаю как точно работает WordPress, но подозреваю, что как-то так:
$_SESSION['sesgor'] = get_query_var($vibor_gor[0]));
Виртуальный выделенный сервер (VDS) становится отличным выбором
DatePicker создается следующим кодом:
Я новичок в ДБ2 и сходу натолкнулся на проблемы с подключениемИтоговая цель, надо подключиться к DB2 из php посредством odbc
Существует ли класс php для красивого форматирования JSON строки? Json получается очень большой и если записать в файл одной строкой, то будет...
Всем приветЕсть форма на сайте, в которую человек вбивает имя и телефон, дальше данные передаются по апи, но в файле записей появляются строчки...