概要と目標
様々な機能の、
有効化方法を知ろう。
アイキャッチ画像やページネーション、カスタムメニュー、ウィジェットなど様々な機能を有効する方法を学習しよう。
アイキャッチ画像やページネーション、カスタムメニュー、ウィジェットなど様々な機能を有効する方法を学習しよう。
WordPressの投稿画面には、デフォルトではアイキャッチ画像が設定できない。
投稿画面からアイキャッチ画像を設定できるようにするには、
タイトルを有効化したのと同様で、add_theme_support()で有効化する。
| 項目 | 引数 |
|---|---|
| タイトルタグの出力 | 'title-tag' |
| アイキャッチ画像 | 'post-thumbnails' |
| 投稿フォーマット |
'post-formats'(第2引数で、フォーマットを配列で指定) |
| カスタム背景 |
'custom-background' |
| カスタムヘッダー |
'custom-header' |
| フィードリンク |
'automatic-feed-links' |
| HTML5のマークアップ |
'html5'(第2引数で、HTML5マークアップの使用を許可する機能を配列で指定) |
add_theme_support()を追加する
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
/*
アイキャッチ画像
----------------------------------- */
add_theme_support( 'post-thumbnails' );
}
add_action( 'after_setup_theme', 'dummy_setup' );
WordPressの管理画面の「メディア設定」には画像サイズ(大、中、サムネイル)を設定できる。
これから以外テーマ専用の画像サイズを追加すること出来る。
ここでサイズを追加すると、画像をアップロードする際、WordPrssが自動でそのサイズの画像を生成する。
テーマ専用のデフォルトのデフォルトのアイキャッチサイズを設定するには、set_post_thumbnail_size()を使い、
サイズを追加するには、add_image_size()という関数を使えば、追加できる。
set_post_thumbnail_size
関数 ・・・ アイキャッチ画像のデフォルトの大きさを指定する関数set_post_thumbnail_size(画像の幅, 画像の高さ, トリミングするか?)
省略可
トリミングするか? ・・・ true(指定したサイズで画像を切り抜く。配列で指定することで切り抜く位置を指定することもできる) / false(指定した幅または、高さの大きさでリサイズ)【初期値】
引数の詳細はWordPress Codex 日本語版を参照
add_image_size
関数 ・・・ テーマ専用の画像サイズを追加させる関数add_image_size(サイズの名前, 画像の幅, 画像の高さ, トリミングするか?)
省略可
トリミングするか? ・・・ true(指定したサイズ画像を切り抜く。配列で指定することで切り抜く位置を指定することもできる) / false(指定した幅または、高さの大きさでリサイズ)【初期値】
引数の詳細はWordPress Codex 日本語版を参照
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
/*
アイキャッチ画像
----------------------------------- */
add_theme_support( 'post-thumbnails' );
// 画像サイズを追加
set_post_thumbnail_size(776, 549, true); // 投稿ページ用
add_image_size('dummy-thumbnail', 248, 175, true); // 投稿一覧用
}
add_action( 'after_setup_theme', 'dummy_setup' );
the_post_thumbnail()の引数に指定する。
add_image_size()関数で追加した画像サイズは、the_post_thumbnail()関数の引数に、設定した名前を指定する。
すると、指定したサイズにWordPressがリサイズした画像ファイルが読み込まれる。
<article class="c-media p-article">
<div class="c-media__body">
<h3 class="p-article__title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_category(); ?>
<p class="p-article__text"><time datetime="<?php the_time( DATE_W3C ); ?>" class="p-article__time"><?php the_time( get_option( 'date_format' ) ); ?></time></p>
</div>
<figure class="c-media__thumbnail">
<?php if ( has_post_thumbnail() ) : ?>
<?php the_post_thumbnail( 'dummy-thumbnail' ) ?>
<?php else : ?>
<img src="<?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture.png" srcset="<?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture.png, <?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture@2x.png 2x" alt="アイキャッチ画像はありません">
<?php endif; ?>
</figure>
<!-- /.c-media__thumbnail -->
</article>
the_post_thumbnail()関数で生成される <img> タグは、srcset属性も含め、WordPressが自動に生成する。the_post_thumbnail_url()という関数を使って、アイキャッチ画像のファイルパスのみを出力し、独自で高解像度ディスプレイに対応する場合は、以下のような方法で対応することもできる。
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
アイキャッチ画像
----------------------------------- */
add_theme_support( 'post-thumbnails' );
// 画像サイズを追加
set_post_thumbnail_size(776, 549, true); // 投稿ページ用
add_image_size('dummy-thumbnail', 248, 175, true); // 投稿一覧用
add_image_size('dummy-thumbnail@2x', 496, 350, true); // 投稿一覧のレティーナ用
}
<?php if ( has_post_thumbnail() ) : ?>
<img src="<?php the_post_thumbnail_url('dummy-thumbnail') ?>" srcset="<?php the_post_thumbnail_url('dummy-thumbnail') ?>, <?php the_post_thumbnail_url('dummy-thumbnail@2x') ?> 2x" alt="<?php echo esc_attr(get_post_meta( get_post_thumbnail_id(), '_wp_attachment_image_alt', true )) ?>">
<?php else : ?>
<img src="<?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture.png" srcset="<?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture.png, <?php echo esc_url(get_theme_file_uri()); ?>/assets/images/no-picture@2x.png 2x" alt="アイキャッチ画像はありません">
<?php endif; ?>
WordPressでは投稿数が、管理画面で設定した「1ページに表示する最大投稿数」より多くなると、自動で複数ページに分類される。
ただ、ページにアクセスするためのページネーションは、テンプレートタグで出力する必要がある。
the_posts_pagination()という関数を使えば、ページネーションを出力できる。
the_posts_pagination
関数 ・・・ 投稿の前と次のページへリンクするページ番号のセットを出力する関数the_posts_pagination(オプション)
省略可
オプション ・・・ 以下の引数を配列で指定
・mid_size (整数) - 現在のページの左右にそれぞれ表示するページ番号の数。デフォルトは1。
・prev_text (文字列) - 投稿の前のセットへのリンクテキスト。デフォルトは「Previous」。
・next_text (文字列) - 投稿の次のセットへのリンクテキスト。デフォルトは「Next」。
・screen_reader_text (文字列) - navの見出し用テキスト。デフォルトは「Posts navigation」。
引数の詳細はWordPress Codex 日本語版を参照
the_posts_pagination()関数でページネーションを出力する
</article>
<?php endwhile; ?>
<?php
// ページネーション
$args = [
'prev_text' => '<span class="screen-reader-text">前へ</span>',
'next_text' => '<span class="screen-reader-text">次へ</span>'
];
the_posts_pagination( $args );
?>
<?php else : ?>
<p>投稿がありません。</p>
<?php endif; ?>
</section>
the_posts_pagination()で出力されるHTMLthe_posts_pagination()はデフォルトで下記のようなHTMLを出力する。<nav class="navigation pagination" role="navigation">
<h2 class="screen-reader-text">投稿ナビゲーション</h2>
<div class="nav-links">
<a class="prev page-numbers" href="http://localhost/wp-lesson/">前へ</a>
<a class='page-numbers' href='http://localhost/wp-lesson/'>1</a>
<span aria-current='page' class='page-numbers current'>2</span>
<a class='page-numbers' href='http://localhost/wp-lesson/page/3/'>3</a>
<a class="next page-numbers" href="http://localhost/wp-lesson/page/3/">次へ</a>
</div>
</nav>
WordPressには管理画面からメニューを自由に変更できる「カスタムメニュー」という機能がある。
このカスタムメニューを使うには、「functions.php」で有効化する必要がある。
カスタムメニューを使うには、register_nav_menu()関数か、register_nav_menus()関数で有効化する必要がある。
両者の違いは、ひとつのメニューを登録するか、複数のメニューを登録するかの違いになる。
このレッスンでは汎用性の高い、register_nav_menus()を利用する。
register_nav_menus
関数 ・・・ 複数のナビゲーションメニューを登録する関数register_nav_menus(メニューのキーと説明の連想配列)
引数の詳細はWordPress Codex 日本語版を参照
register_nav_menus()関数でカスタムメニューを有効化する
/*======================================
初期設定
======================================*/
function dummy_setup() {
/*
Titleタグ
----------------------------------- */
add_theme_support( 'title-tag' );
/*
アイキャッチ画像
----------------------------------- */
add_theme_support( 'post-thumbnails' );
// 画像サイズを追加
set_post_thumbnail_size(776, 549, true); // 投稿ページ用
add_image_size('dummy-thumbnail', 248, 175, true); // 投稿一覧用
/*
カスタムメニュー
----------------------------------- */
$locations = [
'global' => 'Global Navigation'
];
register_nav_menus($locations);
}
add_action( 'after_setup_theme', 'dummy_setup' );
wp_nav_menu()関数を記述。
登録したメニューを表示するには、wp_nav_menu()という関数を使う。
wp_nav_menu
関数 ・・・ ナビゲーションメニューを表示する関数wp_nav_menu(オプションの連想配列)
省略可
引数の詳細はWordPress Codex 日本語版を参照
| キー | 値 | 初期値 |
|---|---|---|
'theme_location' |
表示するカスタムメニュー名register_nav_menus()で登録した名前
|
なし |
'menu_class' |
ul要素に指定する class名 | なし |
'menu_id' |
ul要素に指定する id名 | {メニューのスラッグ}-{連番} |
'container' |
ul要素を包む要素 (「div」または、「nav」、囲まない場合は「false」で指定) |
div |
'container_class' |
ul要素を包む要素に指定する class名 | menu-{メニューのスラッグ}-container |
'container_id' |
ul要素を包む要素に指定する id名 | なし |
'before' |
リンクテキストの前のテキスト | なし |
'after' |
リンクテキストの後のテキスト | なし |
'link_before' |
リンクの前のテキスト | なし |
'link_after' |
リンクの後のテキスト | なし |
'depth' |
何階層まで表示するか (「0」は全階層) |
0 |
wp_nav_menu()関数で置き換えて、カスタムメニューを表示する
<nav class="p-header__nav">
<h2 class="screen-reader-text">サイト内メニュー</h2>
<button class="js-drawer c-button p-hamburger" aria-controls="globalNav" aria-expanded="false">
<span class="p-hamburger__line">
<span class="screen-reader-text">メニューを開閉</span>
</span>
</button>
<?php
$args = [
'theme_location' => 'global',
'menu_class' => 'p-globalNav',
'menu_id' => 'globalNav',
'container' => false
];
wp_nav_menu($args);
?>
</nav>
wp_nav_menu()で出力されるHTMLwp_nav_menu()はデフォルトで下記のようなHTMLを出力する。<ul id="globalNav" class="p-globalNav">
<li id="menu-item-41" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item current_page_item menu-item-home menu-item-41"><a href="http://localhost/wp-lesson/" aria-current="page">Home</a></li>
<li id="menu-item-81" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-81"><a href="http://localhost/wp-lesson/about-me/">About Me</a></li>
<li id="menu-item-85" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-85"><a href="http://localhost/wp-lesson/contact/">Contact</a></li>
</ul>
ウィジェットを使うには、まず「functions.php」でウィジェットを登録する必要がある。
登録は、register_sidebar()という関数を使う。
「sidebar」という名前だが、サイドバー用のウィジェットという意味ではない。
なお、登録したウィジェットは「widgets_init」というアクションフックで呼び出す。
register_sidebar
関数 ・・・ ウィジェットを登録する関数register_sidebar(オプションの連想配列)
省略可
引数の詳細はWordPress Codex 日本語版を参照
| キー | 値 | 初期値 |
|---|---|---|
'name' |
ウィジェットの名前 (管理画面に表示される) |
'Sidebar' を翻訳した文字列と ID の数字 |
'id' |
ウィジェットのID (呼び出す時に使うID。空白を除く小文字の半角英数字で指定) |
unique-sidebar-id (指定しないとデバックモードで警告がでる) |
'description' |
ウィジェットの説明文 (管理画面に表示される) |
空白文字列 |
'class' |
管理画面のサイドバーに割り当てられるCSSの class名 (サイトのフロント側では出力されない) |
空白文字列 |
'before_widget' |
ウィジェットの直前に出力する HTML テキスト | <li id="%1$s" class="widget %2$s"> |
'after_widget' |
ウィジェットの直後に出力する HTML テキスト | </li>\n |
'before_title' |
タイトルの直前に出力する HTML テキスト | <h2 class="widgettitle"> |
'after_title' |
タイトルの直後に出力する HTML テキスト | </h2>\n |
register_sidebar()を使って、ウィジェットを登録する
/*======================================
ウィジェットの有効化
======================================*/
function dummy_widgets_init() {
/*
サイドバー
----------------------------------- */
$args = [
'name' => 'Sidebar',
'id' => 'sidebar',
'before_widget' => '<aside id="%1$s" class="p-widget -light %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h2 class="p-widget__title">',
];
register_sidebar($args);
}
add_action( 'widgets_init', 'dummy_widgets_init' );
dynamic_sidebar()関数を使う。
ウィジェットを表示するには、dynamic_sidebar()という関数を使う。
なお、ウィジェットがアクティブかを確認するには、is_active_sidebar()を使う。
dynamic_sidebar
関数 ・・・ アクティブなウィジェットを順に呼び出し、サイドバーに表示する関数dynamic_sidebar(ウィジェットの名前かID)
省略可
引数の詳細はWordPress Codex 日本語版を参照
is_active_sidebar
関数 ・・・ あるサイドバーが有効化されているかどうかを調べる関数is_active_sidebar(ウィジェットの名前かID)
省略可
戻り値: true(有効化されている)/ false(有効化されていない)
引数の詳細はWordPress Codex 日本語版を参照
dynamic_sidebar()に置き換えて、ウィジェットを表示する
<?php if ( is_active_sidebar( 'sidebar' ) ) : ?>
<div class="l-sub">
<?php dynamic_sidebar( 'sidebar' ); ?>
</div>
<!-- /.l-sub -->
<?php endif; ?>
完成例を参考にフッターにもウィジェットを表示して下さい。
| 項目 | 設定値 |
|---|---|
| ウィジェットの名前 | Footer |
| ウィジェットのID | footer |
| ウィジェットの直前に出力する HTML テキスト | <div class="c-grid__item -tab4Of12"><aside id="%1$s" class="p-widget -dark %2$s"> |
| ウィジェットの直後に出力する HTML テキスト | </aside></div> |
| タイトルの直前に出力する HTML テキスト | <h2 class="p-widget__title"> |
| 項目 | 設定値 |
|---|---|
| ウィジェットの表示位置 | フッターの「.c-grid」の中身をウィジェットで置き換える (ウィジェットがアクティブじゃない時は、「.c-grid」ごと出力しない) |
| 表示するウィジェットのID | footer |
| ウィジェット | タイトル | 設定など |
|---|---|---|
| テキスト | プロフィール |
ポートフォリオをご覧頂きありがとうございます 先日からWebデザイナーを目指しているダミーです。 「今年中にWebデザイナーになるぞ!」 という想いで、来月くらいから勉強をはじめようかなぁと思っています。 よろしくお願い致します。 |
| 最近の投稿 | 空白 | 投稿日を表示 |
| カテゴリー | 空白 | 空白 |
/*======================================
ウィジェットの有効化
======================================*/
function dummy_widgets_init() {
/*
サイドバー
----------------------------------- */
$args = [
'name' => 'Sidebar',
'id' => 'sidebar',
'before_widget' => '<aside id="%1$s" class="p-widget -light %2$s">',
'after_widget' => '</aside>',
'before_title' => '<h2 class="p-widget__title">',
];
register_sidebar($args);
/*
フッター
----------------------------------- */
$args = [
'name' => 'Footer',
'id' => 'footer',
'before_widget' => '<div class="c-grid__item -tab4Of12"><aside id="%1$s" class="p-widget -dark %2$s">',
'after_widget' => '</aside></div>',
'before_title' => '<h2 class="p-widget__title">',
];
register_sidebar($args);
}
add_action( 'widgets_init', 'dummy_widgets_init' );
<footer class="l-footer">
<div class="l-container">
<?php if ( is_active_sidebar( 'footer' ) ) : ?>
<div class="c-grid -gutter">
<?php dynamic_sidebar( 'footer' ); ?>
</div>
<!-- /.c-grid -->
<?php endif; ?>
<p class="l-footer__text"><small>© 2019 Dummy.</small></p>
</div>
<!-- /.l-container -->
</footer>
解答例は全問題のチェックボックスが on になるとご覧いただけます。
WordPressの多くの機能は「functions.php」で有効化出来る。
機能を表示するのもテンプレートタグで出力できる。
add_theme_support()で有効化register_nav_menus()で有効化register_sidebar()で有効化