WordPress 預設排序是按照文章釋出時間的,有時候我們需要按照其他方式來排序,或者提供其他方式排序的功能。如果只是基本的排序,比如按照修改時間,或者按照評論數之類的,不需要做任何改動,直接在 url 加上 orderby 引數就可以的。
比如按評論數量排序就是:
http://yourdomian.com/?orderby=comment_count
按修改時間就是:
http://yourdomian.com/?orderby=modified
隨機排序就是:
http://yourdomian.com/?orderby=rand
按照 ID 大小就是:
http://yourdomian.com/?orderby=ID
但是複雜一些的比如按照瀏覽量排序,則需要 orderby 和 meta_key 兩個引數,我使用下面的連結並沒有得到期望的排序:
https://yourdomain.com/?orderby=meta_value_num&meta_key=views
說明 meta_key 這個引數無法正常傳遞,我們只能使用 pre_get_posts 這個 hook 來處理。把下面的程式碼加到 functions.php 中即可:
add_action(‘pre_get_posts’, ‘fa_orderby_views’);
function fa_orderby_views($query) {
if (is_home() && $query->is_main_query() && get_query_var(‘orderby’) == ‘views’) {
$query->set(‘meta_key’, ‘views’);
$query->set(‘orderby’, ‘meta_value_num’);
}
return $query;
}
然後就可以使用下面的 url 來獲取按照瀏覽量的排序了。
https://yourdomain.com/?orderby=views
以上。