我想让用户能够通过select
在存档页上输入。
最简单的方法是在前端显示两个输入:一个控制order_by
参数和其他控制order
参数
但如果只有一个带有四个选项的选择输入字段,情况会好得多:
最新的,最老的我试图作弊&
在每个选项的值中,但它会在URL上自动转义。
<form action="">
<select name="orderby" id="">
<option value="post_date&order=DESC">Latest</option>
<option value="post_date&order=ASC">Oldest</option>
<option value="post_title&order=ASC">Alphabetical A-Z</option>
<option value="post_title&order=DESC">Alphabetical A-Z</option>
</select>
<button>Filter</button>
</form>
此代码为我提供如下URL:
http://example.com/?orderby=post_date%26order%3DASC
我可以用javascript或PHP轻松地完成这项工作,但我想知道是否有更好的解决方案。
最合适的回答,由SO网友:hamdirizal 整理而成
如果您只需要使用URL查询参数,那么应该使用简单的链接而不是表单。
如果您想使用表单,但仍然想使用URL查询参数,那么一定要使用javascript。
但是,如果确实要使用表单和$\\u POST数据,可以使用以下选项:
$orderby = isset($_POST[\'orderby\']) ? $_POST[\'orderby\'] : null;
switch ($orderby) {
case \'a_to_z\':
$field = \'post_title\';
$sort = \'ASC\';
break;
case \'z_to_a\':
$field = \'post_title\';
$sort = \'ASC\';
break;
case \'date_oldest\':
$field = \'post_date\';
$sort = \'ASC\';
break;
default:
$field = \'post_date\';
$sort = \'DESC\';
break;
}
SO网友:Lucien Dubois
有很多方法可以继续。这里有一个。
我会这样定义四个选项:
function fetch_order_from_form( $query ){
if( $query->is_page( ThePAGEID ) && $query->is_main_query() && (isset($_POST["orderby"]) && !empty($_POST["orderby"])) ) {
if( $_POST["orderby"]) == 1){
$query->set( \'orderby\', \'date\' );
$query->set( \'order\', \'ASC\' );
}
elseif( $_POST["orderby"]) ==2 ){
$query->set( \'orderby\', \'date\' );
$query->set( \'order\', \'DESC\' );
}
elseif( $_POST["orderby"]) ==2 ){
$query->set( \'orderby\', \'title\' );
$query->set( \'order\', \'ASC\' );
}
elseif( $_POST["orderby"]) ==2 ){
$query->set( \'orderby\', \'title\' );
$query->set( \'order\', \'DESC\' );
}
}
}
add_action( \'pre_get_posts\', \'fetch_order_from_form\' );