我在搜索结果页面(search.php)上有以下用于排序的选择下拉代码,该页面适用于自定义字段。
<div id="sortby"> SORT BY:
<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页?
SO网友:Jacob Peattie
发布日期不是元。仅限您orderby
meta_value
如果值是存储在中的自定义字段wp_postmeta
桌子发布日期在wp_posts
表和部分核心岗位数据。
如果要按设置的日期订购orderby
到date
, 不要设置任何meta_
变量。
但是,设置orderby
和order
自动支持with查询字符串,无pre_get_posts
. 例如,如果您想按逆字母顺序查看Make WordPress Core的帖子,只需转到https://make.wordpress.org/core/?order=DESC&orderby=title 它会起作用的(还没有以Z开头的帖子!)。
所以你需要做的就是处理property_price2
和area2
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\' );