是否覆盖插件中的Dynamic_Sidear()?

时间:2011-05-20 作者:dpgtfc

我正在编写一个自定义插件,允许特定页面有自己的带有小部件的侧栏。到目前为止,它工作得很好,但我想做的是对其进行更多的概括,并允许插件“覆盖”任何页面的动态侧栏(如果有自定义侧栏),而无需编辑任何模板文件。

我已经尝试了几个钩子,并对代码进行了一些深入研究,但到目前为止,还没有任何东西能够满足我们的要求。

为了节省时间,我想看看是否有人能找到解决这个问题的有效方法?我或许能够解决这个问题,但这让我的“下班后”大脑感到紧张。

如果这是不可能的,我会非常愿意有一个简短的代码或函数调用来为我做到这一点,但我真的想让它白痴证明,只是让它在没有任何模板更改的情况下工作。

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

dynamic_sidebar() 呼叫wp_get_sidebars_widgets() 获取所有侧栏及其小部件的列表。此输出经过筛选sidebars_widgets, 所以你可以modify it to add or remove widgets.

这个数组只包含小部件ID,因此您也需要注册小部件实例(它应该在全局$wp_registered_widgets 阵列)。我想你可以用wp_register_sidebar_widget(), 但这可能是小部件还不能有多个实例时的旧代码。

SO网友:Marketing Consultant

是的,这是完全可能的,但不是最简单的事情。我花了大约两个月的时间来完善它Total Widget Control, 但我做到了。

这不是直接覆盖tho,发生的是dynamic_sidebar 加载$registered_widgets 全局和循环遍历小部件,触发每个小部件的回调。

Step one因此,我最终做的是获取这个注册的\\u widgets全局,将其备份到我自己的全局,然后用一个空回调函数替换原始回调。

这种方式仍然调用dynamic\\u侧边栏,但实际上它什么都不做。

Step two下一步有点棘手,需要进行一些调试。我必须统计给定侧栏的原始小部件总数,然后跟踪dynamic\\u侧栏的循环。当dynamic\\u sidbars到达其最后一个小部件时,我调用了自己的do\\u操作(“trigger\\u new\\u sidebar”)。

这基本上允许我开始向这个触发器添加操作,并显示我想要显示的任何小部件。

祝你好运

结束