WordPressでテーマを作っていると、大抵はウィジェットエリア(dynamic_sidebar)を利用する事となると思いますが、たまに管理画面上に表示はされてるのにウィジェットをいくらセットしても保存されない(管理画面からも保存後に他のページにいって戻ってくると消えている)という現象がおこり何が何だかさっぱりな状態だったのですが、なんとなく原因っぽいのを見つけた気がするのでとりあえずメモ。
はじめに
現時点ではこれがバグなのか、それとも仕様なのかも判らないです。そしてこの解決方法が正しいものなのかも不明です。
ただ、自分の場合はこの方法で解決できたということで、同じ現象で悩んでいる人がいたらヒントになればいいなと思い、残しておきます。
改めて現象をまとめてみる
おおまかに今回はまった部分をまとめてみると、以下のとおりです。
- functions.php で register_sidebars をつかってサイドバーを登録、あるいは register_sidebar でサイドバーの登録を行っている。
- 管理画面の「外観」→「ウィジェット」には表示される。
- 上記「ウィジェット」管理ページから登録したサイドバーにウィジェットを追加して保存すると、一見保存されたように見える。
- その状態で表画面を表示しても「なにも表示されない」
(まれにその状態では表示されることもある) - それから再び「ウィジェット」管理ページに戻ってくると、サイドバーの中身が空になっている
原因
register_sidebar( register_sidebars ) 関数に配列を指定する際に、’id’の値に「大文字が含まれている」とこの現象が発生している可能性が高いです。
というのも普段使ってるようなサイドバーがちょっとしかないテーマならいいんですが、今回業務で作っていたテーマは沢山のサイドバーが複雑に配置されていたので、名前を管理するために、
「sb_category_firstSideNav」といった感じに一部キャメルケースを使って命名していました。(ホントはこれもあまり行儀の良い書き方では無いのかもしれませんが…)
そして、そのサイドバーでのみこの現象が発生し、それ以外のちょこちょことしたサイドバー(それらは全て「sb_footer」みたいに名前が1単語で完結していたためキャメルケースにならなかった)
解決法
全て小文字にする
そしてもし「firstsidenav」みたいになって読みにくいなら、スネークケースにする。
自分みたいに併用していて、記法に意味を持たせていた場合は、アンダースコアの数を増やすのも有りなのかもしれません。
例:sb__category__first_side_nav
とりあえずこれで保存はされるようになったっぽいので、今のところこれで様子見中です。また進展があれば書こうと思います。
同じ現象で途方にくれていたところ、このページをみつけました。試したところ見事解消されました。助かりました。ありがとうございました。
通りすがりさん
お役に立てたようでよかったです。コメントありがとうございました!
[…] ットを入れても保存できない事がある現象 | NeGiMeMo.net http://negimemo.net/2506 […]