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