2014 01-11-tdc-6th-anniversary
TRANSCRIPT
TDC 6th AnniversaryWordPressワークショップ
WordPressで 効率的な開発を
自己紹介
自己紹介
2011年WordBench東京スピーカー2013年WordBenchしずおかスピーカー
フリーランスでの活動の後、WordPressのインテグレーションサービスを提供するプライム・ストラテジー株式会社のWordPressエンジニアに。
相原 知栄子(うぇぶるじょん)
WordBench千葉
BOOKS(共著)
自己紹介
@Webourgeon_com
http://webourgeon.com/
Chieko.Aihara.Bokettch
自己紹介
自己紹介
http://wordpress.org/plugins/stop-the-bokettch/
プライム・ストラテジー
WordPressのインテグレーションサービスを提供
プライム・ストラテジーは世界に52社ある
「WordPressコンサルタント」のうちの1社
今日お話すること
1.WordPressとは
2.WordPressでの開発
3.WordPressハンズオン
今日のアジェンダ
WordPressとは
WordPressとは
?なぜWordPressを使うのか?
みんなが使っているから
WordPressとは
YES
WordPressとは
どういうことかというと
WordPressとは
世界最大シェアのオープンソースCMSソフトウェア
WordPressとは
2014.01.08 22:40 頃
http://en.wordpress.com/stats/
WordPressとは
WordPressとは
All Website 21.0%CMS 59.8%
トップ 1000万サイト
WordPressとは
All Website 21.2%CMS 60.0%
2014.01.08
2014.01.11
http://w3techs.com/technologies/overview/content_management/all
GPL
WordPressとは
PHP&
MySQL
WordPressとは
プラグインWordPressとは
http://wordpress.org/plugins/
テーマWordPressとは
http://wordpress.org/themes/
WordPressとは
プラグイン
WordPressとは
プラグイン テーマ
WordPressとは
プラグイン テーマ
コミニュティ
WordPressとは
プラグイン テーマ
コミニュティ 開発情報
WordPressとは
プラグイン テーマ
コミニュティ 開発情報
WordPressとは
開発コストの削減
WordPressとは
WordPressとは
CMS・アプリケーションプラットフォームとして
開発コストの削減
WordPressとは
それだけ?
WordPressとは
ではありません
WordPressとSEO
WordPressとは
SEOプラグイン
WordPressとSEO
WordPressとは
(意訳)
ワードプレスを選ぶことは、非常に良い選択です。
なぜなら、ワードプレスは、SEOに関する多くの問題を自動的に解決してくれて、
SEO(サーチエンジン最適化)の手法の80%~90%に対応するように作られているから
です。
WordPress is a great choice
WordPress automatically solves a ton of SEO issues.
WordPress takes care of 80-90% of
(the mechanics of)
Search Engine Optimization (SEO)
WordCamp San Francisco 2009 Matt Cutts
WordPressとソーシャル
WordPressとは
WordPressとデバイス
WordPressとは
レスポンシブデバイス切り替えhttp://wpbk2.azurewebsites.net/ http://wpbk2.azurewebsites.net/blog/
WordPress3.8 WordPressとは
WordPressとは
WordPress3.8
WordPressとは
WordPress3.8
管理画面もレスポンシブに
WordPressとは
事例紹介
WordPressとは
事例紹介
カスタマイズした投稿画面
WordPressとは
事例紹介
マルチデバイス対応
キャッシュ更新性
自動化
WordPressとは
WP SiteManager
SEO + SNS + デバイス切り替え + キャッシュ + α
WordPressでの開発
WordPressのファイル構成WordPressでの効率的な開発
WordPressのファイル構成WordPressでの効率的な開発
管理画面
設定
WordPressのファイル構成WordPressでの効率的な開発
管理画面
コアファイル カスタマイズ
WordPressのファイル構成WordPressでの効率的な開発
管理画面
コアファイル
設定
WordPressのファイル構成WordPressでの効率的な開発
管理画面
コアファイル
設定
WordPressのファイル構成WordPressでの効率的な開発
管理画面
コアファイル
設定
カスタマイズ
WordPressのファイル構成WordPressでの効率的な開発
wp-content
プラグイン テーマ
WordPressのファイル構成WordPressでの効率的な開発
wp-content
プラグイン テーマ
PHP
HTMLCSSPHP
テーマWordPressでの効率的な開発
Twenty Fourteen
http://codex.wordpress.org/Image:Template_Hierarchy.png
WordPressでの効率的な開発
テーマ テンプレート階層
WordPressでの効率的な開発
style.css index.php
テンプレート階層テーマ
テーマWordPressでの効率的な開発
/* Theme Name: WebourgeonTheme URI: http://webourgeon.com/Description: サンプルテーマAuthor: うぇぶるじょんAuthor URI: http://webourgeon.com/Version: 1.0*/
style.css
テーマとして認識
テーマWordPressでの効率的な開発
http://codex.wordpress.org/Template_Tags
the_content()
get_the_date()
wp_list_categories()
記事本文を出力
カテゴリーリストをリンク付きで出力
=>
=>
=> 記事が書かれた日を取得
テンプレートタグ
テーマWordPressでの効率的な開発
the_content()
get_the_date()
wp_list_categories()
記事本文を出力
カテゴリーリストをリンク付きで出力
=>
=>
=> 記事が書かれた日を取得
テーマ テンプレートタグ
http://codex.wordpress.org/Template_Tags
テーマWordPressでの効率的な開発
get_header()
get_footer()
get_templatepart()
=>
=>
=>
テーマ インクルードタグ
header.php
footer.php
ヘッダー、サイドバー、フッター以外のテンプレートパーツ
モジュール化
テーマWordPressでの効率的な開発
is_single()
is_page()
is_category()
=>
=>
=>
テーマ 条件分岐タグ
個別投稿
固定ページ
is_admin()
カテゴリーアーカイブ
=> 管理画面
WordPressでの効率的な開発
=>
http://codex.wordpress.org/Template_Tags
あるものは使う
WordPressでの効率的な開発
=>
http://codex.wordpress.org/Template_Tags
あるものは使う効率
安全
テーマWordPressでの効率的な開発
<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile; ?><?php endif; ?>
WordPressループ
記事表示の基本
投稿データがあるか
投稿データを$postにセット
functions.phpWordPressでの効率的な開発
if ( ! isset( $content_width ) ) { $content_width = 700;
}
functions.phpWordPressでの効率的な開発
//アイキャッチ画像add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 200, 200, true );
functions.phpWordPressでの効率的な開発
// カスタムメニューregister_nav_menus( array ( 'utility' => 'ユーティリティナビ', 'global' => 'グローバルナビ', 'footer' => 'フッターナビ' ) );
プラグインfunctions.php
WordPressでの効率的な開発
プラグインfunctions.php
WordPressでの効率的な開発
≠
プラグインfunctions.php
WordPressでの効率的な開発
≠
テーマ固有の機能
プラグインfunctions.php
WordPressでの効率的な開発
≠
テーマ固有の機能 テーマを変えても有効
WordPressの動作原理
WordPressでの効率的な開発
ファイルの実行順序http://www.warna.info/archives/279/
WordPressの動作原理
WordPressでの効率的な開発
1.初期化
WordPressが動作する前提としての必要な前処理や設定・ファイルの読込
wp-config.php wp-settings.php
WordPressの動作原理
WordPressでの効率的な開発
1.初期化 実行環境の均一化
WordPress関数の読み込み
データベース接続
プラグイン読み込み
functions.php読み込み
WordPressの動作原理
WordPressでの効率的な開発
2.解析
アクセスされたURLをもとに、WordPressの内部パラメータに変換、表示条件を導き出す。
wp-includes/class-wp.php
WordPressの動作原理
WordPressでの効率的な開発
2.解析
m, p, posts, w, cat, withcomments, withoutcomments, s, search, exact, sentence, debug, calendar, page, paged, more, tb, pb, author, order, orderby, year, monthnum, day, hour, minute, second, name, category_name, tag, feed, author_name, static, pagename, page_id, error, comments_popup, attachment, attachment_id, subpost, subpost_id, preview, robots, taxonomy, term, cpage, post_type
パラメーターは46個
WordPressの動作原理
WordPressでの効率的な開発
2.解析
m, p, posts, w, cat, withcomments, withoutcomments, s, search, exact, sentence, debug, calendar, page, paged, more, tb, pb, author, order, orderby, year, monthnum, day, hour, minute, second, name, category_name, tag, feed, author_name, static, pagename, page_id, error, comments_popup, attachment, attachment_id, subpost, subpost_id, preview, robots, taxonomy, term, cpage, post_type
パラメーターは46個
URLにパラメーターと同じ名前のものがあると404エラーになりやすい
WordPressの動作原理
WordPressでの効率的な開発
2.解析
リライトルール
[" category/(.+?)/?$ "] => "index.php?category_name=$matches[1]"
デフォルト以外のパーマリンクではURLをパラメーターに変換
WordPressの動作原理
WordPressでの効率的な開発
3.抽出
内部パラメーターをもとに、データベースのSQL文を生成し、条件にあった記事データを取得する
wp-includes/query.php
WordPressの動作原理
WordPressでの効率的な開発
3.抽出 SQLの生成とデータベースからの記事取得
テンプレートで使用できるグローバル変数($post)などを利用できるように
WordPressの動作原理
WordPressでの効率的な開発
4.表示
テーマのテンプレートファイルを用いて、Webページを表示する
wp-includes/template-loader.php
WordPressの動作原理
WordPressでの効率的な開発
4.表示抽出条件をもとに、表示するテンプレートを決定し、読み込む
テンプレートを用いて、Webページを出力
WordPressの動作原理
WordPressでの効率的な開発
理解することで適切な開発が行える
WordPressのデータ構造
WordPressでの効率的な開発
http://codex.wordpress.org/Image:WP3.0-ERD.pnghttp://wpdocs.sourceforge.jp/データベース構造
WordPressのデータ構造
WordPressでの効率的な開発
コメント
コメント属性
設定
記事
カスタムフィールド
リンク
カテゴリー紐付け
ユーザー属性
カテゴリー
カテゴリーhttp://codex.wordpress.org/Image:WP3.0-ERD.pnghttp://wpdocs.sourceforge.jp/データベース構造
WordPressコーディングルール
WordPressでの効率的な開発
WordPress Coding Standardshttp://codex.wordpress.org/WordPress_Coding_Standards
つかえるものはつかう
効率的な開発
WordPressでの効率的な開発
共通のルール
WordPressでの効率的な開発
デザイナー コーダー
PHP開発者
ハンズオン
WordPressの準備はよろしいですか?
WordPressハンズオン
最も単純なテーマを作ってみましょう
WordPressハンズオン
WordPressハンズオン
wp-content/themes/bokettch
style.css
index.php
WordPressハンズオン
style.csscharset "utf-8";/*Theme Name: BokettchTheme URI: http://webourgeon.com/Description: サンプルテーマAuthor: ぼけっちAuthor URI: http://webourgeon.com/Version: 1.0*/
index.php
WordPressハンズオン
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>テーマ</title> </head> <body> <h1>テーマサンプル</h1> </body></html>
WordPressハンズオン
WordPressハンズオン
WordPressハンズオン
有効化して表示確認してみましょう
WordPressループでコンテンツを表示
WordPressハンズオン
<?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <?php endwhile; ?><?php endif; ?>
WordPressハンズオン
表示確認してみましょう
WordPressハンズオン
wp_head wp_footer
わすれちゃいけない
WordPressハンズオン
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>テーマ</title> <?php wp_head(); ?> </head> <body><?php if ( have_posts() ) : ?> <?php while ( have_posts() ) : the_post(); ?> <h1><?php the_title(); ?></h1> <?php the_content(); ?> <?php endwhile; ?><?php endif; ?>
<?php wp_footer(); ?> </body></html>
WordPressハンズオン
http://wordpress.org/plugins/theme-check/
Theme-Check
WordPressハンズオン
http://wordpress.org/plugins/theme-check/
Debug Bar http://wordpress.org/plugins/debug-bar/
プラグインを作ってみましょう
WordPressハンズオン
テーマ作成の時を思い出してください
WordPressハンズオン
wp_head wp_footer
テーマ作成の時を思い出してください
WordPressハンズオン
wp_head wp_footerフック
WordPressハンズオン
WordPressは、プラグインをWordPress 本体に “引っ張り込む (hook into)” ためのフックを用意している
WordPress Codex プラグインAPI
アクションフック
WordPressハンズオン
実行中の特定のポイントもしくは特定のイベント発生時に WordPress のコアが起動させる
投稿の公開テーマの変更管理画面の表示
アクションフック
WordPressハンズオン
動作原理のそれぞれのフェィズでどんなアクションフックがあるでしょうか
アクションフック
WordPressハンズオン
1.初期化 plugins_loaded => プラグインの読込完了直後 setup_theme => 翻訳ファイルの読込直前 after_setup_theme => テーマのfunctions.php読込直後 init => 初期化完了時
アクションフック
WordPressハンズオン
2.解析 parse_request => 内部パラメータへの変換直後
send_headers => レスポンスヘッダー送信直後
アクションフック
WordPressハンズオン
3.抽出 pre_get_posts => SQL文を生成する直前
posts_selection => データベースアクセスの直前 wp => グローバル変数設定直後
アクションフック
WordPressハンズオン
4.表示 template_redirect => テンプレートファイル選択直前
wp_head => headタグ出力中
wp_footer => bodyタグ出力直前 shutdown => WordPress実行終了時
アクションフック
WordPressハンズオン
さっそく使ってみましょう
アクションフック
WordPressハンズオン
まずは表示させるだけのプラグイン
アクションフック
WordPressハンズオン
プラグインとして認識させる
アクションフック
WordPressハンズオン
プラグインとして認識させる
wp-content/plugins/hello-bokettch
アクションフック
WordPressハンズオン
<?php/** * @package Hello_Bokettch * @version 0.1 *//*Plugin Name: Hello BokettchPlugin URI: http://webourgeon.com/Description: ただなにか出すだけのプラグインAuthor: WebourgeonVersion: 0.1Author URI: http://webourgeon.com/*/
hello-bokettch.php
他とかぶらない名前
アクションフック
WordPressハンズオン
function hello_bokettch() {
echo 'ことしはボケない';
}add_action('wp_footer','hello_bokettch');
head にstyleを追加してみましょう
WordPressハンズオン
WordPressハンズオンfunction hello_bokettch() {
echo '<p id="hello-bokettch">ことしはボケない!!</p>';
}add_action('wp_footer','hello_bokettch');
function hello_bokettch_style() { echo ' <style type="text/css"> #hello-bourgeon { font-size: 30px; font-weight: bold; color: red; text-align: center; } </style> ';}
add_action( 'wp_head', 'hello_bokettch_style' );
フィルターフック
WordPressハンズオン
データベースに追加する前やブラウザのスクリーンに送り出す前にさまざまなタイプのテキストを改造するために WordPress が起動させるフック
フィルターフック
WordPressハンズオン
the_content
フィルターフック
WordPressハンズオン
function content_bokettch ( $content ){ $target = '/(。|ボケ|ぼけ|ぼけっち)/'; $bokketch = '「ぼけっち~!」'; $content = preg_replace( $target ,$bokketch, $content ); return $content;}add_filter('the_content', 'content_bokettch');
フィルターフック
WordPressハンズオン
表示してみましょう
ショートコード
WordPressハンズオン
[gallery]
ショートコード
WordPressハンズオン
定型文
投稿エディタに直接書けない テンプレートタグや PHPコードなど
ショートコード
WordPressハンズオン
ショートコードを使うプラグイン
Contact Form 7
Trust Form
Simple Map
ショートコード
WordPressハンズオン
アドセンス
関連記事
などもいいね
ショートコード
WordPressハンズオン
add_shortcode('bokketch', 'bokketch_shortcode');
function bokketch_shortcode() {
return '<p>お鍋こがしました(́;ω;`)ウッ…</p>'; }
ショートコード
WordPressハンズオン
[bokketch]
ショートコード
WordPressハンズオン
できましたか?
ショートコード
WordPressハンズオン
ショートコードは属性も持てる
[gallery id="123" size="medium"]
ショートコード
WordPressハンズオン
囲み型ショートコード[caption]My Caption[/caption]
ショートコード
WordPressハンズオン
http://wpdocs.sourceforge.jp/ショートコードAPI
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
page_title
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
page_title menu_title
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
page_title menu_titleaccess_level/capability
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
page_title menu_titleaccess_level/capability file
管理画面に表示
WordPressハンズオン
function add_bokketch_admin_menu() { add_options_page('Bokketch Admin Menu 設定', 'Bokketch Admin Menu', 'manage_options', 'bokketch_admin_menu.php', 'bokketch_admin_menu_page' );}add_action('admin_menu', 'add_bokketch_admin_menu');
function bokketch_admin_menu_page() { echo 'とりあえず管理画面になんか表示'; }
page_title menu_titleaccess_level/capability file function
Fb admins
WordPressハンズオン
この後はWordPressの教科書にのっている
などを作ってみると理解が進むかも。。
プラグインとの関わり方
http://wordbench.org/2013/12/07/wordbench-tokyo-201312-report/
WordBench 東京12月: プラグインについて話そう!振り返りレポート
ありがとうございました