因?yàn)檫@款插件版本比較老,沒(méi)有兼容php最新版本壳嚎。所以會(huì)出現(xiàn)如下問(wèn)題
安裝這款WordPress百度站點(diǎn)地圖插件:Baidu Sitemap Generator 后臺(tái)出現(xiàn)報(bào)錯(cuò)信息:
解決WordPress不建議給has_cap傳入一個(gè)參數(shù)問(wèn)題
?
解決方法:
?
參考文章:Baidu Sitemap Generator 報(bào)錯(cuò)且不更新解決辦法
?
問(wèn)題原因詳述:
?
WordPress中不同用戶(hù)等級(jí)擁有不同的操作權(quán)限阅酪,這給我們的網(wǎng)站安全提供了很大的保障绸栅。在 WordPress 2.0 以前坟桅,WP插件中使用數(shù)字(用戶(hù)等級(jí))來(lái)標(biāo)識(shí)不同的權(quán)限級(jí)別。這讓程序的可閱讀性大打折扣丈秩。所以從 WordPress 2.0 開(kāi)始就啟用了新的權(quán)限標(biāo)識(shí)符號(hào),使用有具體含義的英文字符串淳衙,同時(shí)保留原來(lái)的那一套表示方法蘑秽。很多插件作者并沒(méi)有采用新的權(quán)限表示方式,因而在開(kāi)啟 WordPress 的調(diào)試模式后箫攀,用戶(hù)會(huì)看到警告肠牲。
中文版本的警告類(lèi)似于,
不建議給has_cap傳入一個(gè)參數(shù)靴跛!用戶(hù)級(jí)別已被廢棄缀雳,請(qǐng)改用能力。 in /usr/share/wordpress/wp-includes/functions.php on line 4031
復(fù)制
英文版本的警告類(lèi)似于梢睛,
Notice: has_cap was called with an argument that is deprecated since version 2.0! Usage of user levels
復(fù)制
可以看到肥印,只是“不建議”,并不是完全不能用了绝葡。
要解決這個(gè)問(wèn)題深碱,只需要將插件(也許還包括某些主題)中用到的權(quán)限聲明的表示方式替換為新的方式就可以了。
目錄 Contents
- 定位需要改寫(xiě)的語(yǔ)句
- 改寫(xiě)表達(dá)方式
- 新舊權(quán)限表示方式對(duì)照
1. 定位需要改寫(xiě)的語(yǔ)句
首先要定位到需要改寫(xiě)的語(yǔ)句藏畅,這是個(gè)比較麻煩的任務(wù)敷硅。
從上面的警告信息中并不能直接知道是哪個(gè)文件調(diào)用了 functions.php 中的 has_cap 函數(shù)。所以這里只是給個(gè)思路墓赴,無(wú)法給出明確的方法竞膳。
對(duì)于插件,一般是因?yàn)椴寮枰?WordPress 的管理后臺(tái)創(chuàng)建插件的設(shè)置頁(yè)面時(shí)進(jìn)行權(quán)限聲明诫硕。比如在 baidu sitemap 插件中遇到的情況就是這樣坦辟。出現(xiàn)這種情況的標(biāo)志性語(yǔ)句是,
add_options_page
復(fù)制
只要在插件源文件中搜索 add_options_page
關(guān)鍵詞即可定位章办。
如果不是這種情況锉走,那就可以挨個(gè)兒禁用 WP 中的插件,同時(shí)刷新頁(yè)面以確定是否是當(dāng)前插件造成的藕届。如果恰好發(fā)現(xiàn)該警告信息不再提示了挪蹭,就說(shuō)明是當(dāng)前的插件。然后在該插件的源文件中去找相關(guān)的語(yǔ)句休偶。
另外梁厉,還可以通過(guò)在 WP 后臺(tái)中操作時(shí)出現(xiàn)錯(cuò)誤提示的路徑信息來(lái)縮小檢查范圍。如果有什么需要,可以留言咨詢(xún)词顾。
2. 改寫(xiě)表達(dá)方式
如果定位到了出問(wèn)題的 PHP 語(yǔ)句八秃,改寫(xiě)表達(dá)方式就很簡(jiǎn)單了。下面一節(jié)介紹了 WordPress 中新舊角色權(quán)限表達(dá)方式的對(duì)比肉盹。只需要將原來(lái)的表示用戶(hù)級(jí)別的數(shù)字改成新的表示權(quán)限的字符串就可以了昔驱。
例如,原來(lái)的 PHP 語(yǔ)句為上忍,
add_options_page(“Baidu-Sitemap”,”Baidu-Sitemap”, 8, __FILE__, ‘baidu_sitemap_optionpage’);
復(fù)制
該語(yǔ)句因?yàn)橐?WordPress 后臺(tái)添加一個(gè)插件的“選項(xiàng)”頁(yè)面骤肛,因而需要用到 WordPress 中的第 8 級(jí)權(quán)限。查到對(duì)應(yīng)的新的權(quán)限字符為 'manage_options'
窍蓝。對(duì)應(yīng)修改為腋颠,
add_options_page(“Baidu-Sitemap”,”Baidu-Sitemap”, ‘manage_options’, __FILE__, ‘baidu_sitemap_optionpage’);
復(fù)制
只需要改其中那個(gè)數(shù)字 8,別的不需要?jiǎng)印?/p>
應(yīng)該注意的是它抱,根據(jù) PHP 的規(guī)則秕豫,傳遞的參數(shù)如果是整型數(shù)字,可以不用加單引號(hào)观蓄,但是改成字符串之后混移,我們需要用英文半角的單引號(hào)將該字符串包起來(lái)。
3. 新舊權(quán)限表示方式對(duì)照
WordPress Codex 中有關(guān)于舊版本數(shù)字式用戶(hù)級(jí)別和新的字符串式權(quán)限聲明的詳細(xì)說(shuō)明可供參考侮穿。
在數(shù)字式用戶(hù)級(jí)別頁(yè)面的 3.12 User Level Capability Table 表格中列出了 11 個(gè)用戶(hù)級(jí)別對(duì)應(yīng)的權(quán)限歌径。而在字符串式權(quán)限聲明頁(yè)面中 3.8 Capability vs. Role Table 一節(jié)里列舉了所有權(quán)限字符串所代表的權(quán)限級(jí)別(對(duì)應(yīng)于超級(jí)管理員、管理員等)亲茅。
原先的數(shù)字式級(jí)別與新的字符串式權(quán)限之間并不是一一對(duì)應(yīng)的回铛。具體應(yīng)該將數(shù)字換成哪個(gè)字符串需要仔細(xì)斟酌】寺啵可能還需要根據(jù)在本文第 1 小節(jié)中定位出的 PHP 語(yǔ)句來(lái)輔助判斷茵肃。原則上,權(quán)限在夠用的前提下越小越好袭祟。
例如验残,前面的例子中需要增加 options 頁(yè)面,那肯定是管理員級(jí)別的權(quán)限巾乳。增加 options 頁(yè)面的目的就是保存該插件的設(shè)置信息您没,這些信息是需要寫(xiě)入到 WordPress 數(shù)據(jù)庫(kù)的 options 表中的。所以胆绊,可以確定為 manage_options 這個(gè)字符串氨鹏。
在 Capabilities 一節(jié)中詳細(xì)解釋了各個(gè)字符串所代表的操作權(quán)限的范圍。而在 User Levels 一節(jié)中則給出了舊式數(shù)字用戶(hù)等級(jí)所對(duì)應(yīng)的權(quán)限范圍压状,方便縮小查找權(quán)限字符串的范圍仆抵。8-10 級(jí)對(duì)應(yīng)于管理員,3-7 級(jí)對(duì)應(yīng)于編輯,2 級(jí)是作者肢础,1 級(jí)是貢獻(xiàn)者还栓,0 級(jí)是權(quán)限最低的訂閱者碌廓。