Php+Word Press

9,110 views
8,930 views

Published on

9/8日開催のアリウープセミナのPHP+Worpressセミナのセッション1の資料です。

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,110
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
21
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Php+Word Press

  1. 1. PHP+WordPress 有限会社アリウープ 柏岡 秀男 Twitter:@kashioka Kashioka(at)lleyoop.jp http://alleyoop.jp
  2. 2. 自己紹介 <ul><li>2002 年よりPHPを中心としたWEBアプリケーション開発会社を始める </li></ul><ul><li>PHPカンファレンスでは2000年の開始当初から主に初心者セッションや懇親会の仕切りを担当 </li></ul><ul><li>バリバリの職人系 WEB アプリ屋です </li></ul><ul><li>そして PHP   WordPress LOVE ! </li></ul>
  3. 3. 他アプリケーションとの連動 <ul><li>テンプレート埋め込み </li></ul><ul><li>プラグイン化 </li></ul><ul><li>単純に他アプリに取り込むのであればスクレイピング </li></ul><ul><li>OpenIDの利用(プラグイン) </li></ul><ul><li>クッキーやセッションの利用(ドメインに注意) </li></ul><ul><li>フレームワーク等からDBを直接参照(後ほどのセッション参照) </li></ul>
  4. 4. テンプレートについて <ul><li>簡単なカスタマイズはテンプレートから </li></ul>
  5. 5. テンプレート構造(デフォルトテーマ) <ul><li>404.php </li></ul><ul><li>comments.php </li></ul><ul><li>image.php </li></ul><ul><li>search.php </li></ul><ul><li>archive.php </li></ul><ul><li>footer.php </li></ul><ul><li>index.php </li></ul><ul><li>searchform.php </li></ul><ul><li>archives.php </li></ul><ul><li>functions.php </li></ul><ul><li>links.php </li></ul><ul><li>sidebar.php </li></ul><ul><li>comments-popup.php </li></ul><ul><li>header.php </li></ul><ul><li>page.php </li></ul><ul><li>single.php </li></ul>
  6. 6. テンプレート構造例(カスタム) <ul><li>404.php </li></ul><ul><li>footer.php </li></ul><ul><li>links.php </li></ul><ul><li>sidebar-single.php </li></ul><ul><li>960.css </li></ul><ul><li>functions.php </li></ul><ul><li>page.php </li></ul><ul><li>sidebar.php </li></ul><ul><li>archive.php </li></ul><ul><li>header.php </li></ul><ul><li>reset.css </li></ul><ul><li>single.php </li></ul><ul><li>Image.php </li></ul><ul><li>rtl.css </li></ul><ul><li>style.css </li></ul><ul><li>archives.php </li></ul><ul><li>Images </li></ul><ul><li>screenshot.png </li></ul><ul><li>tag.php </li></ul><ul><li>comments-popup.php </li></ul><ul><li>index.php </li></ul><ul><li>search.php </li></ul><ul><li>text.css </li></ul><ul><li>comments.php </li></ul><ul><li>index_bak.php </li></ul><ul><li>searchform.php </li></ul><ul><li>wp-config.php </li></ul>
  7. 7. ページ構成 header.php footer.php sidebar.php single.php page.php category.php archive.php <ul><li>ページ描画時にそれぞれのファイルが読み込まれる </li></ul><ul><li>テンプレートファイルはPurePHP </li></ul>
  8. 8. あるテーマの page.php の中身 <ul><li><?php get_header (); ?> </li></ul><ul><li><div id=&quot;content&quot; class=&quot;grid_8&quot;> </li></ul><ul><li><?php if (have_posts()) : while (have_posts()) : the_post(); ?> </li></ul><ul><li><div class=&quot;post&quot; id=&quot;post-<?php the_ID(); ?>&quot;> </li></ul><ul><li><h2><?php the_title(); ?></h2> </li></ul><ul><li><div class=&quot;entry&quot;> </li></ul><ul><li><?php the_content('<p class=&quot;serif&quot;>Read the rest of this page &raquo;</p>'); ?> </li></ul><ul><li><?php wp_link_pages(array('before' => '<p><strong>Pages:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?> </li></ul><ul><li></div> </li></ul><ul><li></div> </li></ul><ul><li><?php endwhile; endif; ?> </li></ul><ul><li><?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?> </li></ul><ul><li></div> </li></ul><ul><li><?php get_sidebar ('single'); ?> </li></ul><ul><li><?php get_footer (); ?> </li></ul>
  9. 9. プラグインについて
  10. 10. プラグイン <ul><li>探してみて無い場合は作ってしまえばよい </li></ul><ul><li>http:// wpdocs.sourceforge.jp / プラグインの作成 </li></ul><ul><li>Worpress に対して行われる処理にフックされプラグインの処理を行う。 </li></ul><ul><li>アクションとフィルタの2種類がある </li></ul><ul><ul><li>アクション --WordPress で発生するイベントによって実行されます。 </li></ul></ul><ul><ul><li>フィルタ -- 出力時に実行されテキストデータを変更するものです。 </li></ul></ul>
  11. 11. 作り方—プラグイン動作の仕組み <ul><li>イベント発生時に実行する PHP 関数をプラグインファイル内に作成 </li></ul><ul><li>add_action,add_filter を呼び出して WordPress にフック </li></ul><ul><li>class alleyoopChiezo{ </li></ul><ul><li>function __construct(){ </li></ul><ul><li>} </li></ul><ul><li>function outputChiezo($content) { </li></ul><ul><li>if(!is_single()) return $content; </li></ul><ul><li>$content .= $this->getQuestion(); </li></ul><ul><li>return $content; </li></ul><ul><li>} </li></ul><ul><li>中略 </li></ul><ul><li>} </li></ul><ul><li>$ac = new alleyoopChiezo(); </li></ul><ul><li>add_filter('the_content', array(&$ac,'outputChiezo'),200); </li></ul><ul><li>プラグイン内の PHP 関数が挿入され、始動される </li></ul>
  12. 12. アクションフックの一例 <ul><li>publish_post </li></ul><ul><ul><li>投稿記事が公開された際、または公開済みの記事の情報が編集された際に実行する。 </li></ul></ul><ul><li>comment_post </li></ul><ul><ul><li>コメントがデータベースに保存される直前に実行する。 </li></ul></ul><ul><li>trackback_post </li></ul><ul><ul><li>投稿記事にトラックバックが追加された際に実行する。 </li></ul></ul><ul><li>wp_meta </li></ul><ul><ul><li>sidebar.php テンプレートが wp_meta 関数を呼び出す際に実行し、プラグインがサイドバーにコンテンツを挿入することができるようにする。 </li></ul></ul>
  13. 13. フィルタフックの一例 <ul><li>the_title </li></ul><ul><li>the_content </li></ul><ul><li>the_tags </li></ul><ul><ul><li>データベースから取得したデータを画面に出力する前に適用される。 </li></ul></ul><ul><li>詳しくは http://wpdocs.sourceforge.jp/ プラグイン _API/ </li></ul>
  14. 14. 簡単なカスタマイズ <ul><li>The_title や the_content 等にフックする </li></ul><ul><li>ややこしい処理は外部クラスとしてライブラリ化してしまう。 </li></ul><ul><li>既存のライブラリ化したものの再利用が可能 </li></ul>
  15. 15. スクレイピングについて <ul><li>コンテンツ取り込み </li></ul>WordPress 他システム
  16. 16. OpenPNE に読み込む例 <ul><li>HTTP/Client </li></ul><ul><li>PEAR のパッケージ </li></ul><ul><li>require_once &quot;HTTP/Client.php&quot;; </li></ul><ul><li>$client =& new HTTP_Client(); </li></ul><ul><li>$client->get($blog_url); </li></ul><ul><li>$response = $client->currentResponse() </li></ul><ul><li>$body = $response['body']; </li></ul><ul><li>//URL 変更 </li></ul><ul><li>$after = preg_replace('/a href=(['|&quot;])+(http://.+)(/[0-9a-z-/._?=&%[]~]*)/i',&quot;a href=$1&quot; . OPENPNE_URL . '?m=pc&a=page_h_view_colum&b=' . $colum_name . '&q=$2$3',$body); </li></ul><ul><li>//GOLD 対応 </li></ul><ul><li>if(getGold($u)){ </li></ul><ul><li>$after = preg_replace('/[GOLD](.+)[/GOLD]/i','',$after); </li></ul><ul><li>} </li></ul><ul><li>$this->set('h_column_body', $after); </li></ul>
  17. 17. スクレイピングTip <HTML> <BODY> < TITLE>XXX</TITLE> <DIV ID= contents > <a href=http://sss.com>a</a> <a href=http://sss.com>a</a> コンテンツ < / DIV> </BODY> </HTML> Wordpressのページ <ul><li>html SQL ( http://www.jonasjohn.de/lab/htmlsql.htm ) </li></ul><ul><li>SQL のように HTML の要素を抜ける </li></ul><ul><li>WHERE 句 </li></ul><ul><li>WHERE $class == “classname&quot; </li></ul><ul><li>WHERE $id == “idname&quot; </li></ul><ul><li>WHERE preg_match(&quot;/^http:///&quot;, $href ) </li></ul>
  18. 18. OpenID <ul><li>WP-OpenID 他各種プラグインがある </li></ul><ul><li>用途に合わせ考える </li></ul><ul><li>mixiOpenID や hatenaOpenID との連動も可能 </li></ul><ul><li>OpenID の仕組みが初めから入っているアプリであれば ID 連動が簡単 </li></ul>
  19. 19. クッキーやセッション <ul><li>別アプリで動いているクッキーやセッションを利用しユーザ権限等を再利用する </li></ul><ul><li>クッキーにはドメイン指定がされている場合があるので注意が必要 </li></ul><ul><li>setcookie(&quot;TestCookie&quot;, $value, time()+3600, &quot;/~rasmus/&quot;, &quot;.example.com&quot;, 1); </li></ul><ul><li>http://www.php.net/manual/ja/function.setcookie.php </li></ul>
  20. 20. まとめ <ul><li>連動する目的を事前に考える </li></ul><ul><li>WordPress のカスタマイズは極力やめる </li></ul><ul><ul><li>バージョンアップ時に対応が難しいため </li></ul></ul><ul><li>ライブラリ化した上でのプラグイン化を行う </li></ul><ul><li>他システムから利用する場合もバージョンアップに引きずられない設計、設置を考える </li></ul>
  21. 21. <ul><li>ご清聴ありがとうございました。 </li></ul><ul><li>開発その他のご相談、お気軽にe-mail,メッセージしてください </li></ul>
  22. 22. PHP+WordPress 有限会社アリウープ 柏岡 秀男 Twitter:@kashioka Kashioka(at)lleyoop.jp http://alleyoop.jp

×