Wordpress不同页面显示不同小工具
問題
想做一個在右側顯示的文章目錄, 使用文章目錄的插件 Easy Table of Contents, 將其添加到右側的側邊欄中, 很輕松做到了這點.
但是, 一個新的問題出現了. 這個目錄的工具, 需要在文章頁面顯示, 而在其他頁面不顯示.
那么問題來了, 如何讓不同的頁面顯示不同的側邊欄工具呢?
在網上找了一些教程, 基本上都是推薦安裝插件的, 通過這種方式確實可以解決, 但是安裝插件會拖慢網站的加載速度, 能不能自己實現呢?
解決
轉念一想, WordPress提供了那么多的鉤子, 有沒有合適的鉤子能夠對頁面工具進行過濾呢?
在官網上 https://developer.wordpress.org/reference/hooks/ 通過關鍵字 widget搜索相關的鉤子, 結果發現人家確實提供了. 官方提供了很多鉤子, 需要的時候可以先看一下有沒有需要的.
就是: sidebars_widgets, 可以針對小工具進行過濾.
回調函數收到的參數長這樣:
{"wp_inactive_widgets": ["block-2","block-3","block-4","block-6","block-8","block-10","block-11","block-12","block-15","block-16","block-18","block-19"],"sidebar-1": ["block-20","custom_html-2","categories-2","ezw_tco-2"],"header-widget": [],"footer-widget-1": [],"footer-widget-2": [],"advanced-footer-widget-1": [],"advanced-footer-widget-2": [],"advanced-footer-widget-3": [],"advanced-footer-widget-4": [] }其中sidebar-1就是側邊欄工具列表啦. 那么思路就很清晰了, 只要在不同的頁面對不同的工具進行過濾, 就可以達到效果啦.
下面給出我添加的過濾方法, 我的需求是在文章頁面僅顯示目錄工具, 其他頁面去掉目錄工具. 僅供參考(將代碼添加到 functions.php 文件中).
這里注意, 管理后臺不能過濾, 否則你在后臺的小工具頁面也看不到了.
/*** 側邊欄小部件過濾* @author hujing*/ add_filter( 'sidebars_widgets', function ($widgets){// 后臺界面, 都不過濾if(is_admin()) return $widgets;// 判斷是否是目錄部件$isEzwTco = fn($i) => strpos($i, 'ezw_tco-') === 0;// 對側邊欄內容進行過濾$filterSidebar = function ($isKeep) use (&$widgets){foreach ($widgets as $type=>&$tmpList){// 找到側邊欄, 進行過濾if(strpos($type, 'sidebar-') === 0){$tmpList = array_filter($tmpList, $isKeep);}}};// 文章頁面, 側邊欄值留下目錄if(is_single()){$filterSidebar(fn($i) => $isEzwTco($i));}else{ // 非文章頁面, 將側邊欄的目錄過濾$filterSidebar(fn($i) => !$isEzwTco($i));}return $widgets; });原文鏈接: https://hujingnb.com/archives/679
總結
以上是生活随笔為你收集整理的Wordpress不同页面显示不同小工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 注解原理
- 下一篇: 由 go orm 引发的探索