Я создаю тему WordPress, которая должна иметь форму расширенного поиска с переключателями и раскрывающимся меню.Я заставил его работать, создав форму с помощью метода POST и перетащив данные на страницу поиска, чтобы она обновляла $ wp_query перед загрузкой страницы.Вот код, который я использовал.
Форма
echo'<div class="header-img">
<form method="post" class="cat-search" action="'.esc_url( home_url( '/search' ) ).'" role="search" >
<select name="category">';
foreach ( $categories as $category ) {
echo'<option value="'.$category->slug.'">'.$category->name.'</option>';
}
echo'</select>
<input type="radio" name="gender" value="male"> Male<br>
<input type="radio" name="gender" value="female"> Female<br>
<input value="Search" type="submit" />
</form>
</div>';
Страница поиска
$cat = esc_html($_POST["category"]);
$gen = esc_html($_POST["gender"]);
if($_POST["gender"]) {
$cat_array = array($cat,$gen);
$cat_string = implode("+", $cat_array);
} else {
$cat_string = $cat;
}
$args = array(
'post_type' => 'post',
'orderby' => 'date',
'order' => 'DESC',
'paged' => get_query_var( 'paged' ),
'category_name' => $cat_string,
);
Это прекрасно работает, но, поскольку я не являюсь экспертом в PHP, я хотел бы знать, является ли это правильным способом или существует потенциальная уязвимость в моем коде.
Примечание:
Сначала я попытался использовать метод GET, но не смог найти способ изменить URL-адрес до его отправки.Когда форма была отправлена, URL был в парах имя / значение, например так: /? S = a & пола = мужской
Это не работает, потому что поиск должен быть таким: /? S = a + male
Я знаю, что метод GET - лучший путь, но я просто не мог понять это.Если кто-то знает, как изменить URL-адрес до его отправки, я, вероятно, изменил бы свой код, чтобы использовать вместо него метод GET.