我在我的索引页面上创建了一个用户表单,允许网站访问者根据最近的帖子或评分最高的帖子重新排序我的帖子循环顺序。表单工作得很好,问题是: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>
我做错了什么?我只想让下拉列表始终准确地描述循环结果。任何帮助都将不胜感激。几周来我一直在想这个问题。
SO网友:kaiser
WordPress有两个助手功能:selected()
和checked()
. 两者都只是比较两个值,如果匹配,则输出selected
或checked
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
正确编辑数据。