Произвольные таксономии — выпадающий список стран, городов и дат WordPress?

Добрый день, дорогие друзья!

Подскажите, пожалуйста, мне советом: как реализовать выпадающий список стран, городов и дат.
Собственно, я реализовала страны, города, даты, но вопрос:

1. Выпадающий список стран, выбираем, например, Россия, в соседнем окне выпадают города, например, Москва, в последнем окне - месяца, например, только активные (например, экскурсии есть только в январе, марте, августе, а остальные месяцы не показываются).

2. Как реализовать, если в форме поиска при нажатии просто кнопки Найти без применения фильтрации, выходят все записи из Стран, Городов, Месяцев.

3. Плагины не использую, сделала через добавление произвольных записей, как Страны, Города, Месяцы, только по ним фильтры. Список стран небольшой, всего 10, городов порядка 30, месяцев 12, года не добавляются.

Большой спасибо!
  • Вопрос задан
  • 1393 просмотра
Пригласить эксперта
Ответы на вопрос 2
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Страны и города сделайте вложенной таксономией, даты - метаданными.
Дальше вопрос будет в том, чтобы сформировать урл со всеми выбранными параметрами, а потом через хук pre_get_posts забираете эти параметры с помощью get_query_var() и модифицируете основной запрос (вводите tax_query для стран/городов и meta_query для дат).
Ответ написан
Комментировать
99WEBDEV
@99WEBDEV Автор вопроса
Спасибо, Игорь, за ответ, у меня такой вариант:

<script type="text/javascript">
// Countries
var country_arr = new Array("Россия", "Украина", "Казахстан");

// States
var s_a = new Array();
s_a[0] = "";
s_a[1] = "Москва|С.-Петербург";
s_a[2] = "Киев|Одесса";
s_a[3] = "Астана";
s_a[4] = "Направление";


function populateStates(countryElementId, stateElementId) {

    var selectedCountryIndex = document.getElementById(countryElementId).selectedIndex;

    var stateElement = document.getElementById(stateElementId);

    stateElement.length = 0; // Fixed by Julian Woods
    stateElement.options[0] = new Option('Направление', '');
    stateElement.selectedIndex = 0;

    var state_arr = s_a[selectedCountryIndex].split("|");

    for (var i = 0; i < state_arr.length; i++) {
        stateElement.options[stateElement.length] = new Option(state_arr[i], state_arr[i]);
    }
}

function populateCountries(countryElementId, stateElementId) {

    var countryElement = document.getElementById(countryElementId);
    countryElement.length = 0;
    countryElement.options[0] = new Option('Страна', '-1');
    countryElement.selectedIndex = 0;
    for (var i = 0; i < country_arr.length; i++) {
        countryElement.options[countryElement.length] = new Option(country_arr[i], country_arr[i]);
    }

    if (stateElementId) {
        countryElement.onchange = function () {
            populateStates(countryElementId, stateElementId);
        };
    }
}

</script>


А сама форма:

<form action="<?php echo home_url ?>" method="get">
                  <label for="locations" ></label>
                  <select id="country" name="country"></select>
                   <label for="city"></label>
                  <select name="city" id="state"></select>

                   <label for="dates"></label>
                  <select name="dates" id="dates">
                   <option value="all" selected="selected">Выберите даты</option>
                    <option value="January">Январь</option>
                    <option value="February">Февраль</option>
                     <option value="March">Март</option>
                      <option value="April">Апрель</option>
                      <option value="May">Май</option>
                      <option value="June">Июнь</option>
                      <option value="July">Июль</option>
                       <option value="August">Август</option>
                       <option value="September">Сентябрь</option>
                        <option value="October">Октябрь</option>
                        <option value="November">Ноябрь</option>
                        <option value="December">Декабрь</option>
                  </select>
                  <input type="submit" name="submit" id="submit" value="Найти"></form>


И, добавляя пост, например, Медицинская выставка, Россия, Москва, Октябрь - мне поиск выдает, а вот как сделать, чтобы месяц Октябрь только активным в данном случае, не получается.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы