問題:
したがって、基本的にこれはつまり、サイドバーに保存されているウィジェットを取得するためにfunctions.phpフィルターコードを使用してから、表示される前に別のサイドバーに挿入する方法が必要です _になります。
これは、状況に応じて同じウィジェットを複数のサイドバーに配置する必要があるすべての種類のシナリオ、特に「十分なサイドバー」を持たない柔軟性のない親テーマを扱う場合に役立ちます。
「ウィジェットコントロール」プラグインや、状況に応じて個々のウィジェットを表示/非表示にできるJetpackオプションについて説明する必要はありません。私が必要としているのは、ウィジェットがどの他のサイドバーに表示されるかを制御する方法です。
プラグインの提案は歓迎します彼らが重要な問題を解決するならば。
ありがとうございます。私はどちらかの方法で私自身のためにこれを理解しようとしますそして私が満足のいく解決策を得たら返事をします:)
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'
と異なることを確認することで、実際には再帰ループを回避します。