今回は、サイドバー領域に、標準ウィジェットを表示できるよう、
組み込みをします。
WordPress 3.8 や 3.9 に標準でインストールされてある TwentyFourteen や
TwentyThirteen、TwentyTwelve なんかで、管理画面 [外観 - ウィジェット] から
自由にパーツを追加できるアレですね。
今回の作業対象は、ウィジェット表示用に用意した sidebar.php
(実際は左サイドバーである sidebar-left.php、右サイドバーである sidebar-right.php)
と function.php になります。
まず、function.php に以下のコードを追記します。
//--- ウイジェット追加
function sidebar_widgets_init() {
// ウイジェット配置用サイドバー作成
register_sidebar(array(
'name' => '左サイドバー',
'id' => 'sidebar-left',
'description' => '左側サイドバー領域に表示されます。',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widget-title">',
'after_title' => '</h4>',
));
register_sidebar(array(
'name' => '右サイドバー',
'id' => 'sidebar-right',
'description' => '右側サイドバー領域に表示されます。',
'before_widget' => '<div id="%1$s" class="widget %2$s">',
'after_widget' => '</div>',
'before_title' => '<h4 class="widget-title">',
'after_title' => '</h4>',
));
}
add_action('widgets_init', 'sidebar_widgets_init');
ウィジェットは部品であり、サイドバーは部品であるウィジェットを
配置するための領域です。
ウィジェットを利用できるようにするためには
サイドバーを登録する必要があります。
一つ関数を作り、この中に register_sidebar 関数を使って
サイドバーを登録する処理を記述します。
複数サイドバーを用意する場合は、上記例のように
用意するサイドバーの分だけ記述しましょう。
register_sidebar 関数のパラメータには、サイドバーの属性情報を
連想配列で与えてやります。
id はサイドバーIDです。ユニークになるようにつけましょう。
name はサイドバー名、description はサイドバーの説明となります。
このあたりは管理画面の [外観 - ウィジェット] での表示に反映される部分ですので、
比較的分かりやすいでしょう。
before_widget と after_widget はウィジェットの前後に挿入されるタグ、
before_title と after_title はウィジェットタイトルの前後に挿入されるタグになります。
そして、この作成した関数を、add_action 関数を使って
WordPress にアクション関数として追加してやります。
第一パラメータは ‘widgets_init’ を、第二パラメータには作成した関数を指定して、
ウィジェットの初期化処理が走る際に、関数内の処理を走らせてやるようにします。
これで、管理画面 [外観 - ウィジェット] の画面でサイドバーが表示され、
ウィジェットが配置できるようになります。
実際にサイドバーを表示する箇所である、
sidebar-left.php と sidebar-right.php は以下のように記述します。
<?php
if (is_active_sidebar('sidebar-left')) {
dynamic_sidebar('sidebar-left');
}
?>
<?php
if (is_active_sidebar('sidebar-right')) {
dynamic_sidebar('sidebar-right');
}
?>
それぞれ2行目の is_active_sidebar 関数は、
パラメータで指定された名前もしくは ID のダイナミックサイドバーが
有効なものであるかどうか確認します。
有効 (true) であった場合、それぞれ3行目の dynamic_sidebar 関数で
ダイナミックサイドバーを表示しています。
これで、管理画面 [外観 - ウィジェット] の画面で配置されたウィジェットが
表示されるようになります。
では、ウィジェット用のスタイルを style.css に追記します。
/*-----------------------------
ウイジェット(左メニュー/右メニュー)
一部冗長な記述になるが、後々のメンテナンス性を考慮し、ウイジェットごとに個別に指定しています
------------------------------*/
/* 基本指定 */
#side-left,
#side-right {
font-size: 12px;
line-height: 16px;
}
.widget a {
color: #333333;
}
.widget a:hover {
color: #cc0033;
}
/* ウイジェットタイトル */
.widget-title {
font-size: 14px;
font-weight: bold;
line-height: 28px;
vertical-align: middle;
margin: 10px 0px 5px 0px;
padding: 1px 0px 0px 30px;
background-image: url(images/circle-gray.png);
background-repeat: no-repeat;
background-position: left top;
}
.widget-title img {
vertical-align: middle;
margin: 0px;
padding: 0px;
}
/* RSS */
.widget_rss .widget-title {
vertical-align: top;
margin: 10px 0px 5px 3px;
padding: 1px 0px 0px 0px;
background-image: none;
}
.widget_rss ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_rss ul li {
margin: 0px 0px 3px 0px;
padding: 0px;
}
.widget_rss .rss-date {
font-size: 10px;
line-height: 12px;
}
.widget_rss rssSummary {
font-size: 10px;
line-height: 12px;
}
/* アーカイブ */
.widget_archive ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_archive ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* カスタムメニュー */
.widget_nav_menu ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_nav_menu ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* カテゴリ */
.widget_categories ul {
list-style-type: square;
list-style-position: outside;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_categories ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
.widget_categories ul.children {
list-style-type: circle;
list-style-position: outside;
margin: 0px 0px 0px 10px;
padding: 0px;
}
.widget_categories ul.children li {
margin: 5px 0px 0px 0px;
padding: 0px;
}
/* カレンダー */
.widget_calendar table {
line-height: 18px;
width: 80%;
margin: 0px auto 0px auto;
padding: 0px;
border-collapse: collapse;
border: 1px solid #cccccc;
}
.widget_calendar caption {
font-weight: bold;
text-transform: uppercase;
margin-bottom: 5px;
}
.widget_calendar thead th,
.widget_calendar tbody td {
text-align: center;
border: 1px solid #cccccc;
}
.widget_calendar thead th {
background-color: #666666;
color: #ffffff;
}
.widget_calendar tbody a {
background-color: #ccffff;
color: #0033cc;
display: block;
}
.widget_calendar tbody a:hover {
background-color: #66ccff;
color: #0033cc;
}
.widget_calendar #prev {
padding-left: 5px;
text-align: left;
}
.widget_calendar #next {
padding-right: 5px;
text-align: right;
}
/* タグクラウド */
.widget_tag_cloud .tagcloud {
line-height: normal;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
/* テキスト */
.widget_text .textwidget {
line-height: normal;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
/* メタ情報 */
.widget_meta ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_meta ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* 固定ページ */
.widget_pages ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_pages ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* 最近のコメント */
.widget_recent_comments ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_recent_comments ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* 最近の投稿 */
.widget_recent_entries ul {
list-style-type: none;
margin: 0px 0px 20px 0px;
padding: 0px 0px 0px 30px;
}
.widget_recent_entries ul li {
margin: 0px 0px 10px 0px;
padding: 0px;
}
/* 検索 */
.widget_search {
margin: 10px 0px 20px 0px;
}
.widget_search .widget-title {
margin: 0px 0px 5px 0px;
}
.widget_search #searchform {
position: relative;
margin: 0px;
padding: 0px;
}
.widget_search #s {
width: 156px;
height: 24px;
border: none;
border-radius: 0px;
color: #333333;
font-size: 14px;
padding: 4px 10px 4px 10px;
background-color: #d7d7d7;
}
.widget_search #searchsubmit {
position: absolute;
top: 0;
_top: 1px;
left: 176px;
border-radius: 0px;
}
ウィジェットごとにどんなタグや id、class が指定されているか
(ウィジェットのソースを全て読むのも大変だし) 分かりにくい
ところがありますので、少しずつ動きを見ながら指定していけば
いいかと思います。
如何でしたでしょうか?
では、また次回・・・




SmartStyle