baserCMSとWordPressで同じテーマを組み込んでみた

あいさつ

こんにちは、エンジニアの河瀨です

最近朝起きれないのは季節のせいですよね、きっとそう

体調管理に気をつけなければ…

さて、今回はタイトル通り、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をダウンロードする方法は2つ

公式サイトからダウンロードする方法と、GitHubからダウンロードする方法です

今回は公式サイトから最新版(5.1.10)をダウンロードします

zipファイルを解凍して、ダウンロード完了です

開発環境構築

次に開発環境の構築ですが、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=

プラグイン管理画面にバナー管理プラグインが表示されているので、インストールして有効化しましょう

新規バナーエリア「side」を作成してバナー画像を登録していきます

データの登録が完了したので、フロントに表示しましょう

バナーにも、ブログ同様に便利な専用関数が存在します

  • $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 を使うと、
WordPress の中で使われている「現在の投稿情報($post)」が書き換えられる

放っておくと、不具合につながるため、ループを抜けたあとで$post を元の状態に戻すための関数

管理画面で登録した記事が表示できました!

大まかな処理はbaserCMSと同じでしたが、setup_postdata()など、特有の独自関数があっておもしろいですね!

バナー表示

最後にバナー表示をしたいと思います

プラグインで「Banner」で検索したところたくさん出てきました

豊富なプラグイン数はWordPressの魅力の1つですね

ですが、どのプラグインを選べばいいのかわからず…今回はカスタム投稿タイプで自作管理してみます!

wp-content/themes/WpBc/functions.php に画像のような記述をします

管理画面にバナー登録用の画面が表示されました!

バナー名と画像(アイキャッチ)を登録します

投稿をトップページに表示したときと同じ要領で、get_posts()を使ってバナーを取得しました

foreachでバナーのデータを回して、正常に表示できました!

時間がかかりましたが、無事に完成です!

おわりに

今回は、baserCMSとWordPressで同じテーマを組み込んでみました

2つのCMSそれぞれに便利なところ、不便なところがありましたが、知識を深められましたね!

ぼくはWordPressの経験がほとんどなかったので、jQueryのルールや独自関数などいろんなことが学べました!

もし普段WordPressを触っている人がbaserCMSに挑戦するときは、この記事が少しでも参考になれば嬉しいです!

ではまた!

  • このエントリーをはてなブックマークに追加

AUTHOR

河瀨 竜馬

河瀨 竜馬 エンジニア

2002年宮崎県宮崎市生まれ
専門学校でHTML・CSSを学び、Webの道へ
キャッチアップに入社をきっかけに福岡に来ました!

好きな食べ物は甘い物!とオムライスとお好み焼きとハンバーグとお寿司と…美味しいものなら何でも好きです!笑
趣味はゲーム、お酒、音楽で、一番好きなお酒はハイボールです✨
とにかく楽しく生きてます!

失敗を恐れず、何でもチャレンジしてみたいです。
あと、褒められて伸びるタイプです←\_(・ω・`)ココ重要!
よろしくお願いします!!

こんな記事も書いています