Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テーマカスタマイザーに機能を追加しよう

Collne
December 14, 2019

 テーマカスタマイザーに機能を追加しよう

WordPressの機能である「テーマカスタマイザー 」の紹介と実装方法を解説しました。
12月14日に金沢市内のITビジネスプラザ武蔵で、
「第2回 Fukui + Toyama 合同 WordPress Meetup」が開催されました。
主催者よりセッションを任され、
コルネ株式会社より大西・佐々木が二人三脚でセッション枠を努めることになりました。

Collne

December 14, 2019
Tweet

More Decks by Collne

Other Decks in How-to & DIY

Transcript

  1. テーマカスタマイザーに機能を追加しよう
    大西 政隆・佐々木 宏
    コルネ株式会社

    View Slide

  2. ⾃⼰紹介
    Profile
    01
    大西 政隆
    Webデザイナー兼コーダー
    おおにし まさたか
    おおにし まさたか
    先日、Adobe MAX Japan に行ってきました。

    View Slide

  3. ⾃⼰紹介
    Profile
    01
    佐々木 宏
    ささき ひろし
    Webデザイナー兼コーダー
    ささき ひろし
    先日から、週2回、英会話のレッスンを受けてます。
    大西 政隆
    Webデザイナー兼コーダー
    おおにし まさたか
    おおにし まさたか
    先日、Adobe MAX Japan に行ってきました。

    View Slide

  4. ⾃⼰紹介
    Profile
    01
    大西 政隆
    おおにし まさたか
    WordPress ユーザー
    佐々木 宏
    ささき ひろし
    Webデザイナー兼コーダー
    ささき ひろし
    先日から、週2回、英会話のレッスンを受けてます。
    おおにし まさたか
    WordPress でサイト構築中

    View Slide

  5. ⾃⼰紹介
    Profile
    01
    佐々木 宏
    ささき ひろし
    サイト制作者
    ささき ひろし
    WordPress のことならお任せください
    大西 政隆
    おおにし まさたか
    WordPress ユーザー
    おおにし まさたか
    WordPress でサイト構築

    View Slide

  6. セッション
    Session
    02
    では...
    おおにし まさたか
    管理画面からログインできました
    おおにし まさたか
    サーバー契約して、なんとかWordPress を
    インストールすることができました。

    View Slide

  7. セッション
    Session
    02
    では...
    おおにし まさたか
    「投稿」と「固定ページ」ってなにが違うの?
    おおにし まさたか
    外観にある「テーマ」ってなに?

    View Slide

  8. セッション
    Session
    02
    では...
    おおにし まさたか
    外観にある「カスタマイズ」ってなに?
    おおにし まさたか
    そういえば、佐々木さんが
    「カスタマイズ」って便利な機能があるって
    言ってたな....

    View Slide

  9. テーマカスタマイザーとは?
    About

    View Slide

  10. テーマカスタマイザーとは?
    About
    この画⾯がテーマカスタマイザーです

    View Slide

  11. テーマカスタマイザーとは?
    About
    WordPress3.4(約7年前)で追加された機能 Twenty Ten Twenty Eleven

    View Slide

  12. テーマカスタマイザーとは?
    About
    WordPress3.4(約7年前)で追加された機能 Twenty Ten Twenty Eleven
    WordPressの管理画⾯上からリアルタイムに確認(ライブプレビュー)しながら
    サイトのデザインや表⽰内容を変更・修正できる機能となり、
    サイト制作に必要な専⾨知識がなくても、直感的な操作が可能となります。
    どんな機能なのか?

    View Slide

  13. Function
    例えばどんな機能があるのか?
    Twenty Twenty(WordPress5.3)
    管理画⾯ > 外観 > カスタマイズ
    サイト基本情報 ⾊
    テーマオプション カバーテンプレート
    背景画像 メニュー
    ウィジェット ホームページ設定
    追加CSS

    View Slide

  14. Merit
    この機能を使うメリット・注意点
    既に稼働しているWordPressのサイトをリニューアルする際
    稼働サイト 管理画⾯

    View Slide

  15. Merit
    この機能を使うメリット・注意点
    既に稼働しているWordPressのサイトをリニューアルする際
    稼働サイト 管理画⾯
    これら(テーマカスタマイザー)の設定値は、カスタマイズ画⾯で保存して公開ボタンを押した時に
    設定値がデータベースに保存されてしまう。

    View Slide

  16. Trouble
    テーマに盛り込まれていない機能を追加したい
    プレビュー画面を見ながら
    トップページの「特集」記事一覧を
    表示したり非表示にしたりできますか?
    プレビュー画面を見ながらの
    「特集」記事一覧の見出しも変更できませんか?
    おおにし まさたか
    トップページの「ニュース」タイトル一覧の
    表示件数って変更できないの?
    こんな機能、実装してもらえませんか?

    View Slide

  17. Trouble
    テーマに盛り込まれていない機能を追加したい
    プレビュー画面を見ながら
    トップページの「特集」記事一覧を
    表示したり非表示にしたりできますか?
    プレビュー画面を見ながらの
    「特集」記事一覧の見出しも変更できませんか?
    おおにし まさたか
    トップページの「ニュース」タイトル一覧の
    表示件数って変更できないの?
    私にお任せください

    View Slide

  18. Trouble
    テーマに盛り込まれていない機能を追加したい
    プレビュー画面を見ながら
    トップページの「特集」記事一覧を
    表示したり非表示にしたりできますか?
    プレビュー画面を見ながらの
    「特集」記事一覧の見出しも変更できませんか?
    おおにし まさたか
    トップページの「ニュース」タイトル一覧の
    表示件数って変更できないの?
    おおにし まさたか
    大丈夫。
    カスタマイザーにスイッチを設け
    簡単に切り替える様にしましょう。
    わかりました。
    これもカスタマイザーで、
    文字が打てる様にしますね。
    ささき ひろし
    なるほど。
    記事の件数をカスタマイザー で
    コントロールしたいんですね。

    View Slide

  19. Current Top Page
    現在のトップページ
    ⼤⻄くんのサイトのトップページ、
    TwentyTwentyを使って、
    ニュース⼀覧を表⽰させています。
    今はこんな感じです。

    View Slide

  20. Theme Customizer File
    テーマカスタマイザーのファイル設置
    ファイルがどこにあるかすぐわかる様に、
    customizeと⾔うディレクトリを作り、
    その中にtheme-customize.phpを
    ⼊れます。
    このファイルは、
    functions.phpに読み込ませます。
    customize

    View Slide

  21. Implement
    テーマカスタマイザーにオリジナルの項⽬を追加する
    theme-customize.phpに、
    customize_registerと⾔うアクションフック
    を使って、機能を追加できる様にします。
    中に書いていくコードには、
    ・セクション
    ・セッティング
    ・コントロール
    などの関数が⽤意されおり、
    それらのコードを書いて⾏きます。
    theme-customize.php
    functionmy_theme_customize_register($wp_customize)
    {

            ※この中に追加していく

    }
    add_action(ʻcustomize_registerʼ,ʻmy_theme_customize_
    registerʼ);

    View Slide

  22. Construction
    テーマカスタマイザーの構造
    customize_register
    add_section
    セクション
    customize_registerアクションフックを使った場合
    のイメージ図になります。
    中に配置できるものとして、
    メニューを表⽰させ、右側の項⽬を持たせられるセ
    クション。
    項⽬を追加するために、セッティング、コントロー
    ルと⾔うものをセットで⼊れて⾏きます。
    セッティングは、
    初期値などの設定内容をデータベースに保存するた
    めの⽅法を設定します。
    コントロールは、
    カスタマイザーに配置する項⽬を作ったり、⼊⼒
    フォームなどのフィールドを設けたり、セクションと
    セッティングとの関連付けをしたりします。

    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬1
    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬2
    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬3

    View Slide

  23. Implement
    テーマカスタマイザーにオリジナルの項⽬を追加する
    ●セクション

    add_section関数を使⽤します。
    引数として、
    my_theme_sectionと任意の⽂字列を
    設定します。
    パラメータは、
    ・title
    ・priority
    ・descriptionなど
    theme-customize.php
    $wp_customize->add_section(
    ʻmy_theme_sectionʼ,array(
    ʻtitleʼ=>ʻトップページʼ,←項⽬名
    ʻpriorityʼ=>40,←優先順位
    ʻdescriptionʼ=>ʻ『⼤⻄くん仕様項⽬』ʼ,←説明⽂
    )
    );

    View Slide

  24. Exercises
    「ニュース」記事⼀覧の表⽰件数の設定
    ●セッティング

    add_setting関数を使⽤します。
    引数として、
    my_theme_options[archive_number]と
    任意の⽂字列を設定します。
    パラメータは、
    ・default
    ・type
    ・transport
    ・sanitize_callbackなど
    theme-customize.php
    $we_customize->add_setting(
      ʻmy_theme_options[archive_number]ʼ,array(
      ʻdefaultʼ=>ʼ10ʼ,←初期値
      ʻtypeʼ=>ʻoptionʼ,←データベースに保存
      ʻsanitize_callbackʼ=>ʻmy_theme_sanitize_number_
      rangeʼ,←バリデーションチェック
      )
    );
    おおにし まさたか
    トップページにある「ニュース」記事一覧の
    表示件数は変更できないの?

    View Slide

  25. Exercises
    「ニュース」記事⼀覧の表⽰件数の設定
    ●サニタイズ・コールバック
     /数値範囲付きの数値

    my_theme_sanitize_number_rangeと
    任意の⽂字列を設定します。
    コントロールのパラメーターに最⼩値と最⼤
    値を指定することで、
    制限を持たすことができます。
    通常、数値を直接⼊⼒する場合、無制限で数
    値が設定できてしまいますが、サニタイズ
    コールバックを使⽤してそれを防ぐことがで
    theme-customize.php
    functionmy_theme_sanitize_number_range($number,$setting){
     $number=absint($number);
     $atts=$setting->manager->get_control($setting->id)
     ->input_attrs;
     $min=(isset($atts[ʻminʼ])?$atts[ʻminʼ]:$number);
     $max=(isset($atts[ʻmaxʼ])?$atts[ʻmaxʼ]:$number);
     $step=(isset($atts[ʻstepʼ])?$atts[ʻstepʼ]:1);
     return($min<=$number&&$number<=$max&&
     is_int($number/$step)?$number:$setting->default);
    }
    おおにし まさたか
    トップページにある「ニュース」記事一覧の
    表示件数は変更できないの?

    View Slide

  26. Exercises
    「ニュース」記事⼀覧の表⽰件数の設定
    ●コントロール

    add_control関数を使⽤します。
    引数として、
    control_archive_numberと任意の⽂字列を
    設定します。
    パラメータは、
    ・settings
    ・label
    ・section
    ・type
    theme-customize.php
    $wp_customize->add_control(
     ʻcontrol_archive_numberʼ,array(
     ʻsettingsʼ=>ʻmy_theme_options[archive_number]ʼ,←セッティング名
     ʻlabelʼ=>ʻ新着記事の表⽰件数:ʼ,←ラベル名
     ʻsectionʼ=>ʻmy_theme_sectionʼ,←セクションを指定
     ʻtypeʼ=>ʻnumberʼ,←フォームの種類を指定
     ʻpriorityʼ=>1,←項⽬順位
     ʻinput_attrsʼ=>array(
      ʻstepʼ=>ʻ1ʼ,ʼminʼ=>ʻ0ʼ,ʼmaxʼ=>ʼ20ʼ,←上限数など
     ),
    ));
    おおにし まさたか
    トップページにある「ニュース」記事一覧の
    表示件数は変更できないの?

    View Slide

  27. Construction
    テーマカスタマイザーの構造
    customize_register
    add_section
    セクション
    customize_registerアクションフックを使った場合
    のイメージ図になります。
    中に配置できるものとして、
    メニューを表⽰させ、右側の項⽬を持たせられるセ
    クション。
    項⽬を追加するために、セッティング、コントロー
    ルと⾔うものをセットで⼊れて⾏きます。
    セッティングは、
    初期値などの設定内容をデータベースに保存するた
    めの⽅法を設定します。
    コントロールは、
    カスタマイザーに配置する項⽬を作ったり、⼊⼒
    フォームなどのフィールドを設けたり、セクションと
    セッティングとの関連付けをしたりします。

    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬1
    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬2
    add_setting
    セッティング
    add_control
    コントロール
    追加項⽬3

    View Slide

  28. Exercises
    「特集記事コンテンツの表⽰⾮表⽰」の設定
    ●セッティングとコントロール
    theme-customize.php
    $we_customize->add_setting(
    ʻmy_theme_options[content_active]ʼ,array(
    ʻtransportʼ=>ʻrefreshʼ,
    ʻdefaultʼ =>ʻnothingʼ,
    ʻtypeʼ =>ʻoptionʼ,
    )
    );

    $wp_customize->add_control(
    ʻmy_theme_options_content_activeʼ,array(
    ʻsettingsʼ=>ʻmy_theme_options[content_active]ʼ,
    ʻtypeʼ =>ʻradioʼ,
    ʻsectionʼ =>ʻmy_theme_sectionʼ,
    ʻpriorityʼ =>2,
    ʻlabelʼ=>ʻコンテンツ表⽰:ʼ,
    ʻchoicesʼ=>array(
    ʻnothingʼ=>ʻ表⽰しないʼ,
    ʻexpressionʼ=>ʻ表⽰するʼ,
    ),
    )
    );

    コンテンツの表⽰⾮表⽰は
    ラジオボタンで切り替えますので、
    コントロール側のパラメーターのtypeに
    radioを設定します。
    choicesパラメーターはラジオボタンの
    選択肢になります。





    おおにし まさたか
    後々、期間限定で
    トップページに特集記事を表示させたい。

    View Slide

  29. Exercises
    「特集記事コンテンツの表⽰⾮表⽰」の設定
    ●セッティングとコントロール
    theme-customize.php
    $we_customize->add_setting(
    ʻmy_theme_options[content_active]ʼ,array(
    ʻtransportʼ=>ʻrefreshʼ,
    ʻdefaultʼ =>ʻnothingʼ,
    ʻtypeʼ =>ʻoptionʼ,
    )
    );

    $wp_customize->add_control(
    ʻmy_theme_options_content_activeʼ,array(
    ʻsettingsʼ=>ʻmy_theme_options[content_active]ʼ,
    ʻtypeʼ =>ʻradioʼ,
    ʻsectionʼ =>ʻmy_theme_sectionʼ,
    ʻpriorityʼ =>2,
    ʻlabelʼ=>ʻコンテンツ表⽰:ʼ,
    ʻchoicesʼ=>array(
    ʻnothingʼ=>ʻ表⽰しないʼ,
    ʻexpressionʼ=>ʻ表⽰するʼ,
    ),
    )
    );

    コンテンツの表⽰⾮表⽰は
    ラジオボタンで切り替えますので、
    コントロール側のパラメーターのtypeに
    radioを設定します。
    choicesパラメーターはラジオボタンの
    選択肢になります。





    おおにし まさたか
    後々、期間限定で
    トップページに特集記事を表示させたい。

    View Slide

  30. Exercises
    「⾒出しの表⽰」の設定
    ●セッティングとコントロール
    theme-customize.php
    $wp_customize->add_setting(
    ʻmy_theme_options[originText]ʼ,array(
    ʻdefaultʼ=>ʻ特集記事ʼ,
    ʻtransportʼ=>ʻrefreshʼ,
    ʻsanitize_callbackʼ=>ʻsanitize_text_fieldʼ,
    ʻtypeʼ =>ʻoptionʼ,
    )
    );

    $wp_customize->add_control(
    ʻmy_theme_options_origin_textʼ,array(
    ʻsettingsʼ=>ʻmy_theme_options[originText]ʼ,
    ʻlabelʼ=>ʻコンテンツのタイトル:ʼ,
    ʻsectionʼ=>ʻmy_theme_sectionʼ,
    'type'=>'text',
    'priority'=>3,
    )
    );
    タイトル表⽰では
    セッティングのsanitize_callbackを
    sanitize_text_fieldにする。
    コントロール側のパラメーターのtypeに
    おおにし まさたか
    ついでにタイトルも変更したい...

    View Slide

  31. Implement
    テーマカスタマイザー編集⽤ショートカットの設置
    クリックすると、該当の編集項⽬にジャンプ
    します。

    View Slide

  32. Implement
    テーマカスタマイザー編集⽤ショートカットの設置
    add_theme_support(ʻcustomize-
    selective-refresh-widgetsʼ);関数、⻘
    の部分を追加します。
    次に、
    ⾚⾊のコードで対象となる要素IDや
    Classをselectorに設定し、
    ショートカットを表⽰するブロックを指定
    します。
    設定するとブロックの左上に表⽰されま
    す。

    theme-customize.php
    add_theme_support(ʻcustomize-selective-refresh-widgetsʼ);

    if(isset($wp_customize->selective_refresh)){

    $wp_customize->selective_refresh->add_partial(ʻmy_theme_options[originText]ʼ,array(
    ʻselectorʼ=>ʻ#featuredʼ,
    ));

    $wp_customize->selective_refresh->add_partial(ʻmy_theme_options[content_active]ʼ,array(
    ʻselectorʼ=>ʻ#featuredulʼ,
    ));

    $wp_customize->selective_refresh->add_partial(ʻmy_theme_options[archive_number]ʼ,array(
    ʻselectorʼ=>ʻ#newsulʼ,
    ));

    }

    View Slide

  33. Implement
    テーマカスタマイザーにオリジナルの項⽬を追加する
    以上で、
    theme-customize.phpへ書き込むコー
    ドは終わりましたが、
    実は、
    これだけでは動きません。
    カスタマイザー画⾯では、フィールドが表
    ⽰され、値を⼊⼒することもできますが、
    ライブプレビューが効かないし、反映も
    されません。
    テンプレートを使ってデータベースの値を
    取ってこないとダメんです。
    カスタマイザー
    管理画⾯ データベース
    サイト
    トップページ
    ライブ
    プレビュー
    データ保存
    データを取りに⾏く
    データを
    表⽰

    View Slide

  34. theme-customize.php
    functionmy_get_options($key=ʻʼ){
    if(empty($key))
    return;

    $options=get_option(ʻmy_theme_optionsʼ);

    if(empty($options[$key]))
    return;

    return$options[$key];
    }

    functionmy_the_options($key=ʻʼ){
    echomy_get_options($key);
    }
    Implement
    テンプレートに反映させるための関数を準備する
    テンプレートに反映させるため、
    get_option関数に独⾃の
    my_theme_options引数を登録。
    独⾃の関数を設定します。

    テンプレート側で、
    カスタマイザーの値を取得する場合、
    my_get_options(ʻarchive_numberʼ);
    関数を使います。
    カスタマイザーの値を表⽰させる場合、
    my_the_options(ʻarchive_numberʼ);
    関数を使います。

    View Slide

  35. Built-in Functions
    カスタマイザーの関数をテンプレートに組み込む
    要件内容がトップページということなので、
    front-page.phpを設置します。

    View Slide

  36. Built-in Functions
    カスタマイザーの関数をテンプレートに組み込む
    22⾏⽬






    で特集記事の表⽰⾮表⽰を判定します。

    26⾏⽬






    値がテキストフィールドに記⼊されていたら、値を表⽰しま
    す。
    27⾏⽬



    if(my_get_options(ʻcontent_activeʼ)
    if(!empty(my_get_options(ʻoriginTextʼ




    View Slide

  37. Built-in Functions
    カスタマイザーの関数をテンプレートに組み込む
    74⾏⽬から81⾏⽬









    ナンバーフィールドの値を$pppに代⼊し、
    パラメータposts_per_pageに設定しています。
    $ppp=my_get_options(ʻarchive_
    numberʼ);
    $args=Array(
    ʻcategory_nameʼ=>ʻnewsʼ,
    ʻposts_per_pageʼ=>$ppp,
    ʻorderbyʼ=>ʻdateʼ,
    ʻorderʼ=>ʻDESCʼ

    View Slide

  38. Uploade
    サーバーにファイルをアップロードする

    View Slide

  39. ご静聴
    ありがとうございました!
    大西 政隆・佐々木 宏
    コルネ株式会社

    View Slide