有没有办法从一个输入字段同时控制ORDER BY和ORDER查询参数

时间:2019-02-03 作者:Cleber F. Sant\'ana

我想让用户能够通过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轻松地完成这项工作,但我想知道是否有更好的解决方案。

2 个回复
最合适的回答,由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\' );

相关推荐

WP_QUERY按年、月查找帖子

我需要在分类法归档页面中按自定义帖子类型的年和月创建排序。像这样:这里显示的是年份,如果该年存在post。如果当月存在帖子,则突出显示月份。如何找出哪年哪月有帖子?如果每年每个月都有一个帖子,那么创建一个循环来检查,这将是“不好的”。有什么解决方案吗?P、 S.cpt名称-document_base 和分类名称-document_base_categories 和字段中存储的日期docs_pubdate (自定义field suite插件)