凡科建站弊端,最吸引人的汽车广告语,绩效评估评价网站建设,陕西煤化建设集团网站问题
想做一个在右侧显示的文章目录, 使用文章目录的插件 Easy Table of Contents, 将其添加到右侧的侧边栏中, 很轻松做到了这点.
但是, 一个新的问题出现了. 这个目录的工具, 需要在文章页面显示, 而在其他页面不显示.
那么问题来了, 如何让不同的页面显示不同的侧边栏工具…问题
想做一个在右侧显示的文章目录, 使用文章目录的插件 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