使用自定义下拉列表对搜索结果进行排序

时间:2018-03-09 作者:730wavy

我在搜索结果页面(search.php)上有以下用于排序的选择下拉代码,该页面适用于自定义字段。

<div id="sortby"> SORT BY: &nbsp;
<select class="dropdown-class" name="sort-posts" id="sortbox" onchange="document.location.href=location.href+this.options[this.selectedIndex].value;">
<option disabled>Sort by</option>
<option value="&orderby=date&order=DESC">Newest</option>
<option value="&orderby=date&order=ASC">Oldest</option>
<option value="&orderby=property_price2&order=DESC">Most Expensive</option>
<option value="&orderby=property_price2&order=ASC">Least Expensive</option>
<option value="&orderby=area2&order=DESC">Largest</option>
<option value="&orderby=area2&order=ASC">Smallest</option>
</select>
</div>
我的函数中还有以下代码。php来实现这一点--

function wpse139657_orderby(){
    if( isset($_GET[\'orderby\']) ){
        $order = $_GET[\'order\'] or \'DESC\';
        set_query_var(\'orderby\', \'meta_value_num\');
        set_query_var(\'orderby\', \'date\');
        set_query_var(\'meta_type\', \'numeric\');
        set_query_var(\'meta_key\', $_GET[\'orderby\']);
        set_query_var(\'order\', $order);
    }
}

add_filter(\'pre_get_posts\',\'wpse139657_orderby\');
它在按价格或面积排序时有效,但在尝试按日期排序时无效。

我为日期ie尝试了不同的meta\\u键-publish\\u date、the\\u date、date、get\\u the\\u date等。。

我错过了什么?

此外,如果在ie上使用排序-第3页,结果将重新加载并将我保留在第3页上,我如何在排序后将用户带到结果的第1页?

1 个回复
SO网友:Jacob Peattie

发布日期不是元。仅限您orderby meta_value 如果值是存储在中的自定义字段wp_postmeta 桌子发布日期在wp_posts 表和部分核心岗位数据。

如果要按设置的日期订购orderbydate, 不要设置任何meta_ 变量。

但是,设置orderbyorder 自动支持with查询字符串,无pre_get_posts. 例如,如果您想按逆字母顺序查看Make WordPress Core的帖子,只需转到https://make.wordpress.org/core/?order=DESC&orderby=title 它会起作用的(还没有以Z开头的帖子!)。

所以你需要做的就是处理property_price2area2 orderby值,WordPress自己无法理解。

function wpse_139657_orderby() {    
    if ( isset( $_GET[\'orderby\'] ) ) {
        if ( in_array( $_GET[\'orderby\'], [\'property_price2\', \'area2\'] ) ) {
            set_query_var( \'orderby\', \'meta_value_num\' );
            set_query_var( \'meta_key\', $_GET[\'orderby\'] );
        }
    }
}
add_filter( \'pre_get_posts\', \'wpse_139657_orderby\' );

结束

相关推荐

某些帖子内容未显示在DB Search中

我使用MySQL Workbench在数据库中搜索URL,以便使用sqlupdate() 将其更改为其他URL。很简单。让我感到困扰的是,即使这样,其中一些URL(几乎所有URL都是用户在帖子内容部分键入的)也不会出现在明显的地方,比如wp_posts, 甚至当我搜索整个模式时。还有其他地方的提示吗post_content 除了post_content