WordPressで設置済み、使用停止中のウィジェット全てのID名を取得する方法

WordPressで「今どんなウィジェットが設定されているのか」を確認するには、以下の方法がラクです。

WordPressで今設定されているウィジェットを確認する方法

WordPressの管理画面にログインして左メニューにある「外観」→「ウィジェット」をクリックします。

下のようにウィジェットの設定画面に切り替わります。

「ウィジェットエリア」と書いてある場所に注目しましょう。

ウィジェットが設置されていますね。

  1. 検索
  2. 最近の投稿
  3. 最近のコメント
  4. アーカイブ
  5. カテゴリー
  6. メタ情報

計6つ、設置されています。

WordPressを初めてインストールして、Twenty Fifteenテーマを適用した直後の状態でトップページを開くと、下のように表示されていると思います。

トップページを開いてウィジェットの表示場所をチェックしよう

赤枠で囲ってある部分が、今ほど確認した6つのウィジェットが表示されているエリアですね~。

というわけで以上が前提で、ここからが本題です。

設置されているウィジェットのID名を取得したい場合ってどうする

最近、ウィジェットを設置した時に割り振られているID名を取得したいことがありました。

「ID名ってなんだ?」となる方もたくさんいると思います。例えば「検索ウィジェット」を設置すると、下のようなコードが出力されます。

<aside id="search-2" class="widget widget_search"><form role="...

コード内にある「search-2」がID名です。

で、このID名を取得したい場合は、「wp_get_sidebars_widgets」を使うと取得できることを知りました。

さっそくウィジェットのID名を取得しよう

試しに、先ほどと同じ条件でやってみましょう。

  • WordPressをインストールした直後
  • Twenty Fifteenテーマを適用した状態

この条件で「wp_get_sidebars_widgets」を使って下のようなPHPコードを書いて、ウィジェットの情報を取得します。

PHPコード

<?php var_dump(wp_get_sidebars_widgets()); ?>

出力結果

array(2) {
  ["wp_inactive_widgets"]=>
  array(0) {
  }
  ["sidebar-1"]=>
  array(6) {
    [0]=>
    string(8) "search-2" //検索
    [1]=>
    string(14) "recent-posts-2" //最近の投稿
    [2]=>
    string(17) "recent-comments-2" //最近のコメント
    [3]=>
    string(10) "archives-2" //アーカイブ
    [4]=>
    string(12) "categories-2" //カテゴリー
    [5]=>
    string(6) "meta-2" //メタ情報
  }
}

上の出力結果を見ると、配列で取得できていますね。

ウィジェットエリアのID名、ウィジェットID名がそれぞれ取得できる

「sidebar-1」は、ウィジェットエリアのID名です。ウィジェットのID名と混同しないように気をつけましょう。

・・・「sidebar-1」ってIDのウィジェットエリア内に、6つのウィジェットIDが入ってるという理屈がわかれば大丈夫だと思います。難しく考える必要はないです。

使用停止中のウィジェットIDも取得できる

「wp_inactive_widgets」には、使用停止中のウィジェットが入ります。上のコードの例だと、使用停止中のウィジェットは存在しない状態ですね。

じゃあここで、使用停止中のウィジェットに「固定ページ」を入れてみます。

で、もう一度「wp_get_sidebars_widgets」を使って表示。

出力結果

array(2) {
  ["wp_inactive_widgets"]=>
  array(1) {
    [0]=>
    string(7) "pages-2"
  }
・・・以下省略

すると上のコードのように「wp_inactive_widgets」に固定ページのID名が入っています。

おまけ:ウィジェットエリアのID名はここで決められています

先ほど出てきた「sidebar-1」というウィジェットエリアのID名ですが、Twenty Fifteenテーマの「functions.php」ファイルで指定されています。

function twentyfifteen_widgets_init() {
 register_sidebar( array(
 'name' => __( 'Widget Area', 'twentyfifteen' ),
 'id' => 'sidebar-1',
 'description
・・・以下省略

register_sidebar」を使ってウィジェットエリアを作成。その時にウィジェットエリアのID名「sidebar-1」を指定しているってことですね。

まとめ

今回ご紹介した設置済み・使用停止中の全てのウィジェットのID名を取得する「wp_get_sidebars_widgets」ですが、私の場合は表示しているウィジェットのID名を判別して、特定のウィジェットが表示されている場合は処理を付け加える、など行うために使いました。

以上、何かのご参考となりましたら幸いです。

著者:bouya Imamura