Chapter06 様々な機能の有効化

概要と目標 様々な機能の、
有効化方法を知ろう。

アイキャッチ画像やページネーション、カスタムメニュー、ウィジェットなど様々な機能を有効する方法を学習しよう。

今回のゴール

RERUN

アイキャッチ画像の有効化アイキャッチ画像は、
デフォルトでは設定できない

WordPressの投稿画面には、デフォルトではアイキャッチ画像が設定できない。
投稿画面からアイキャッチ画像を設定できるようにするには、
タイトルを有効化したのと同様で、add_theme_support()で有効化する。

主なadd_theme_support()の引数
項目 引数
タイトルタグの出力 'title-tag'
アイキャッチ画像 'post-thumbnails'
投稿フォーマット 'post-formats'
(第2引数で、フォーマットを配列で指定)
カスタム背景 'custom-background'
カスタムヘッダー 'custom-header'
フィードリンク 'automatic-feed-links'
HTML5のマークアップ 'html5'
(第2引数で、HTML5マークアップの使用を許可する機能を配列で指定)

アイキャッチ画像を有効化してみよう。

  1. 「dummy」 › 「functions.php」をテキストエディタで開く
  2. lang属性をadd_theme_support()を追加する
dummy/functions.php
/*======================================
  初期設定
======================================*/
function dummy_setup() {

  /*
    Titleタグ
  ----------------------------------- */
  add_theme_support( 'title-tag' );

  /*
    アイキャッチ画像
  ----------------------------------- */
  add_theme_support( 'post-thumbnails' );
}
add_action( 'after_setup_theme', 'dummy_setup' );
  1. 上書き保存
  2. 管理画面にアクセス
    http://localhost/wp-lesson/wp-admin/
  3. 投稿画面にアクセスして「アイキャッチ画像」が設定できるようになっているかを確認する

テーマ用画像サイズの設定 メディア設定以外の
画像サイズを追加できる。

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 日本語版を参照

  1. 「dummy」 › 「functions.php」をテキストエディタで開く
  2. アイキャッチ画像の投稿一覧用のサイズと投稿ページに表示する用の画像サイズを追加する
dummy/functions.php
/*======================================
  初期設定
======================================*/
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' );
  1. 上書き保存
サムネイル画像の再生成
新たに追加した画像サイズは、設定後にアップロードされた画像のみに適用される。
すでにアップロードされた画像に、新たに追加したサイズを適用されたい場合は、「Regenerate Thumbnails」などのプラグインを使うことで再生成できる。

画像のサイズを反映 追加した画像サイズは、
the_post_thumbnail()の引数に指定する。

add_image_size()関数で追加した画像サイズは、the_post_thumbnail()関数の引数に、設定した名前を指定する。
すると、指定したサイズにWordPressがリサイズした画像ファイルが読み込まれる。

投稿一覧に追加したサイズを指定してみよう。

  1. 「dummy」 › 「index.php」をテキストエディタで開く
  2. 投稿一覧のアイキャッチ画像を表示している箇所を変更する
dummy/index.php
<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>
  1. 上書き保存
ブラウザでの表示例

RERUN

独自で高解像度ディスプレイに対応する
the_post_thumbnail()関数で生成される <img> タグは、srcset属性も含め、WordPressが自動に生成する。the_post_thumbnail_url()という関数を使って、アイキャッチ画像のファイルパスのみを出力し、独自で高解像度ディスプレイに対応する場合は、以下のような方法で対応することもできる。
  1. レティーナ用の画像サイズを追加する
dummy/functions.php
/*======================================
  初期設定
======================================*/
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); // 投稿一覧のレティーナ用
}
  1. 「index.php」の画面出力部分を変更する
dummy/index.php
<?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; ?>
  1. 上書き保存

ページネーションの出力 ページネーションも、
テンプレートタグで出力できる。

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 日本語版を参照

  1. 「dummy」 › 「index.php」をテキストエディタで開く
  2. the_posts_pagination()関数でページネーションを出力する
dummy/index.php
    </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>
  1. 上書き保存
  2. サイトにアクセス
    http://localhost/wp-lesson/
  3. 記事が「1ページに表示する最大投稿数」より少ないので、ページネーションが表示されない。

記事を追加してみよう。

  1. 管理画面の「表示設定」の「1ページに表示する最大投稿数」を「5」にする
  2. ブログを4件以上追加する
ブラウザでの表示例

RERUN

