WordPress のテーマをウィジェットが使用できるようにする

ウィジェットは今や WordPress の標準機能です。テーマは古い形式のサイドバーをサポートしながら、ウィジェットをサポートされるようにしましょう。

ウィジェットに対応する方法

まず、サイドバーに <ul> タグを使用しているかどうか確認しましょう。もし確認できないようでしたら、WordPress フォーラムや掲示板などで確認方法を聞いてみてください。ここでは確認方法を掲載していません。

次のコードはよくあるサイドバーの例です。

<ul id="sidebar">
 <li id="about">
  <h2>About</h2>
  <p>This is my blog.</p>
 </li>
 <li id="links">
  <h2>Links</h2>
  <ul>
   <li><a href="http://example.com">Example</a></li>
  </ul>
 </li>
</ul>

サイドバー全体が <ul> タグでできていて、タイトルが <h2> タグになっていることに注意してください。すべてのテーマがこのようになっている訳ではありませんし、このようになっている必要もありません。しかし、私たちが調査したテーマでは、最近のほとんどの一般的なサイドバーはこのようになっています。id=”links” という属性がついているエレメントが基本的な1つのウィジェットに該当します。

Widget API はテンプレートタグのようにテンプレート内で使える簡単な関数を提供しています。これらの関数を使うことで WordPress がテーマ内の古いタイプのサイドバーを動的なウィジェットを使用したサイドバーに置き換えます。

次のコードは先ほどのコードと同じ内容で、サイドバーをウィジェット対応した基本的な例です。

<ul id="sidebar">
<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>
 <li id="about">
  <h2>About</h2>
  <p>This is my blog.</p>
 </li>
 <li id="links">
  <h2>Links</h2>
  <ul>
   <li><a href="http://example.com">Example</a></li>
  </ul>
 </li>
<?php endif; ?>
</ul>

わかりますか?先ほどのコードに2行追加しただけで、ヴィジェットに対応したサイドバーが表示されます。管理画面ですべてのウィジェットを削除すると、古いサイドバーが表示されます。

次に functions.php を修正します。もし、WordPress 2.0以上を使用していれば、テーマフォルダ(ディレクトリ)にある functions.php を変更することでも修正できます。

functions.php がない場合は、functions.php ファイルを新しく作成してください。functions.php ファイルに次のコードを追加してください。(ファイルの最初や最後に空行がないようにしてください。)

<?php
if ( function_exists('register_sidebar') )
    register_sidebar();
?>

このコードは、テーマを使用する場合は必ず1つ以上のウィジェットを使うように限定します。ウィジェットがひとつもない場合は、ウィジェット追加ページに移動します。サイドバー1のボックスにウィジェットを追加して保存すると、テーマが選択されます。

サイドバーがリストになっていない場合

サイドバーが <ul> タグを使用していない場合は、パラメーター(引数)を使用して出力する形式を指示します。

元のコードが次のような場合、

<div id="sidebar">
 <div class="title">About</div>
 <p>This is my blog.</p>
 <div class="title">Links</div>
 <ul>
  <li><a href="http://example.com">Example</a></li>
 </ul>
</div>

上のコードのような場合、ウィジェットが <li> タグになっていると問題があります。次にウィジェットのタイトルが <h2> タグの代わりに <div class=”title”> タグになってしまっています。通常は li/li/h2 タグを使用するようになっていますが、function.php に次のコードを入れることで、この問題に対応することができます。

<?php
if ( function_exists('register_sidebar') )
    register_sidebar(array(
        'before_widget' => '',
        'after_widget' => '',
        'before_title' => '<div class="title">',
        'after_title' => '</div>',
    ));
?>

そして、sidebar.php を次のように修正することでウィジェットに対応できます。

<div id="sidebar">
<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>
 <div class="title">About</div>
 <p>This is my blog.</p>
 <div class="title">Links</div>
 <ul>
  <li><a href="http://example.com">Example</a></li>
 </ul>
<?php endif; ?>
</div>

さらに、before_widget では id や class を指定するために、sprintf のディレイブである %1$s や %2$s を使うことができます。id はウィジェットのタイトルをサニタイズした文字が入ります。(id が重複しないよう注意が必要です。) class はウィジェットのコールバックになります。id や class を指定することで、それぞれのウィジェットが固有の id を持ったり、class を持つことができます。

次のコードにすれば、テーマにより自由度を持たせることができます。

    'before_widget' => '<div id="%1$s" class="widget %2$s">',
    'after_widget' => '</div>',

HTML は良くなったけど、ブラウザの表示が汚い場合

CSS を使ってください。

複数のサイドバーをすべてウィジェット対応にする場合

register_sidebar(n) の n にサイドバーの番号を入れてください。n は1から始まります。n に数字ではなく文字を指定することもできますが、他のテーマとの互換が難しくなります。

About this entry

  1. WordPressに関する気になる記事いろいろ | Take It Crazzzy! 3.3.09 / 11pm

    [...] WordPressのテーマをウィジェットが使用できるようにする|Template Style [...]

  2. niko - wordpress:テーマ:ウィジェットが使用できるようにする 3.6.09 / 7pm

    [...] http://www.templatestyle.in/item/widgetizing_wordpress_themes.html テンプレのサイドナビあたりにphpの文を加えれば、ウィジェット非対応のテーマでもウィジェット使用できるようになるようです。 [...]

  3. Stella Grafica ステラグラフィカ 5.24.10 / 9pm

    [...] WordPress のテーマをウィジェットが使用できるようにする  Template Style WordPress サイドバーウィジェットのTips | VIVABlog [...]

コメントの投稿

名前 (required)

メール (required)

ウェブサイト