使用PHP将一个侧边栏中的小部件注入另一个侧边栏

时间:2017-08-03 作者:jerclarke

问题:

我延长了2017年,并在主页内容上方添加了一个新的小部件区域(“行动要求”)。在主页上,我在需要的地方显示侧栏,但在其他页面上,我希望这些(重要的)小部件显示在默认的217侧栏中There must be a way to use functions.php filter code to retrieve the widgets saved in one sidebar, then inject them into another sidebar before it is displayed.

这对于根据上下文需要在多个侧栏中使用相同小部件的各种情况都很有用,尤其是在处理没有“足够侧栏”的僵化父主题时。

请注意,我不需要被告知“Widget control”插件或Jetpack选项,它允许您根据上下文显示/隐藏单个Widget。我需要的是一种控制小部件将显示在哪些其他侧栏中的方法。

Plugin suggestions welcome 如果他们解决了关键问题。

谢谢无论哪种方式,我都会尝试自己解决这个问题,如果得到满意的解决方案,我会回复:)

1 个回复
SO网友:birgire

这里有一个(未经测试的)想法,我们将sidebar-inject 之前的侧栏sidebar-target 借助于侧栏dynamic_sidebar_before 挂钩:

add_action( \'dynamic_sidebar_before\', \'wpse_inject_sidebar\', 10, 2 );

function wpse_inject_sidebar( $index, $has_widgets )
{   
    // Only target front-end
    if( is_admin() )
        return;

    // Only target \'sidebar-target\'
    if( \'sidebar-target\' !== $index )
        return;

    // Make sure \'sidebar-inject\' is active
    if( ! is_active_sidebar( \'sidebar-inject\' ) ) 
        return;

    // Avoid recursive loop
    remove_action( \'dynamic_sidebar_before\', \'wpse_inject_sidebar\', 10 );

    // Inject  \'sidebar-inject\' 
    dynamic_sidebar( \'sidebar-inject\' );

    // Re-hook it again
    add_action( \'dynamic_sidebar_before\', \'wpse_inject_sidebar\', 10, 2 );       
}
在这里,我们要注意递归循环,在调用之前删除操作dynamic_sidebar() 在钩子的回调中。

但只针对\'sidebar-target\' 在这里,确保它与\'sidebar-inject\', 我们实际上避免了递归循环。

结束

相关推荐

将目录符号链接到wp-Content/Themes

是否可以将我的项目文件夹中的目录符号链接到我的wp content/themes文件夹,该文件夹位于名为chassis的流浪设置中:https://github.com/Chassis/Chassis ?我尝试使用ln-s进行符号链接,但我的wordpress安装没有识别它,因为我没有在外观>主题管理面板中看到它。我想知道是否有可能做我想做的事。我假设这一直都在做,但为什么它对我不起作用呢?