Поддержка Проблемы и решения Расширенный поиск с Checkbox

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

    <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)
  • я использую фунцию «cheched()»

    Что? Где?

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

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

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

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

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

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

    Используйте массив (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", то поиск можно производить только по одному типу, даже если отметить оба, но один из чекбоксов будет отмечен.

    • Ответ изменён 1 год, 10 месяцев назад пользователем turbomen24.
    • Ответ изменён 1 год, 10 месяцев назад пользователем turbomen24.
    • Ответ изменён 1 год, 10 месяцев назад пользователем turbomen24.
    • Ответ изменён 1 год, 10 месяцев назад пользователем turbomen24.

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

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

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

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

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