• Делаю поиск по типам постов, вывожу в форме чекбоксы с названиями типов постов и хочу сделать, чтобы выбранные пользователем при поиске чекбоксы сохранялись при нажатии на кнопку «поиск». Сделать это у меня получается следующим образом:

    <input type=»checkbox» name=»post_type» value=»page»
    <?php if(isset($_GET[‘post_type’])) echo ‘ checked=»checked»‘; ?> >Page<br>

    <input type=»checkbox» name=»post_type» value=»post»
    <?php if(isset($_GET[‘post_type’])) echo ‘ checked=»checked»‘; ?> >Post<br>

    То есть, я использую фунцию «cheched()» и чекбоксы действительно сохраняются. Вот только проблема в том, что если я выберу чек-бокс «page» и буду искать только по страницам сайта, то на странице результатов поиска будет выбран так же чекбокс «post», ведь я задаю параметр — если метод GET используется для поиска по «post_type», тогда checked=»checked», что весьма логично.
    Вот только как мне это построить таким образом, чтобы только выбранный изначально чекбокс был отмечен на странице результатов поиска?

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Модератор Юрій

    (@yube)

    я использую фунцию «cheched()»

    Что? Где?

    чтобы только выбранный изначально чекбокс был отмечен

    Проверять не только существование параметра, но и его значение:
    if ( isset($_GET[‘post_type’]) and $_GET[‘post_type’] == 'page' )

    @yube
    «cheched()» — я имел ввиду, конечно же, функцию «checked()».
    Большое спасибо, это работает, но если перед нажатием кнопки «поиск» я отмечу оба типа записей (page и post), то при переходе на страницу результатов чекбокс будет отмечен только один из двух, но поиск будет производиться по двум типам постов. Почему так происходит?

    ну так покажите ваш обработчик.

    Модератор Юрій

    (@yube)

    то при переходе на страницу результатов чекбокс будет отмечен только один из двух

    А как Вы себе представляете одновременно два разных значения у одной переменой?

    Используйте массив (name="post_type[]"), тогда можно много «одноименных» крыжиков передать из html в php.

    но поиск будет производиться по двум типам постов.

    «Мистика!»- как говорила моя начальница времен работы на ВЦ 🙂

    И не надо без особой нужды тегать по нику (п.13 Правил)

    Большое спасибо за ответ, я пробовал массив name="post_type[]", да, конечно поиск производится по двум типам постов только если указать "post_type[], но тогда чек-боксы вообще не выставляются на следующей странице.
    Может, кто-то сталкивался с подобной задачей, сделать поиск по категориям, типам постов, через чекбоксы, которые должны оставаться отмеченными?

    Я нашёл вот такое решение в интернете, но это, пожалуй, костыли, так как в этом случае нужно две формы поиска, и выбор чекбоксов доступен только на второй странице, поэтому я решил использовать isset().

    Вот мой код, который я использую для формы:

    <form role="search" class="search-box" method="get" action="<?php echo home_url( '/' ); ?>">	
      <input type="search" autocomplete="off" class="search-field"
    placeholder="<?php echo esc_attr_x( 'Search …', 'placeholder' ) ?>"
    value="<?php the_search_query(); ?>"
    name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
    
    <input type="checkbox" name="post_type[]" value="page"
    <?php if(isset($_GET["post_type"])
    and ($_GET["post_type"] == 'page' )) echo ' checked="checked"'; ?> /> <label>Page</label>
    
    <input type="checkbox" name="post_type[]" value="post"
    <?php if(isset($_GET["post_type"])
    and ($_GET["post_type"] == 'post' )) echo ' checked="checked"'; ?> /> <label>Post</label>
    
    <button class="btn-search-head">
       <div class="search_icon_head">
          <i class="fas fa-search"></i>					
       </div>
    </button>
    </form>
    

    В таком варианте поиск можно производить сразу и по страницам, и по записям, если выбрать оба чекбокса, но на следующей странице они не отмечены.
    Если использовать name="post_type", то поиск можно производить только по одному типу, даже если отметить оба, но один из чекбоксов будет отмечен.

    • Ответ изменён 4 года, 2 месяца назад пользователем turbomen24.
    • Ответ изменён 4 года, 2 месяца назад пользователем turbomen24.
    • Ответ изменён 4 года, 2 месяца назад пользователем turbomen24.
    • Ответ изменён 4 года, 2 месяца назад пользователем turbomen24.
    Модератор Юрій

    (@yube)

    Ну элементарно же. Если параметр указан как массив name="post_type[]" value="page", то и проверять его надо как массив

    if ( isset($_GET["post_type"]) and in_array("page", $_GET["post_type"]) )
    

    Почитайте, что ли, букварь по php, раз уж взялись писать код.

    Если проверять как массив, то всё работает правильно!
    Конечно же, я изучаю php, чтобы понимать примеры, которые беру за основу и то, что пишу сам, но что-то всегда можно упустить.
    Задача решена, вопрос закрыт.
    Большое спасибо!

Просмотр 7 ответов — с 1 по 7 (всего 7)
  • Тема «Расширенный поиск с Checkbox» закрыта для новых ответов.