Модератор
Юрій
(@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, чтобы понимать примеры, которые беру за основу и то, что пишу сам, но что-то всегда можно упустить.
Задача решена, вопрос закрыт.
Большое спасибо!