提交/刷新后,下拉列表不会显示所选选项

时间:2014-06-21 作者:Corey

我在我的索引页面上创建了一个用户表单,允许网站访问者根据最近的帖子或评分最高的帖子重新排序我的帖子循环顺序。表单工作得很好,问题是:post循环默认按最近的加载,但在他们选择/提交最高评级顺序后,页面刷新,下拉列表显示“最近的帖子”的默认选项值,而此时它应该显示“最高评级帖子”的当前选项值。这让读者感到困惑,因为他们似乎仍在看到最新的帖子,而实际上他们看到的却是最高评分的帖子。

如何强制下拉列表保留在所选选项上,而不是在刷新后默认返回到第一个选项?

这是我的代码:

<?php $sort= $_GET[\'sort\']; if($sort == "date") { $order= "orderby=date"; } if($sort == "highest_rated") { $order= "orderby=meta_value_num"; } ?>

<form class="formindexfilter" action="#ifilter" method="get">
<input type="hidden" name="r_orderby" value="desc">
<select name="r_sortby" id="sorting">
 <option value="date" <?php if ($sort == "date") { echo \' selected="selected"\'; } ?> >Most Recent Posts</option>
 <option value="highest_rated" <?php if ($sort == "highest_rated"){ echo \' selected="selected"\'; } ?> >Highest Rated Posts</option>
</select>
<input type="submit" value="Submit" />
</form>
我做错了什么?我只想让下拉列表始终准确地描述循环结果。任何帮助都将不胜感激。几周来我一直在想这个问题。

2 个回复
SO网友:keesiemeijer

select的name属性为“r\\u sortby”。代替

$sort= $_GET[\'sort\'];
使用

$sort = isset( $_GET[\'r_sortby\'] ) ? $_GET[\'r_sortby\'] : \'date\'; 

SO网友:kaiser

WordPress有两个助手功能:selected()checked(). 两者都只是比较两个值,如果匹配,则输出selectedchecked HTML属性/值对。第三个论点是echo.

只是var_dump( $_GET ); 看看你得到了什么。如果您没有通过XDebug启用良好的格式,那么您可能需要使用

printf( \'<pre>%s</pre>\', var_export( $_GET, TRUE ) );
取而代之的是。检查你真正得到的回报,并对照它进行检查。然后只需使用以下功能:

<option <?php selected( \'foo\', $_GET[\'foo\'] ); ?> value="foo">Foo</option>
就这样。

有关处理HTML表单提交值的更多信息,请参见in this answer on StackOverflow. 请谨慎操作,因为如果不验证和清理$_POST正确编辑数据。

结束

相关推荐

List all blog categories

我已经创建了一个博客插件。我的博客中有博客类别。我想获得所有博客类别的列表,并将其列在我的www.domain中。com/blogs/page。我的博客类别名称为“blogcategory”。我不知道如何在list-category 作用我是wordpress开发的nooby。