Wordpressの自作テーマの作り方まとめ
こんにちは、メガネです。
仕事でよくWordpressを使用します。ですが、デフォルトテーマをそのままのデザイン、少しのカスタマイズで使用するという事はほとんどありません。
そこで今回は自作のテーマを作成する時の手順を書いていきたいと思います。
制作環境は、 Gulp + SCSS です。
ディレクトリ設定
テーマフォルダは下記の構成です。
gulpの設定
gulpfile.js
今回gulpを導入する目的は、SCSSのコンパイルのみとします。
var gulp = require('gulp'); var sass = require('gulp-sass'); var plumber = require('gulp-plumber'); gulp.task('sass',function() { gulp.src('./scss/**/*.scss') .pipe(plumber({ errorHandler: function(err) { console.log(err.messageFormated); this.emit('end'); } })) .pipe(sass({outputStyle: 'expanded'})) .pipe(gulp.dest('./')); }); gulp.task('sass-watch', ['sass'], function() { var watcher = gulp.watch('./scss/*.scss', ['sass']); watcher.on('change', function(event) {}); }); gulp.task('default', ['sass-watch']);
導入するパッケージ | 詳細 |
---|---|
gulp | gulp本体。 |
gulp-sass | gulpでsass(scss)をコンパイルする時に必要なパッケージ。 ※scssは複数作成される想定でテーマ内に「scss」というディレクトリを作成する想定で、「scss」ディレクトリ内をウォッチする設定になっています。 |
gulp-plumber | sass(scss)コンパイル中にエラーが発生しタスクが強制終了してしまうのを防ぐためのパッケージ。 |
テーマの宣言
次にstyle.scssを作成します。
今回は style.scss から style.css を生成しますが、上記に記載したように「scss」ディレクトリ内に style.scss を作成し、gulpでテーマディレクトリ直下に style.css を吐き出すような仕組みです。
style.scss
/* Theme Name: meganeTheme Theme URI: https://meganetech.hateblo.jp/ Description: メガネのテーマ Author: 広告代理店で働くメガネ Author URI: https://meganetech.hateblo.jp/ Version: 1.0.0 */ /* ここからCSSを記載 */ .aligncenter { display: block; margin: 0 auto; } .alignleft { float: left; } .alignright { float: right; }
index.phpの作成
何はともあれWEBサイトを公開するにはindexファイルが必要ですが、
ヘッダー、フッターファイルは別ファイルとして作成しincludeする形にしておきます。
header.php
<!DOCTYPE HTML> <html lang="ja"> <head> <meta charset="UTF-8"> <title><?php bloginfo('name'); ?></title> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link rel="shortcut icon" href="<?php echo get_template_directory_uri(); ?>/images/favicon.ico"> <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" media="screen"> <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script> <script src="<?php echo get_template_directory_uri(); ?>/assets/js/script.js"></script> <?php wp_head(); ?> </head>
項目名 | 詳細 |
---|---|
<?php wp_head(); ?> | Wordpressのプラグイン情報やその他の機能を有効にするための記述を読み込むための使用。 |
footer.php
<footer class="copy"> <p>copyright © <?php bloginfo('name'); ?>. All rights Reserved.</p> </footer> </div><!-- /wrapper --> <?php wp_footer();?> </body> </html>
項目名 | 詳細 |
---|---|
<?php wp_footer(); ?> | Wordpressのプラグイン情報やその他の機能を有効にするための記述を読み込むための使用。 |
index.php
<?php get_header(); ?> <body id="#top" <?php body_class();?>> <header id="header"> <h1 id="logo"><a href="./"><img src="<?php echo get_template_directory_uri(); ?>/assets/images/logo.jpg" alt="<?php bloginfo('name'); ?>" /></a></h1> </header> <div class="wrapper"> <div class="container"> <h2>記事一覧</h2> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="article"> <a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a> </div> <?php endwhile; endif; ?> </div><!-- /container --> </div> <?php get_footer(); ?>
項目名 | 詳細 |
---|---|
<?php get_header(); ?> | Wordpressで「header.php」を読み込むために使用。 |
<?php get_footer(); ?> | Wordpressで「footer.php」を読み込むために使用。 |
本当に最低限の記述のみとなってしまいました。
そのうちしっかりしたテーマを作成していきたいと思います。
Wordpressプラグイン 「Custom Field Suite」使い方まとめ
Wordpressのプラグイン「Custom Field Suite」の使い方についてまとめています。
仕事上、Wordpressでサイト構築をする事が割と頻繁にあるのですがほぼ必須のプラグインとなっています。
このプラグインについてまとめているサイトは多いですが、私が使用したい情報が1つのサイトにまとまっていないため出来る限り1つのサイトで解決出来るようにまとめページを作ってみました。
Custom Field Suite 公式ページ
Wordpress公式プラグインページ
ja.wordpress.org
公式ドキュメント
Getting Started - Custom Field Suite
※2017/04/19確認 プラグインページからのリンクは切れていました。
フィールドタイプの種類
フィールドタイプ | 詳細 |
---|---|
単一行テキスト | 1行テキスト(改行不可) |
テキストエリア | 複数行テキスト(改行可) |
リッチエディタ | リッチエディタ(Wysiwyg) |
ハイパーリンク | URLとテキストを個別に設定可能。 リンク先の設定(target)として下記を設定可能。 None(指定なし) _blank _self _top |
日付 | カレンダーから日付を選択 |
カラーピッカー | カラーピッカーを利用可能 |
真/偽(簡易チェックボックス) | チェックボックスを利用可能 |
セレクト(ドロップダウンリスト) | セレクトボックスを利用可能 |
関連ポスト | 「投稿タイプ」と最小、最大件数を指定して関連する記事を選択可能 利用可能な種類は下記 投稿(post) 固定ページ(page) 添付ファイル(attachment) 任意のカスタムポストタイプ |
Term | 最小、最大件数を指定して下記を選択して関連付ける事が可能 category post_tag post_format カスタムポストタイプ |
ユーザー | 最小、最大件数を指定して現在作成されているユーザーを選択可能 |
ファイルを選択 | ファイルを追加する事が可能(リッチエディタの「メディアを追加」とほぼ同義) |
ループ(複製フィールド) | ループの中に任意のフィールドタイプを選択して追加するとループが可能 |
タブ | タブが作成される。 タブフィールドを複数設定するとタブが横に追加される。 ただし、タブを作成するとそれ以降の全てがタブ内に収まってしまうので要注意。 |
テンプレートからの呼び出し
テンプレートから呼び出す時はフィールドごとに異なります。
テキストフィールドの呼び出し
<?php echo CFS()->get( 'first_name' ); ?>
テキストエリアフィールドの呼び出し
<?php echo CFS()->get( 'first_name' ); ?>
リッチエディタフィールドの呼び出し
<?php echo CFS()->get( 'first_name' ); ?>
ハイパーリンクフィールドの呼び出し
<?php echo CFS()->get( 'the_hyperlink' ); ?>
日付フィールドの呼び出し
<?php echo CFS()->get( 'my_date' ); ?> 表示例:2015-10-31 <?php echo date( 'F j, Y', strtotime( CFS()->get( 'my_date' ) ) ); ?> 表示例:October 31, 2015
カラーピッカーフィールドの呼び出し
<?php echo CFS()->get( 'my_color' ); ?>
真/偽(簡易チェックボックス)フィールドの呼び出し
<?php echo CFS()->get( 'checkbox' ); ?>
真偽値を使った判別をする場合は下記。
<?php if ( get_post_meta($post->ID, 'checkbox' ,TRUE) ): ?> <div>チェックが入っている場合はこの文章が表示されます</div> <?php else: ?> <div>チェックが入っていない場合はこの文章が表示されます</div> <?php endif; ?>
セレクト(ドロップダウンリスト)フィールドの呼び出し
<?php $values = CFS()->get( 'my_select' ); foreach ( $values as $key => $label ) { echo $label; } ?>
関連ポストフィールドの呼び出し
<?php $values = CFS()->get( 'related_posts' ); foreach ( $values as $post_id ) { $the_post = get_post( $post_id ); echo $the_post->post_title; } ?>
Termフィールドの呼び出し
<?php $values = CFS()->get( 'field_terms' ); foreach ( $values as $term_id ) { $the_term = get_term($term_id); echo $the_term->name; } ?>
ユーザーフィールドの呼び出し
<?php $values = CFS()->get( 'field_users' ); foreach ( $values as $user_id ) { $the_user = get_user_by( 'id', $user_id ); echo $the_user->user_login; } ?>
ファイルのアップロードフィールドの呼び出し
<?php echo CFS()->get( 'my_file' ); ?>
画像の場合はIDが出力されるので、下記のように画像IDからURLを取り出す必要があります。
<?php $fieldName = get_post_meta($post->ID, 'cfs_image', true); ?> <?php $fieldName = wp_get_attachment_image_src($fieldName, 'full'); ?> <img src="<?php echo $fieldName[0]; ?>" alt="Image alt">
wp_get_attachment_image_src の使い方は下記からご確認ください。
関数リファレンス/wp get attachment image src - WordPress Codex 日本語版
ループフィールドの呼び出し
<?php $fields = CFS()->get( 'loop' ); foreach ( $fields as $field ) { echo $field['content1']; echo $field['content2']; $fields = $field['loop_child']; foreach ((array)$fields as $field): ?> <div><?php echo $field['field_name']; ?></div> <?php endforeach; } ?>
※2019/10/1 コメントにてご指摘頂きましたが、表記が一部間違っていたため修正しました。
「loop_child」の部分は子ループです。ループの中でループを回す場合に必要です。
なお、子ループでforeachの中で(array)を使用している理由は、
Warning: Invalid argument supplied for foreach() in [path]
というエラーが出てしまうためです。
詳細は下記のサイトを参考にしてください。
kotori-blog.com