the_posts_pagination()で出力されるHTML
the_posts_pagination()はデフォルトで下記のようなHTMLを出力する。
CSSでスタイリングする時は、下記のclassを参考にしてスタイルを記述するとよい。
現在アクティブなナビには、span要素に 「current」 という名前のclass名が付いたり、
aria-current」属性が追加される。
<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 日本語版を参照

  1. 「dummy」 › 「functions.php」をテキストエディタで開く
  2. 下記を参考に、register_nav_menus()関数でカスタムメニューを有効化する
dummy/functions.php
/*======================================
  初期設定
======================================*/
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' );
  1. 上書き保存
  2. 管理画面にアクセス
    http://localhost/wp-lesson/wp-admin/
  3. 「外観」 › 「メニュー」が利用できるようになっていることを確認
  4. 以前作った「global」というメニューを、先程登録した、「global Navigation」という位置に利用するため、チェックを入れる
  5. 「メニューを保存」をクリック

カスタムメニューを表示 メニューを表示したいとこに、
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
  1. 「dummy」 › 「index.php」をテキストエディタで開く
  2. 下記を参考に、メニューをwp_nav_menu()関数で置き換えて、カスタムメニューを表示する
dummy/index.php
<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>
  1. 上書き保存
  2. サイトにアクセス
    http://localhost/wp-lesson/
  3. カスタムメニューが表示されているかを確認。
ブラウザでの表示例

RERUN

wp_nav_menu()で出力されるHTML
wp_nav_menu()はデフォルトで下記のようなHTMLを出力する。
CSSでスタイリングする時は、下記のclassを参考にしてスタイルを記述するとよい。
現在アクティブなナビには、li要素に 「current_page_item」というclassや、
a要素に「aria-current」属性が追加される。
<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
  1. 「dummy」 › functions.php」をテキストエディタで開く
  2. register_sidebar()を使って、ウィジェットを登録する
dummy/functions.php
/*======================================
  ウィジェットの有効化
======================================*/
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' );
  1. 上書き保存
  2. 管理画面にアクセス
    http://localhost/wp-lesson/wp-admin/
  3. 「外観」 › 「ウィジェット」が利用できるようになっていることを確認
  4. サイドバーに「検索(タイトル「サイト内検索」)」、「最近の投稿(投稿日を表示)」、「カテゴリー」を追加する
    💡 WordPress6 ~ は、ウィジェットエリアにタイトルなどが勝手に入らないため、「+」ボタンをから「ウィジェットグループ」を追加、その中に各ウィジェットを追加し、タイトルを入力してください。
  5. 「保存」をクリック

ウィジェットを表示ウィジェットを表示したいとこに、
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 日本語版を参照

  1. 「dummy」 › 「index.php」をテキストエディタで開く
  2. 「.l-sub」の中をdynamic_sidebar()に置き換えて、ウィジェットを表示する
dummy/index.php
<?php if ( is_active_sidebar( 'sidebar' ) ) : ?>
<div class="l-sub">
  <?php dynamic_sidebar( 'sidebar' ); ?>
</div>
<!-- /.l-sub -->
<?php endif; ?>
  1. 上書き保存
  2. サイトにアクセス
    http://localhost/wp-lesson/
  3. ウィジェットが表示されているかを確認
ブラウザでの表示例

RERUN


練習問題 今回の理解度をチェック。

完成例を参考にフッターにもウィジェットを表示して下さい。

完成イメージ

RERUN

  1. ウィジェットの設定
    項目 設定値
    ウィジェットの名前 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">
  2. 項目 設定値
    ウィジェットの表示位置 フッターの「.c-grid」の中身をウィジェットで置き換える
    (ウィジェットがアクティブじゃない時は、「.c-grid」ごと出力しない)
    表示するウィジェットのID footer
  3. ウィジェット タイトル 設定など
    テキスト プロフィール ポートフォリオをご覧頂きありがとうございます
    先日からWebデザイナーを目指しているダミーです。
    「今年中にWebデザイナーになるぞ!」
    という想いで、来月くらいから勉強をはじめようかなぁと思っています。
    よろしくお願い致します。
    最近の投稿 空白 投稿日を表示
    カテゴリー 空白 空白
解答例
dummy/functions.php
/*======================================
  ウィジェットの有効化
======================================*/
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' );
dummy/index.php
<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 になるとご覧いただけます。

まとめfunctions.phpで、
機能を有効化出来る。

WordPressの多くの機能は「functions.php」で有効化出来る。
機能を表示するのもテンプレートタグで出力できる。

  • アイキャッチ、add_theme_support()で有効化
  • カスタムメニューはregister_nav_menus()で有効化
  • ウィジェットはregister_sidebar()で有効化