【发布时间】:2018-11-13 04:13:12
【问题描述】:
我正在构建一个 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&gender=male
这不起作用,因为搜索需要像这样:/?s=a+male
我知道 GET 方法是更好的方法,但我就是想不通。如果有人知道如何在提交之前修改 url,我可能会更改我的代码以使用 GET 方法。
【问题讨论】: