ウィジェットに対応したらエラー


管理画面を見てたらテーマ周りに「ウィジェット」という項目があるのに気づきました。そういえばそんな機能がプラグインでリリースされて、そのうち本体に取り込まれるって話があったよね。なんてコトを思い出しながらクリックしてみると「今使ってるテーマはウィジェットに対応してないぜべいべー:cool:」みたいなメッセージが表示されました。

そういえば、テーマの改造が必要だった記憶があります。どんな改造をすればいいのかはリンクで示されてたのでそのとおりやってみるとエラー。どれかプラグインがウィジェットに対応してなくてエラーなのかと思って2.2からの新機能:!:「一括無効」をやってみましたがやっぱりエラー。だとすると原因は確実にテーマの改造です。

そんなに大したことはやってないはずなのになんでー?と少々いらだちながらエラーメッセージでググってみると原因らしきことが書かれています。


Warning: Cannot modify header information @TagPress

色々と調べてみると、以下のどちらかの影響によるものであろうことがわかった。

1. < ?php および ?> のタグの周りに、無駄なスペースやリターンコードが入っている場合
2. キャラクター設定のところに大文字で「UTF-8」と設定されている場合

つまり、対処方法は

1. < ?php および ?> のタグの周りから、無駄なスペースやリターンコードを削除する。いったんタグの行を削除して書き直すなどしてみると良い。
2. キャラクター設定の「UTF-8」や「ja-UTF」を「utf-8」「ja-utf」とする。

えー?そんなのでエラー出ちゃうの??と半信半疑ながらfunctions.phpの末尾についてた改行を消してみたらアッサリとエラーは消えてしまいました。まじっすか。:shock:

というわけで以下はテーマをウィジェット対応するためのメモ。

まずはサイドバー部分のテーマファイルを見ます。ulのなかにliで項目が並んでて、項目の見出しがh2でそのあとに項目の中身が書かれてる、という最もオーソドックスなタイプの場合はいちばん外側のulをさがします。たぶんid=”sidebar”ってなってる。見つけたらその直後に

< ?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>

の1行をくわえます。そして対応する(いちばん外側の)/ulをさがしてその直前にも

< ?php endif; ?>

をくわえます。サイドバーへの改造はこれだけ。これが終わったらテーマへ1つファイルを追加します。名前はfunctions.php。中身は

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

末尾とかに変な改行が入らないように注意。:lol:

もしすでにfunctions.phpが存在している場合は一番最後にでも追加すればOKのはず。じつは最初、ファイル名の最後のsを入れてなくて、何も変化がないのに首をひねってたのはひみつです。:oops:

サイドバーの構造が上記とは違っている場合はfunctions.phpへ追加で

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

を書き加えます。もちろん4?7行目はテーマにあわせて&全角は半角へ書き換えてください。項目のタイトルと中身に対して適用するタグを指定してあげます。くわしくは震源地(?)のページでどうぞ。

というわけで、ウィジェットの中身に何も登録されていない場合は旧タイプ(?)のサイドバーが表示されます。2.2移行のみ対応、なテーマならifなんてやらずにulの中身は…ってあれ?表示しないってやってるだけやん。dynamic_sidebarはどこに入り込んでるの?もしかしてsidebar.php自体を乗っとってる…んだったら分岐なんかやる必要ないし。あれれれ?:?:

どなたかご存知の方教えてplz!

そしてウィジェットの機能は使ってません。いや、なんか、対応しただけでおなかいっぱいになっちゃって。:razz:


“ウィジェットに対応したらエラー” への2件のフィードバック

  1. 3日間この問題解決できずに苦しんでいました。
    ありがとうございます!!!!!!!!!!!!!!!!!!!!!!!!!!

通りすがり へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。