这里有一个(未经测试的)想法,我们将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\'
, 我们实际上避免了递归循环。