it-swarm-ja.com

the_widget()とウィジェットのID

名前だけを表示するウィジェットがあるとしましょう。

    <p>
         <?php echo $args['widget_id'] ?>
    </p>

ウィジェットをサイドバーにドラッグ&ドロップすると、次のように表示されます。

<p>
     myWidget-number
</p>

問題は、このウィジェットをショートコードで呼び出したいということです。

    (...)
            ob_start();    
            the_widget(MyWidget);
            return ob_get_clean();
   }

    add_shortcode('myWidget_short', 'myWidget_shortcode');

そして[myWidget_short]を実行するとそれだけが表示されます

<p>
</p>

ショートコードでウィジェットのIDを呼び出す方法はありますか?

2
Wordpressor

私は@ One Trick Ponyが正しかったと思います。

ショートコードウィジェットにはIDがありませんので、回避策を見つけました。

最初にPHP Rand関数を使いました:

$var = Rand();

それから、IDに "var"を追加して、同じウィジェットを呼び出す他のショートコードと衝突しないようにします(それぞれがIDの最後に異なる乱数を持ちます)。

<div id="myWidget-<?php echo $var?>;"></div>
1
Wordpressor

サイドバーを呼び出すためのショートコードとウィジェットを呼び出すためのショートコードを Total Widget Control に組み込んだ。 ob_start()内でdynamic_sidebarを呼び出すだけの、サイドバーの作成が非常に簡単な場所。

しかし、個々のウィジェットの呼び出しは非常に複雑でした。 global $wp_registered_widgets私は、完全なウィジェットインスタンスを含むグローバル変数だと思います。まずウィジェットインスタンスを取得するための独自の関数を作成し、次にウィジェットを表示するためにウィジェットコールバック関数を呼び出す必要があります。

実際にthe_widgetを使用しようとしているコードでは、ウィジェットインスタンスをパラメータとして渡す必要があります。ウィジェット自体を探し回ることはできません。