掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
使用WordPress開發(fā)網(wǎng)站,不管是做企業(yè)網(wǎng)站,還是個(gè)人博客,還是具備下單支付功能的商城。往往少不了諸如”最多關(guān)注”、”最多評(píng)論”、”熱賣商品”等等,總而言之,實(shí)際上這就是推薦。當(dāng)然WordPress默認(rèn)只有一個(gè)評(píng)論數(shù)據(jù),而諸如銷量、瀏覽量等等是需要通過postmeta來擴(kuò)充的,關(guān)于怎么按照自定義字段進(jìn)行文章排序可以參考我前兩天發(fā)布的文章《WordPress按照文章自定義字段進(jìn)行排序的內(nèi)部調(diào)用方法》。
大家可能都在思考一個(gè)這樣的問題?既然是按照某個(gè)指標(biāo)進(jìn)行排序,我們可能聽說過馬太效應(yīng),就拿最多瀏覽量文章排序來講,越是熱門的文章越會(huì)堅(jiān)挺在最前面。換而言之,在你推薦的位置,很可能永遠(yuǎn)都是那幾篇文章,比如5年后還是現(xiàn)在的某篇文章排在里面;而我們之所以弄一個(gè)排序就是供用戶參考的,如果時(shí)間太長這個(gè)參考幾乎沒有意義。那么我們能不能在加一個(gè)約束條件呢?比如一周熱門、一月熱門、本年度熱門等等。
當(dāng)然,這僅僅是一個(gè)基礎(chǔ)查詢問題,是一定可以實(shí)現(xiàn)的。但是我們盡量能使用其自帶方法來完成操作,大家可能第一想到的就是query_posts這個(gè)方法,但網(wǎng)上寫這個(gè)方法的參考大多是一些基礎(chǔ)查詢,而針對這種較為“冷門”的并沒有太多關(guān)注。這我們可以參考官網(wǎng)文檔或者直接參考方法源代碼。
實(shí)際上,在query.php中,也就是query_posts對應(yīng)的文件,其實(shí)就是一個(gè)WP_Query類,在里面有一個(gè)$date_query,而它是WP_Date_Query的一個(gè)實(shí)例。實(shí)際上WP_Date_Query類在官網(wǎng)文檔中就有,文檔地址:https://developer.wordpress.org/reference/classes/wp_date_query/。相關(guān)調(diào)用規(guī)則如下:
$date_query = new WP_Date_Query( array( 'column' => '可選,日期查詢針對的數(shù)據(jù)列,默認(rèn)為 post_date', 'compare' => '可選,一些比較運(yùn)算的符號(hào),在 WP_Date_Query::get_compare()中 有定義(如 '=', '!=', '>', '>=', '<', '<=', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN')', 'relation' => '可選,OR 或者 AND,當(dāng)下面緊接著設(shè)定的日期數(shù)組超過 2 組時(shí),通過這個(gè)參數(shù)來決定其組合關(guān)系,默認(rèn)為 AND', array( 'column' => '要求同上', 'compare' => '要求同上', 'after' => '字符串或數(shù)組,參考 WP_Date_Query::build_mysql_datetime()', 'before' => '字符串或數(shù)組,參考 WP_Date_Query::build_mysql_datetime()', 'inclusive' => '布爾值,針對上面的 after/before,是否要精確匹配給定日期', 'year' => '4 位整數(shù)', 'month' => '整數(shù),1-12', 'week' => '整數(shù),0-53', 'day' => '整數(shù),1-31', 'hour' => '整數(shù),0-23', 'minute' => '整數(shù),0-60', 'second' => '整數(shù),0-60', ), array( ... ), ... ) );
然后可以在WP_Query或者query_posts中調(diào)用,如調(diào)用一個(gè)月內(nèi)最多閱讀量的十篇文章。
//時(shí)間約束 $date_query=array( array( 'column' => 'post_date', 'before' => date('Y-m-d H:i',time()), 'after' =>date('Y-m-d H:i',time()-3600*24*30) ) ); //查詢條件 $args=array( 'meta_key' => 'views', 'orderby' => 'meta_value_num', 'posts_per_page'=>10, 'date_query' => $date_query, 'order' => 'DESC' ); //查詢 query_posts($args);
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流