あいさつ
こんにちは、エンジニアの河瀨です
最近朝起きれないのは季節のせいですよね、きっとそう
体調管理に気をつけなければ…
さて、今回はタイトル通り、baserCMSとWordPress、2つのCMSで同じテーマを実装してみたいと思います
日頃から使い慣れているbaserCMSと、プラグインの数やネットの情報が豊富なWordPress、この記事を通して2つのCMSの知識を深められるといいですね
ということでやっていきましょう
デザイン
早速実装!と言いたいところなんですが、CMS構築のためにはサイトのデザイン、HTMLが必要なんですよね…
2回サイトを作らないといけないのにHTMLを書くところからスタートしてたら日が暮れちゃいます
なので、フリーで配布されているHTMLテンプレートをお借りして、CMSに組み込んでいきます
テンプレートはこちらのサイトからお借りしました↓
https://popo-design.net/template/
実際のテンプレート
https://popo-design.net/template/demo/simple-corp/
シンプルなコーポレートやお店のサイトなどに向いているとのこと、
トップページには、バナー画像と新着情報ブログ、
サブページにはバナー画像と、管理画面から入力されたコンテンツが表示されているようです
フォームは、、、今回はナシで…
baserCMS
さて、デザインも確定したので、開発を進めていきます
流れとしては、先にbaserCMS実装 → WordPress実装 の順番でやってみます
WordPressの実装経験がほとんどないので、時間をかけてやりたいからです笑
CMSのダウンロード
開発環境構築
次に開発環境の構築ですが、baserCMSの環境構築はとっても簡単です
baserCMSをダウンロードすると、開発用のDockerも入っているからです
/docker/docker-compose.yml.defaultをコピーして、docker-compose.ymlにリネームします
画像のようにコマンドでDockerを立ち上げると…?
http://localhost/でアクセスできるようになります!
あとは、案内に従ってポチポチとしていくだけで、インストールも完了しちゃいます
データベース設定は、Dockerを利用している場合以下になります
DBホスト名:bc-db
ユーザー名:root
パスワード:root
DB名:basercms
テーマ作成
公式ドキュメントを参考に新規テーマを作成します
詳しい説明は公式ドキュメントを見てみてください
https://baserproject.github.io/5/theme/develop_theme
今回のテーマ作成では、以下のプラグインを利用します
- BurgerEditor:直感的な操作でコンテンツの追加、編集、移動ができ、Webの知識がなくてもサイトを作ることができるプラグイン
- バナー管理:バナーを登録、管理するプラグイン
どちらもbaserマーケットで無料でダウンロードできます
https://market.basercms.net/
ブログはbaserCMSの標準機能で無制限に作成可能です!
組み込み
大まかな手順は以下です
1. cssなどのassetsファイルを/plugins/{Theme}/webroot配下に設置します
2. layoutにtop.phpとdefault.phpを作成し、HTMLテンプレートを貼り付ける
3. cssの読み込みやタイトル出力をbaserCMSの関数に置き換える
4. ヘッダー、フッターなどの共通部分をエレメントに切り出す
5. ブログやバナーなどの動的表示
ここで、baserCMSで利用できる組み込み関数をいくつか紹介します
- BcBaser->css()、BcBaser->js()
css、jsを読み込むための関数、配列区切りで複数指定可能 - BcBaser->header()、BcBaser->footer()
ヘッダー、フッターを表示するための関数、element/header.php(footer.php)を読み込む - BcBaser->title()
メタタグのtitleを出力する - BcBaser->content()
CMSで登録したコンテンツデータを出力する
他にもたくさんの関数があります
便利な関数無いかな?と思ったら公式ドキュメントを見てみると、難しい実装をしなくて済むかもしれません
https://baserproject.github.io/5/theme/reference/
上の関数を駆使してエレメントの切り出しまで完了しました
共通部分を切り分けて流用することで、メンテナンス性の向上につながります
ファイルがスッキリして見やすくもなりますね!
次にブログを動的に表示していきます
baserCMSで、トップページにブログを表示するためには、$this->BcBaser->blogPosts()という関数を利用します
top.phpのブログを表示したい箇所に$this->BcBaser->blogPosts('{コンテンツ名}', '{件数}')を記述します
対象ブログのテンプレートのposts.phpを呼び出してくれます
今回のブログのテンプレート名はdefaultなのでplugins/{テーマ名}/templates/Blog/default/posts.phpを作成します
div.news配下をすべて移動させて、top.phpに$this->BcBaser->blogPosts('news', 3);と記述します
ブログの動的表示
次にposts.phpを調整していきます
baserCMSでは、管理画面で登録した記事は$postsという変数で扱うことができます
$postsをforeachで回して表示するのが基本です
右の画像のように、ブログの表示にもたくさんの便利な関数が用意されています
今回は記事の日付(blogPostDate())と記事タイトル(blogPostTitle)のみ表示します
表示できました!管理画面で登録した記事を3件出力しています
ブログで利用できる便利な関数をいくつか紹介します
-
$this->Blog->category($post, ['link' => false])
記事の属するカテゴリーを出力します、デフォルトではカテゴリー別アーカイブページへのリンクが付いているので、不要ならオプションで指定します -
$this->Blog->getEyeCatch($post)
記事に登録されたアイキャッチを取得します
次にバナー管理プラグインを利用してバナー画像を動的に出力していきましょう
バナー管理プラグイン
マーケットからプラグインをダウンロード、解凍してpluginsフォルダに配置します
マーケットURL:https://market.basercms.net/products/detail.php?product_id=160&category_id=
データの登録が完了したので、フロントに表示しましょう
バナーにも、ブログ同様に便利な専用関数が存在します
- $this->Banner->showBanner('{バナーエリア名}', [$options])
- 指定されたバナーエリア名を元にバナーを表示する関数です、デフォルトでは/element/banner_block.phpを読み込みますが、オプションで任意のテンプレートに切り替えることが可能です
ブログのblogPosts()のようなイメージですね
/element/banner_block.phpを作成し、top.phpのバナー部分を移動、$this->Banner->showBanner('side', ['num' => 3])を記述します
バナー管理プラグインでは、管理画面から登録した画像を$bannerDatasという変数で扱うことができます
ブログと同じようにforeachで回して表示していきましょう
banner_block.phpに画像のように記述します
固定ページ
固定ページのレイアウトはdefaultなので、layout/default.phpを編集していきましょう
top.phpと同じようにエレメントを呼び出し、関数を利用して組み込みました
topとの違いは、管理画面から登録した「本文」が存在する、ということです
まずは、管理画面からページの本文を入力していきましょう
バナー管理プラグイン同様に、BurgerEditorプラグインをマーケットからダウンロードし、有効化します
固定ページやブログ記事の編集ページを開くと、画像のように積み上げ式エディターを利用できます
直感的な操作なので、初心者にも使いやすいですね
適当なブロックをいくつか追加して保存します
defalt.phpで、管理画面から入力した本文を呼び出したい箇所に以下の記述をします
$this->BcBaser->content();
さらにplugins/{Theme}/templates/Pages/default.phpを作成し、以下の記述をします
echo $page->contents;
管理画面で登録した内容を出力できましたね!
これで、baserCMSでの組み込みは完了とします!
最後に補足ですが、baserCMSでは、layoutでおまじないとして記述しておくものが2つあります
- $this->BcBaser->script()
の前に記述し、コンテンツ内で定義したスクリプトやCSS、ツールバー表示用のスクリプトやCSS、そして、管理システムのシステム基本設定で設定したヘッダー埋め込みスクリプトなどを出力する -
$this->BcBaser->func()
ツールバー用のHTMLや、管理システムのシステム基本設定で設定したフッター埋め込みスクリプト等を出力する
参考:公式ドキュメント
script()の記述を忘れるとBurgerEditorのデフォルトスタイルがあたらないので注意してください
WordPress
さて、本題はここからです
今作成したテーマをWordPressでも実装していきます
WordPressにはどんな関数、プラグインがあるのかわからないので、楽しみですね
ダウンロード・環境構築
まずはWordPress本体をダウンロードしていきます
公式サイト(https://ja.wordpress.org/download/)から、最新版の6.8.3をダウンロードします
zipファイルを解凍し、MAMPで構築した環境に設置します
今回はtechup-wp.localhost:8888でアクセスできるはず
無事にWPの画面が表示されました!
調べたところ「local」というアプリをインストールすればもっと簡単に環境構築できるとのことですが、今回はもうMAMPでやっちゃったのでこのまま行きましょう笑
インストール画面の案内文を参考にポチポチと情報を入力していくと、簡単にインストールできました!
インストールは、baserCMSもWordPressもシンプルで、どちらかをやったことがあればスムーズに進めそうだと思いました
独自のテーマを作成する
いつの間にか、記事がとんでもなく長くなってしまっていたので、ここからはサクサク行きましょう
「wordpress 独自テーマ作成」で検索して1番上にヒットした以下のサイトを参考にします
https://webst8.com/blog/wordpress-theme-howto-make/
記事を頼りに、wp-content/themesに新規フォルダ「WpBc」を作成し、index.php、style.cssを設置します
これがWordPressテーマの最小構成らしい
style.cssにはテーマの名前など必須の情報を入力します
Theme NameはWordPressのテーマの名前(必須)です
なんと、テーマの情報などはstyle.cssに記述するんですね!
必須の情報を入力していきましょう
入力できたら、テンプレのstyle.cssの内容を貼り付けます
index.phpも同じ用に、テンプレのindex.htmlの内容を貼り付けてみます
これでテーマとして認識されるようです
テーマを適用する
管理画面の外観 > テーマに移動すると、テーマとして認識されていますね!
早速有効化したところ、スタイルは崩れていますがしっかり適用されていました!
cssや画像の読み込みを調整しましょう
baserCMS5ではテーマをプラグインとして扱っていることもあり、テーマを構成するファイルが多くなってしまいがちですが、WordPressでは2ファイルでテーマとして認識されるんですね!
記事を参考に、cssの読み込み箇所を以下のように調整してみます
スタイルが読み込まれました!
その他のcssやjs、画像も上記の方法でパスを修正していきます
画像やjsはwp-content/themes/{テーマ名}/assets/img(js, css)に設置します
これでレイアウトが整いました!
ちなみにget_template_directory_uri()は、利用中のテーマのパスを返すWordPress独自の関数みたいです
初めての独自関数はget_template_directory_uri()でしたね!
必須関数を追加する
WordPressでは、必須関数のwp_head(), wp_footer()というものがあるらしい
これを入れることで画面上部に管理バーが表示されるようです
baserCMSでいうところのBcBaser->script(), BcBaser->func()と同じくおまじないのようなものでしょうか
wp_head()をタグの直前に、wp_footer(); ?>をタグの直前に記述したところ、バーの表示を確認できました!
jQuery読み込み
WordPressにはもともと標準でjQueryが読み込まれているため、重複して読み込みをさせると競合して予期せぬ不具合やパフォーマンス劣化を起こす場合があります。
競合を防ぐため、一般的にはもともとWordPressに備わっているjQueryを利用します。
なんと…!またもや初情報が
wp_enqueue_script()という関数を利用することで、WordPressのjQueryを読み込めるらしい
ここで問題が…!
style.jsで$の記述をしていることでコンソールエラーが起きました
WordPressに備わっているjQueryはno-conflictモードになっていて「$」が使えなくなっているようです
調べたところ「$」を「jQuery」に置き換えて解消するのが一番シンプルっぽいので今回はそれで対応します
テンプレートを分割する
次にテンプレートを分割していきます
これはbaserCMSと同じだと思うのでさらっとやっていきます
各テンプレートは以下の関数で呼び出せます
- header.php:get_header();
- footer.php:get_footer();
- sidebar.php:get_sidebar();
固定ページテンプレートを作成する
WordPressには主要なテンプレートファイルとそれぞれの優先順位が存在するようです
今まで作っていたindex.phpは「他に優先順位の高いテンプレートがないときに最終的に適用される汎用テンプレート」のようです
このままではどのページを開いたときにもトップページと同じレイアウトで表示されてしまうので、固定ページ用のテンプレート「page.php」を作成していきます
テンプレの固定ページ用HTMLを、作成したpage.phpに貼り付け
cssやjs、ヘッダーフッターなどを関数に置き換えました
固定ページにアクセスすると、しっかりテンプレートが適用されているようです!
ただ、これでは管理画面から入力した内容が出力されないので、コンテンツを表示するための関数を記述していきましょう
WordPressでは、記事のタイトルを出力するthe_title()と記事の本文を出力するthe_content()という関数を利用するようです
記事のタイトル、本文の部分をそれぞれ関数に置き換えたところ、無事にタイトルと本文を表示できました!
トップページに投稿記事を表示する
次に、トップページに投稿を4件取得していきたいと思います
index.phpを画像のように変更します
各関数の説明を簡単にしていきます
| get_posts() | 指定した条件で投稿を取得する関数 |
| setup_postdata() | the_title()やthe_time()などを使えるようになる |
| wp_reset_postdata() |
get_posts() や WP_Query を使うと、 放っておくと、不具合につながるため、ループを抜けたあとで$post を元の状態に戻すための関数 |
バナー表示
最後にバナー表示をしたいと思います
プラグインで「Banner」で検索したところたくさん出てきました
豊富なプラグイン数はWordPressの魅力の1つですね
ですが、どのプラグインを選べばいいのかわからず…今回はカスタム投稿タイプで自作管理してみます!
投稿をトップページに表示したときと同じ要領で、get_posts()を使ってバナーを取得しました
foreachでバナーのデータを回して、正常に表示できました!
時間がかかりましたが、無事に完成です!
おわりに
今回は、baserCMSとWordPressで同じテーマを組み込んでみました
2つのCMSそれぞれに便利なところ、不便なところがありましたが、知識を深められましたね!
ぼくはWordPressの経験がほとんどなかったので、jQueryのルールや独自関数などいろんなことが学べました!
もし普段WordPressを触っている人がbaserCMSに挑戦するときは、この記事が少しでも参考になれば嬉しいです!
ではまた!