掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
WordPress是一個全球知名的開源web程序,據(jù)了解全球有超過20%的站點都是基于這款程序建立的,在國內(nèi)也是特別流行,一些大公司的團隊博客等都是基于這個程序建立的。當然知道的也知道,WordPress是一款博客程序,因此在默認情況下并沒有像那種龐大的CMS系統(tǒng)一樣擁有豐富的、現(xiàn)成的功能。
那是不是WordPress就不適合來做某些CMS來做的事情了,肯定不是的!因為它提供了豐富的API,可以讓我們根據(jù)自己的需求來構(gòu)建無數(shù)功能模塊。也是因為這樣,我自己經(jīng)常用它來完成一些小項目,因為在初始狀態(tài)下它很簡單,而要什么功能在基于它來開發(fā),沒有多余的東西。比如國內(nèi)知名網(wǎng)站程序Discuz之類的,如果來做一個普通的企業(yè)網(wǎng)站那么就顯得太多余了,太龐大了,Discuz數(shù)據(jù)庫表就將近300張(含Ucenter);而WordPress只有11張表;但可以基于它擴展很多功能。
最近的一個項目,可以說不是普通常規(guī)的網(wǎng)站,但就各個模塊來說又是常規(guī)的;最后我選定了用WordPress來做,當然事實上這并不是一個省時間的方式。但我這個人就喜歡尋樂子,喜歡瞧瞧未知的東西,包括這次就闖了幾個之前沒接觸的。比如今天的主角——WordPress根據(jù)多個自定義字段合并篩選數(shù)據(jù)。
大家都知道根據(jù)多個字段合并篩選數(shù)據(jù)那是網(wǎng)站制作開發(fā)過程中最平常不過的功能了,很多人都會,比如一些商城什么的。就算是自己開發(fā)一個這樣的功能模塊也是非常簡單的,是一個很常規(guī)的工作。基于一些CMS系統(tǒng)來說這樣的功能根本不用做,因為現(xiàn)成的;而就算自己寫一個這樣的系統(tǒng)也是很簡單的。但如果對WordPress不熟悉,要完成這個并不是一件太容易的事兒;因為前提是不能破壞它的結(jié)構(gòu),而且得根據(jù)他的架構(gòu)思想來做。否則你可能功能寫出來了,但效率很低下;除非你比這個原作者更熟悉這個結(jié)構(gòu)、有更牛逼的數(shù)據(jù)庫知識。
下面就進入正題,其實這個我們首先需要用到postmeta這張數(shù)據(jù)表,這個數(shù)據(jù)表有meta_id,post_id,meta_key 和 meta_value四個字段,其中meta_id為記錄id,為自增;post_id為相應的文章ID(其實實際上包含文章、頁面、附件等,因為這些都保存在post表中),而后兩者分別為鍵名稱和鍵值。如果單純這張表,確實很簡單,清晰明了;但就是這張表,就是給我們來擴充文章、附件、頁面等功能的。
因此我們自然的可以聯(lián)想到來應用它,如果你在考慮做這個事情,那么你很幸運,因為不需要你看英文文檔(對于我這樣的英語渣,最痛苦的就是看英文文檔了),就可以在國內(nèi)各個博客中發(fā)現(xiàn)一個非常使用的函數(shù)update_post_meta(),這個就是向其中插入數(shù)據(jù)的,使用起來很簡單;相應的還有delete_post_meta()和get_post_meta(),分別用于刪除和獲取數(shù)據(jù)的。關于這些相關的函數(shù)使用我有時間會跟大家分享下。
準備工作好了,現(xiàn)在我們已經(jīng)可以為我們的內(nèi)容創(chuàng)建自定義字段,并可以保存、讀取、刪除、更新等,也就是說我們的這個列表中的文章可以分別有了類別、材質(zhì)、主題三個附加的字段,就類似標題字段一樣的。那么我們需要做最后一個主體工程就是來合并篩選。據(jù)我對WordPress數(shù)據(jù)結(jié)構(gòu)的了解,如果直接寫自定義的SQL查詢語句來寫,那么顯然是相對復雜而且很可能會效率很低。于是我就在想這個強大的程序是不是自己提供了,就聯(lián)想到了WP_Query類之類的東西,結(jié)果翻看文檔發(fā)現(xiàn)其中還真是有我需要的,當然此類內(nèi)容在網(wǎng)上比較少,因為很少人折騰這玩意。下面就直接代碼截圖來給思路了,當然到這里了其實不用貼代碼,對于懂的人也能知道怎么辦了。
對于我們上圖能看到的那一部分的選擇區(qū)域代碼就省略了,那一部分很簡單,其實就是為了獲取篩選的參數(shù)ID,用于我們輸出數(shù)據(jù)時的約束條件而已。直接從輸出約束(也就是我們要的多字段篩選)核心的部分來做處理。首先我們得判斷我們用戶是否選擇了篩選條件,這里有三個屬性條件,分別是類別、材質(zhì)、主題;那么我們就一一獲取吧(命名是隨便的,有點兒不規(guī)范哈)。
然后我們就需要用到了我們上面所說的WP_Query類,我們我們我們得到的篩選條件傳遞到類當中,并實例化類獲得一個我們查詢的對象,然后在把對象里面的東西取出來輸出就完成了。如下:
至此,我們就已經(jīng)實現(xiàn)了我們最開始所需要的功能了(當然上面的合并條件的地方,你可以寫入更多的條件,而且靜態(tài)分類ID=24,實際應用可以改成動態(tài),實際上用$cat就可以了,這里只是為了簡單明了,直接寫了一個靜態(tài)值)。而且上面兩張圖已經(jīng)貼出了很詳細的核心部分的代碼了,幾乎直接抄著就可以用了,當然用戶篩選界面就省略了。對于WP_Query類的詳細介紹,以后有時間的時候跟大家分享下。
到了這里,如果熟悉了以上各個數(shù)據(jù)結(jié)構(gòu)、內(nèi)置方法及屬性、類等等,那么做起來就非常簡單了,比自己寫一個孤立的同樣的功能的模塊還簡單,省時省力,就像拿現(xiàn)成的CMS系統(tǒng)的這樣的模塊使用一樣。因此,還是那句話,沒有絕對的難或者容易,再簡單的只要不會一樣難,再復雜的只要會了一樣很容易。
當然,不管大家是懂技術的還是不懂技術的,不管是用過WordPress的還是沒有用過WordPress的,如果大家有這方面的服務需求,都可以聯(lián)系咱們哦。
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流