Форма расширенного поиска Wordpress - Безопасность - PullRequest
0 голосов
/ 03 июня 2018

Я создаю тему 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...