我为自己网站上的搜索过滤构建了自定义form
。我正在使用隐藏的输入字段来决定选择了哪种类型的搜索过滤器。该值已通过,我在搜索页面上检查了值是什么,然后直接指向正确的搜索结果页面,如下所示:
<?php
$search_refer = $_GET['search_type'];
if($search_refer == 'members') {
load_template(TEMPLATEPATH . '/search-members.php');
} else if($search_refer == 'event') {
load_template(TEMPLATEPATH . '/search-member-event.php');
} else {
load_template(TEMPLATEPATH . '/search-site.php');
}
?>
以下是HTML / PHP中的两个字段
<div class="state"> // Sorting by user State
<input type="hidden" name="search_type" value="members">
<select id="stateDrop" name="state">
<option value="">State</option>
<?php
foreach($states as $state) {
echo '<option value="'.$state.'">'.$state.'</option>';
}
?>
</select>
</div>
<div class="sort-event"> // Sorting by an Event
<input type="hidden" name="search_type" value="event">
<select id="eventDrop" name="event">
<option value="">Event</option>
<?php
$args = array(
'post_type' => 'events',
'order' => 'ASC'
);
$eQuery = new WP_Query( $args );
while( $eQuery->have_posts() ) : $eQuery->the_post();
echo '<option value="'.$eQuery->post->post_title.'">'.$eQuery->post->post_title.'</option>';
endwhile;
wp_reset_query();
?>
</select>
</div>
两者都将名称search_type
作为隐藏名称,但值不同。 members
vs event
。我的问题是,当您单击提交按钮时,收到的值始终是最后隐藏的输入值。例如event
。
有没有办法决定选择哪个字段,以便我可以将搜索结果指向正确的页面。 (搜索页面根据搜索引入不同的信息)。
谢谢,
答案 0 :(得分:2)
由于您有两个具有相同名称的输入,因此只会将其中一个设置为服务器。
如果您希望他们使用相同的名称,您将需要使用POST和两个表单,这需要两个单独的提交按钮,但转到同一页面。这样您就可以根据过滤器提交所需的表单。
<form action="yourpage.php" method="post">
<input type="hidden" name="search_value" value="members"/>
... member stuff
<input type="submit" value="Filter Members"/>
</form>
<form action="yourpage.php" method="post">
<input type="hidden" name="search_value" value="event"/>
... event stuff
<input type="submit" value="Filter Events"/>
</form>
或者你可以使用输入类型的单选按钮,因为它支持同名,因为一次只能选择一个值。
Event: <input type="radio" name="search_type" value="event"/>
Members: <input type="radio" name="search_type" value="members"/>
// Then in PHP $_POST["search_type"] will hold the selected value.
如果您希望坚持使用GET,可以在用户点击链接之前使用JavaScript设置单个隐藏元素的值。