<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>TRIPLEXXX</title>
	
	<link>http://triplexxx.jp</link>
	<description>Build up web skills</description>
	<pubDate>Fri, 12 Sep 2008 09:12:47 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Triplexxx" /><feedburner:info uri="triplexxx" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>jQueryでアコーディオンメニューを作成する</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/WPyCILglIpY/150</link>
		<comments>http://triplexxx.jp/archives/150#comments</comments>
		<pubDate>Fri, 12 Sep 2008 08:56:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[UI]]></category>

		<category><![CDATA[メニュー]]></category>

		<guid isPermaLink="false">http://triplexxx.jp/?p=150</guid>
		<description><![CDATA[アコーディオンメニューは、数あるメニューUIの中で最もサンプルが多いように思います。しかし、レイアウトや動作がクロスブラウザで満足いくものはなかなか見当たりません。そこで今回は、クロスブラウザ,XHTML＆CSS val [...]]]></description>
			<content:encoded><![CDATA[<p>アコーディオンメニューは、数あるメニューUIの中で最もサンプルが多いように思います。しかし、レイアウトや動作がクロスブラウザで満足いくものはなかなか見当たりません。そこで今回は、クロスブラウザ,XHTML＆CSS valid なアコーディオンメニューの作り方を説明します。まず jQuery を使った必要最小限のコードで実装してから、順に仕上げていくことにします。</p>
<p><span id="more-150"></span></p>
<h3>シンプルなアコーディオンメニュー</h3>
<p>xhtml:</p>
<pre class="code xhtml">&lt;ul class=&quot;acc&quot;&gt;
	&lt;li&gt;&lt;a href=&quot;1&quot;&gt;category1&lt;/a&gt;
		&lt;ul class=&quot;fxmn&quot;&gt;
			&lt;li&gt;&lt;a href=&quot;11&quot;&gt;menu 1-1&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;12&quot;&gt;menu 1-2&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;13&quot;&gt;menu 1-3&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;2&quot;&gt;category2&lt;/a&gt;
		&lt;ul class=&quot;fxmn&quot;&gt;
			&lt;li&gt;&lt;a href=&quot;21&quot;&gt;menu 2-1&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;22&quot;&gt;menu 2-2&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;23&quot;&gt;menu 2-3&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;24&quot;&gt;menu 2-4&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;3&quot;&gt;category3&lt;/a&gt;
		&lt;ul class=&quot;fxmn&quot;&gt;
			&lt;li&gt;&lt;a href=&quot;31&quot;&gt;menu 3-1&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;32&quot;&gt;menu 3-2&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;33&quot;&gt;menu 3-3&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;34&quot;&gt;menu 3-4&lt;/a&gt;&lt;/li&gt;
			&lt;li&gt;&lt;a href=&quot;35&quot;&gt;menu 3-5&lt;/a&gt;&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/li&gt;
&lt;/ul&gt;</pre>
<p>css:</p>
<pre class="code css">ul.acc, ul.acc li ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

ul.acc a{
	display: block;
	height: 30px;
	line-height: 30px;
	color: #feffff;
}

ul.acc {
	background-color: #185AAC;
}

ul.acc li ul {
	background-color: #A6B5E2;
}</pre>
<p>javascript:</p>
<pre class="code js">	var j$ = jQuery;

	j$(function(){
		j$(&quot;.acc&quot;).each(function(){
			j$(&quot;li &gt; a&quot;, this).each(function(index){
				var $this = j$(this);

				if(index &gt; 0) $this.next().hide();

				$this.click(function(){
					j$(this).next().toggle().parent().siblings()
						.children(&quot;ul:visible&quot;).hide();
					return false;
				});
			});
		});
	});
</pre>
<p>アコーディオンメニュー：</p>
<ul class="acc accn">
<li><a href="1">category1</a>
<ul>
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul>
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="23">menu 2-3</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul>
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h3>メニューの開閉動作をスムースなアニメーションにする</h3>
<p>jQueryっぽく、メニュー開閉時にアニメーションさせます。</p>
<p>javascript:</p>
<pre class="code js">//　変更前
				j$(this).next().toggle().parent().siblings()
					.children(&quot;ul:visible&quot;).hide();
 				//　変更後
				var params = {height:&quot;toggle&quot;, opacity:&quot;toggle&quot;};
				j$(this).next().animate(params).parent().siblings()
					.children(&quot;ul:visible&quot;).animate(params);
</pre>
<p>スムーズに開閉するアコーディオンメニュー：</p>
<ul class="acc accs">
<li><a href="1">category1</a>
<ul>
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul>
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="23">menu 2-3</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul>
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h3>メニューの高さを揃える</h3>
<p>メニュー項目の数によらずメニュー領域の高さを固定にする場合は、ul.acc li ul 要素の height を指定します。これはアコーディオンというのかスライドメニューというのか。</p>
<p>CSS:</p>
<pre class="code css">ul.acc li ul {
  height 150px;
}</pre>
<p>各メニューの高さが揃っているアコーディオンメニュー:</p>
<ul class="acc accs">
<li><a href="1">category1</a>
<ul class="fxmn">
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul class="fxmn">
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="23">menu 2-3</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul class="fxmn">
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h3>横幅を指定する</h3>
<p>アコーディオンメニューの横幅を固定にする場合は、最上位の ul 要素の width を指定します。</p>
<p>CSS:</p>
<pre class="code css">ul.acc {
  width 150px;
}</pre>
<p>横幅が固定されたアコーディオンメニュー:</p>
<ul class="acc accs accw">
<li><a href="1">category1</a>
<ul class="fxmn">
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul class="fxmn">
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul class="fxmn">
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h3>カテゴリの背景を画像にする</h3>
<p>背景画像を使って角が丸いアコーディオンメニューを作成します。最下段のカテゴリは、閉じているときに角丸、開いているときに矩形、の画像に各々切り替えます。</p>
<p>javascript:</p>
<pre class="code js">
function setBackground() {
	var $last = j$(&quot;.acc &gt; li:last &gt; a&quot;);
	if($last.hasClass(&quot;close&quot;))
		$last.css(&quot;background-position&quot;, &quot;left bottom&quot;);
	else
		$last.css(&quot;background-position&quot;, &quot;left -30px&quot;);
}

j$(&quot;.acc&quot;).each(function(){
	j$(&quot;li &gt; a&quot;, this).each(function(index){
		var $this = j$(this);

		if(index &gt; 0)
			$this.addClass(&quot;close&quot;).next().hide();
		else
			$this.css(&quot;background-position&quot;, &quot;left top&quot;);

		setBackground();

		var params = {height:&quot;toggle&quot;, opacity:&quot;toggle&quot;};
		$this.click(function(){
			j$(this).toggleClass(&quot;close&quot;).next().animate(params)
				.parent().siblings().children(&quot;ul:visible&quot;)
					.animate(params).prev().addClass(&quot;close&quot;);
			setBackground();
			return false;
		});
	});
});</pre>
<p>CSS:</p>
<pre class="code css">/* 背景色は削除すること
ul.acc{
	background-color: #185AAC;
}
*/
/* ul.acc &gt; li &gt; a {  IE6では無効 */
/* ↓メニュー項目にも背景画像が設定される */
ul.acc li a {
  background: url(images/acc_bg.png) left -30px no-repeat;
}

/* メニュー項目の背景画像をクリアする */
ul.acci li ul li a {
  background: none;
}</pre>
<p>カテゴリの背景画像を設定したアコーディオンメニュー:</p>
<ul class="acc accw acci">
<li><a href="1">category1</a>
<ul class="fxmn">
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul class="fxmn">
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="23">menu 2-3</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul class="fxmn">
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h4>IE6の場合</h4>
<p>IE6ではアニメーション動作が飛んでしまいます。また、背景画像の透過部分が青っぽくなります。iepngfix 等で透過させると background-position での背景画像切り替えが動作しません。IE6での表示を考えるなら、透過画像ではなく角丸の外を背景色でペイントした画像を使うのが簡単です。</p>
<h3>Finally</h3>
<p>以下の項目を調整して完成です。</p>
<ul>
<li>最下段メニューのオープン時にメニューリストの bottom を角丸にする。</li>
<li>アンカーリンクのインデント，デコレーション。</li>
<li>メニュー開閉時のアニメーション速度。</li>
</ul>
<p>brush-up 後のアコーディオンメニュー:</p>
<ul class="acc accw accf">
<li><a href="1">category1</a>
<ul class="fxmn">
<li><a href="11">menu 1-1</a></li>
<li><a href="12">menu 1-2</a></li>
<li><a href="13">menu 1-3</a></li>
</ul>
</li>
<li><a href="2">category2</a>
<ul class="fxmn">
<li><a href="21">menu 2-1</a></li>
<li><a href="22">menu 2-2</a></li>
<li><a href="23">menu 2-3</a></li>
<li><a href="24">menu 2-4</a></li>
</ul>
</li>
<li><a href="3">category3</a>
<ul class="fxmn">
<li><a href="31">menu 3-1</a></li>
<li><a href="32">menu 3-2</a></li>
<li><a href="33">menu 3-3</a></li>
<li><a href="34">menu 3-4</a></li>
<li><a href="35">menu 3-5</a></li>
</ul>
</li>
</ul>
<h4>ダウンロード</h4>
<p><a href="/files/xxx_accordion.zip" title="ダウンロードします">xxx_accordion.zip</a>(4KB)</p>
<p>以下のファイルが含まれています。</p>
<ul>
<li>index.htm</li>
<li>acc_bg.png　カテゴリの背景画像</li>
<li>acc_menu_last.png　最下段メニューリストの bottom 用画像</li>
</ul>
<p>利用するには、<a href="http://jquery.com/" title="jQuery公式サイト">jQuery</a>(バージョン1.2.6以上)が必要です。</p>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/WPyCILglIpY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/150/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/150</feedburner:origLink></item>
		<item>
		<title>WordPressのSyntaxHighlighterプラグインをカスタマイズする</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/B5d-5AtwWvw/117</link>
		<comments>http://triplexxx.jp/archives/117#comments</comments>
		<pubDate>Thu, 17 Jul 2008 10:11:01 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[カスタマイズ]]></category>

		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://triplexxx.jp/?p=106</guid>
		<description><![CDATA[ソースコードをサイトで表示するときに、キーワードなどを色付けして見やすい表示にする場合によく使われるのが syntaxhighlighter です。これを WordPress でも利用できるようにプラグインにしたものが  [...]]]></description>
			<content:encoded><![CDATA[<p>ソースコードをサイトで表示するときに、キーワードなどを色付けして見やすい表示にする場合によく使われるのが <a href="http://code.google.com/p/syntaxhighlighter/">syntaxhighlighter</a> です。これを WordPress でも利用できるようにプラグインにしたものが <a href="http://wordpress.org/extend/plugins/syntaxhighlighter/">SyntaxHighlighter</a> プラグインです。そのままでも手軽に使えて便利ですが、表示のオプションを自由に指定できるようにカスタマイズします。</p>
<p><span id="more-117"></span></p>
<h3>カスタマイズの内容</h3>
<p>オリジナルの syntaxhighlighter は、<code class="code xhtml span">name=&quot;code&quot;</code>の属性を指定した pre，textarea の DOM 要素に作用します。また、言語の種類やオプションを<code class="code xhtml span">class=&quot;html:collapse&quot;</code>のように class の値で指定します（<a href="http://code.google.com/p/syntaxhighlighter/wiki/Usage">使い方を参照</a>）。</p>
<p>変更したい点:</p>
<ul>
<li>name は XHTML では id に代わるので使いたくない。</li>
<li>class にコロン（：）区切りでオプションを指定したくない</li>
<li>対象タグは pre，textarea よりも pre，code にしたい。</li>
</ul>
<p>SyntaxHighlighter プラグインでは、エントリ本文中に以下のようなプレースホルダでコードを囲みます（<a href="http://wordpress.org/extend/plugins/syntaxhighlighter/other_notes/">使い方を参照</a>）。エントリが表示されるときにフィルタでフックして、プレースホルダを syntaxhighlighter の仕様にあわせた pre タグに変換します。</p>
<p>エントリ記述例:（※実際は半角のカッコを使います）</p>
<pre class="code css simple">［code=&quot;css&quot;］background-color: #123456;［/code］</pre>
<p>変換例:</p>
<pre class="code html simple">&lt;pre name=&quot;code&quot; class=&quot;css&quot;&gt;background-color: #123456;&lt;/pre&gt;</pre>
<p>変更したい点:</p>
<ul>
<li>言語以外の以下のオプションも指定したい。
<ul>
<li>行番号の有無</li>
<li>開始行番号</li>
<li>ツールバーの有無</li>
</ul>
</li>
<li>リストの表示（＋開く）/非表示（－閉じる）を切り替えたい。</li>
<li>1行だけの表示を簡単に可能にしたい。</li>
<li>インライン表示を可能にしたい。</li>
</ul>
<h3>カスタマイズ仕様</h3>
<p>プレースホルダは以下の書式とします。</p>
<pre class="code html simple">［code=&quot;言語 オプション1 オプション2･･･&quot;］コード［/code］</pre>
<p>言語の種類は、本家を<a href="http://code.google.com/p/syntaxhighlighter/wiki/Languages">参照してください</a>。オプションは、オリジナルのものと、追加したものをあわせて指定できるようにします。</p>
<p>オリジナルのオプション:</p>
<ul>
<li>nogutter　･･･　行番号欄を非表示にします。</li>
<li>nocontrols　･･･　ツールバーを非表示にします。</li>
<li>showcolumns　･･･　リストの初めにカラムを表示します。</li>
<li>collapse　･･･　リストを閉じて表示します。ツールクリックでリストが開きます。オリジナルは1度開くと開きっぱなしですが、自由に開閉できるようにします。</li>
<li>first-番号　･･･　行番号の開始番号を指定します。オリジナルの書式は first[番号] ですが、これをクラス名に指定したくないので変更しました。</li>
</ul>
<p>オリジナルのオプション:</p>
<ul>
<li>simple　･･･　行番号欄、ツールバーともに非表示。</li>
<li>span　･･･　インライン表示します。</li>
</ul>
<h3>WordPressプラグインのカスタマイズ</h3>
<p>syntaxhighlighter.php:</p>
<ul>
<li>GetBBCode() 関数の正規表現にオプションの内容を追加します。
<pre class="code php simple">$regex .= &#039;((\s+(span|simple|nogutter|nocontrols|collapse|showcolumns|firstline\-[0-9]+))*)&#039;;</pre>
</li>
<li>正規表現でマッチしたソースコード部分のインデックスを随所で「5番目」と決め打ちしているので、変数にしておきます。正規表現を変更したのでインデックス値も変わります。
<pre class="code php simple">
var $match_code = 8;
var $match_lang = 4;
var $match_opt = 5;
　　：
$match[5]
　　↓
$match[$this-&gt;match_code]
</pre>
</li>
<li>タグ生成の箇所で、span オプション指定なら code タグ、それ以外は pre タグにします。また、<code class="code php span">name=&quot;code&quot;</code>をクラスへ変更します。
<pre class="code php simple">
$content = str_replace( $match[0], &#039;&lt;pre name=&quot;code&quot; class=&quot;&#039; . $language . ～
　　↓
$opt = $match[$this-&gt;match_opt];
$tag = strpos($opt, &#039;span&#039;) ? &#039;code&#039; : &#039;pre&#039;;
$content = str_replace( $match[0], &#039;&lt;&#039; . $tag . &#039; class=&quot;code &#039; . $language . $opt . ～
</pre>
</li>
</ul>
<h3>syntaxhighlighterのカスタマイズ</h3>
<p>WordPressプラグインSyntaxHighlighter に同梱されている shCore.js は、コメントやスペースが除かれていて読みにくいため、<a href="http://code.google.com/p/syntaxhighlighter/">オリジナル</a>を使いましょう。以下に変更の要点を説明します。</p>
<p>shCore.js:</p>
<ul>
<li>適用対象である code の値を持つ属性を name から class に変更します。
<pre class="code js simple">
if(tags[i].getAttribute(&#039;name&#039;) == name)
　　↓
if(tags[i].className.indexOf(name) != -1)
</pre>
</li>
<li>オプション区切りをコロン（：）からスペースに変更します。
<pre class="code js simple">
options = options.split(&#039;:&#039;);
　　↓
options = options.split(&#039; &#039;);
</pre>
</li>
<li>書式を firstline[番号]から firstline-番号に変更します。
<pre class="code js simple">
var regex = new RegExp(&#039;^&#039; + name + &#039;\\[(\\w+)\\]$&#039;, &#039;gi&#039;);
　　↓
var regex = new RegExp(&#039;^&#039; + name + &#039;\\-(\\w+)$&#039;, &#039;gi&#039;);
</pre>
</li>
<li>対象要素を textarea から code に変更します。
<pre class="code js simple">
	FindTagsByName(elements, name, &#039;textarea&#039;);
　　↓
	FindTagsByName(elements, name, &#039;code&#039;);
</pre>
</li>
<li>インライン表示のために各所を変更します。asSpan の記述全般です。
<pre class="code js simple">
dp.sh.Highlighter = function()
{
　　：
  this.asSpan = false; // 追加
　　：
</pre>
</li>
<li>collapse 指定時にソースリストを開閉できるようにします。
<pre class="code js simple">
sender.parentNode.removeChild(sender);
highlighter.div.className = highlighter.div.className.replace(&#039;collapsed&#039;, &#039;&#039;);
　　↓
if(highlighter.div.className.indexOf(&#039;collapsed&#039;) != -1){
  highlighter.div.className = highlighter.div.className.replace(&#039;collapsed&#039;, &#039;&#039;);
  sender.innerHTML = &#039;－source&#039;;
}
else{
  highlighter.div.className = highlighter.div.className + &#039; collapsed&#039;;
  sender.innerHTML = this.label;
}
</pre>
</li>
</ul>
<h3>インライン表示時の不具合修正</h3>
<p>span オプションでインライン表示する場合は、code タグに変換しているのですが、WordPressのエディタのタグ自動補完機能によりソースコードの最後に<code class="code html span">&lt;br /&gt;</code>が付いてしまいます。これを回避するために、WordPress のファイル wp-includes/formatting.php を修正します。</p>
<ol>
<li>function clean_pre() と同じ処理を code タグ用に追加します。
<pre class="code php">
function clean_code($matches) {
  if ( is_array($matches) )
    $text = $matches[1] . $matches[2] . &quot;&lt;/code&gt;&quot;;
  else
    $text = $matches;

  $text = str_replace(&#039;&lt;br /&gt;&#039;, &#039;&#039;, $text);
  $text = str_replace(&#039;&lt;p&gt;&#039;, &#039;&#039;, $text);
  $text = str_replace(&#039;&lt;/p&gt;&#039;, &#039;&#039;, $text);

  return $text;
}
</pre>
</li>
<li>上記関数を pre タグの処理後に呼び出します。
<pre class="code php">
  if (strpos($pee, &#039;&lt;pre&#039;) !== false)
    $pee = preg_replace_callback(～
  //  以下を追加
  if (strpos($pee, &#039;&lt;code&#039;) !== false)
    $pee = preg_replace_callback(&#039;!(&lt;code.*?&gt;)(.*?)&lt;/code&gt;!is&#039;, &#039;clean_code&#039;, $pee );
</pre>
</li>
</ol>
<h3>使用例</h3>
<p>&#8220;php span&#8221;:</p>
<p>これはスパン<code class="code php span">if($hoge == &#039;hoge&#039;)</code>の例です。</p>
<p>&#8220;php nogutter&#8221;:</p>
<pre class="code php nogutter">if($hoge == &#039;hoge&#039;)</pre>
<p>&#8220;php nocontrols&#8221;:</p>
<pre class="code php nocontrols">if($hoge == &#039;hoge&#039;)</pre>
<p>&#8220;php simple&#8221;:</p>
<pre class="code php simple">if($hoge == &#039;hoge&#039;)</pre>
<p>&#8220;php collapse firstline-13&#8243;:</p>
<pre class="code php collapse firstline-13">
if($hoge == &#039;hoge&#039;)
  $hoe .= &#039;hoge&#039;;
</pre>
<h3>ダウンロード</h3>
<p>オリジナル:</p>
<p><a href="http://wordpress.org/extend/plugins/syntaxhighlighter/">SyntaxHighlighter</a></p>
<p>変更したファイル:</p>
<p><a href="/files/xxx_SyntaxHighlighter.zip">xxx_SyntaxHighlighter.zip</a>&nbsp;(27KB)</p>
<p>以下のファイルが含まれています。</p>
<ul>
<li>shCore.js</li>
<li>syntaxhighlighter.php</li>
<li>SyntaxHighlighter.css</li>
<li>formatting.php</li>
</ul>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/B5d-5AtwWvw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/117/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/117</feedburner:origLink></item>
		<item>
		<title>jQueryでページ内リンクをスムーズスクロールする</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/SB7bW1UQxsg/116</link>
		<comments>http://triplexxx.jp/archives/116#comments</comments>
		<pubDate>Tue, 15 Jul 2008 09:17:43 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[UI]]></category>

		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://triplexxx.jp/?p=104</guid>
		<description><![CDATA[ページ内へのアンカーリンク &#60;a href=&#8221;#hoge&#8221;&#62; をクリックすると、通常は一瞬で移動するため、ページのどの辺りにいるのかわからなくなり、閲覧者を混乱させることがあるかもしれ [...]]]></description>
			<content:encoded><![CDATA[<p>ページ内へのアンカーリンク &lt;a href=&#8221;#hoge&#8221;&gt; をクリックすると、通常は一瞬で移動するため、ページのどの辺りにいるのかわからなくなり、閲覧者を混乱させることがあるかもしれません。これを改善した、良くあるわかりやすいナビゲーションは、移動をスムースなスクロールで行うものです。スムーススクロールを簡単に実現するなら jQuery のみでもできますし、スクロール用のプラグインを使っても良いです。ここではその両方を紹介し、WordPressプラグインとして利用できるようにします。</p>
<p><span id="more-116"></span></p>
<h3 id="h3-1">WordPressプラグインの作成</h3>
<p># で始まるページ内リンクはリンク先へスムーススクロールし、リンク先が #_top となっているリンクは body タグへスムーススクロールさせます。 #_top を id に持つタグを XHTML に記述しておく必要はありません。プラグインファイルは以下のようになります。<a href="http://jquery.com/">jquery.js</a> は必須です。ScrollTo プラグインを使うなら <a href="http://plugins.jquery.com/project/ScrollTo">jquery.scrollTo.js</a> も必要です。このように、WordPressプラグインが他のライブラリに依存する場合は、通常はプラグインのフォルダを作成し、そこに関連ファイルをまとめます。プラグイン公開・配布の予定が無い場合で、共通に使うライブラリファイルがプラグインごとに重複して存在するのを避けたいなら、/wp-includes/js/jquery/ 以下や独自の js フォルダ以下にアップロードして参照すると良いでしょう。</p>
<pre class="code php">
&lt;?php
/*
Plugin Name: XXX Smooth Scroll to Anchor
Plugin URI: http://triplexxx.jp/
Description: Smooth Scroll to Anchor
Author: xxx
Author URI: http://triplexxx.jp/
Version: 1.0
*/

function xxx_scroll_init()
{
	//  JavaScriptファイルの場所を指定します
	$url = get_bloginfo(&#039;wpurl&#039;);

	//  インクルードフォルダ以下の場合
	$url .= &#039;/wp-includes/js/jquery/&#039;;
	//  プラグインフォルダの場合
	//$url .= &#039;/wp-content/plugins/xxx_scroll/&#039;;

	wp_enqueue_script(&#039;jquery&#039;);

	//  jQuery ScrollToプラグインを使う場合
	//wp_enqueue_script(
	//	&#039;jquery_scrollTo&#039;
	//	, $url . &#039;jquery.scrollTo.js&#039;
	//	, array(&#039;jquery&#039;), &#039;1.3.3&#039;
	//);
}

function xxx_scroll()
{
?&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	var j$ = jQuery;

	j$(function(){
		j$(&#039;a[href^=#]&#039;).click(function() {
			var href= this.hash;
			var $target = j$(href == &#039;#_top&#039; ? &#039;body&#039; : href);

			if($target.size()) {
				//  jQuery のみの場合
				var top = $target.offset().top;
				j$(j$.browser.safari ? &#039;body&#039; : &#039;html&#039;)
					.animate({scrollTop:top}, 800, &#039;swing&#039;);
				//  jQuery ScrollToプラグインを使う場合
				//j$.scrollTo($target, 800, {easing:&#039;swing&#039;});
			}
			return false;
		});
	});
&lt;/script&gt;
&lt;?php
}

add_action(&#039;wp_print_scripts&#039;, &#039;xxx_scroll_init&#039;);
add_action(&#039;wp_head&#039;, &#039;xxx_scroll&#039;);
?&gt;
</pre>
<p>プラグインの要点を順に説明します。</p>
<pre class="code php">function xxx_scroll_init()</pre>
<p>スクリプトのインクルード用関数です。</p>
<pre class="code php">$url .= &#039;/wp-includes/js/jquery/&#039;;</pre>
<p>js ファイルを共通に使用します。WordPress の jQuery 関連フォルダにアップロードした場合です。</p>
<pre class="code php">$url .= &#039;/wp-content/plugins/xxx_scroll/&#039;;</pre>
<p>js ファイルをプラグイン専用に用意する場合は、こちらを使います。xxx_scroll プラグインフォルダ以下にアップロードした場合です。</p>
<pre class="code php">wp_enqueue_script(&#039;jquery&#039;);</pre>
<p>WordPress で 定義されている jQuery をインクルードします。wp_enqueue_script を使うと重複せずにインクルードできます。</p>
<pre class="code php">wp_enqueue_script(&#039;jquery.scrollTo&#039;, $url . &#039;jquery.scrollTo.js&#039;, array(&#039;jquery&#039;), &#039;1.3.3&#039;);</pre>
<p>ScrollTo プラグインをインクルードします。ファイルのパスと jquery に依存していることを指定しています。これだけでインクルード順序や重複の管理は WordPress が自動で行ってくれます。</p>
<pre class="code js">function xxx_scroll()</pre>
<p>スクロール処理を定義します。</p>
<pre class="code js">var j$ = jQuery;</pre>
<p>jQuery のままでも良いです。jQuery が長くて嫌、という場合にお好みの変数に代入しましょう。$ という表記もできますが <a href="http://www.prototypejs.org/">prototype.js</a> でも同じ表記を使用しているため名前が衝突します。jQuery では以下のようにしてこれを回避できます。</p>
<pre class="code js">
jQuery.noConflict();
var j$ = jQuery;
</pre>
<p>noConflict() で $ を他のライブラリに戻し、他の変数（例: j$）に置き換えます。面倒な場合は初めから jQuery の表記を使えば何も問題ありません。</p>
<pre class="code js">j$(function(){</pre>
<p>DOM の構築後に実行される関数です。いくつ定義しても上書きされず、すべて実行されるので便利です。j$(document).ready(function(){ と記述しても同じです。</p>
<pre class="code js">j$(&#039;a[href^=#]&#039;).click(function() { </pre>
<p>リンク先が # から始まる a タグを対象にして、click イベント時の処理を定義します。</p>
<pre class="code js">var href= this.hash;</pre>
<p>href の # 以降の文字列を取得します。</p>
<pre class="code js">var $target = j$(href == &#039;#_top&#039; ? &#039;body&#039; : href);</pre>
<p>#_top なら body 要素、それ以外は href の値を id に持つ DOM 要素を取得します。</p>
<pre class="code js">if($target.size()) { </pre>
<p>DOM 要素が存在する場合のみ、以降を実行します。</p>
<pre class="code js">var top = $target.offset().top;</pre>
<p>DOM 要素のページ内での top 位置を取得します。この位置までスクロールさせます。余分にスクロールさせたい場合は、必要なピクセル数を引きます。例:　var top = $target.offset().top - 50;</p>
<pre class="code js">
j$(j$.browser.safari ? &#039;body&#039; : &#039;html&#039;)
	.animate({scrollTop:top}, 800, &#039;swing&#039;);
</pre>
<p>html は FF3，IE6，Opera9、body は Safari3 でそれぞれページ全体を対象として正しく動作させるための指定です。animate で 800ms で top へスムーズに移動します。第3引数の easing には swing または linear を指定できますが、省略しても構いません。様々な easing 動作をさせる <a href="http://gsgd.co.uk/sandbox/jquery/easing/">easing プラグイン</a>もありますので、お好みで利用すると良いでしょう。</p>
<pre class="code js">j$.scrollTo( $target, 800, {easing:&#039;swing&#039;});</pre>
<p>ScrollTo プラグインを使う場合は、このように記述します。</p>
<pre class="code php">add_action( &#039;wp_print_scripts&#039;, &#039;xxx_scroll_init&#039; );</pre>
<p>xxx_scroll_init 関数を wp_print_scripts フックに追加します。wp_print_scripts は &lt;head&gt; 内にスクリプトをインクルードするタグを挿入します。</p>
<pre class="code php">add_action(&#039;wp_head&#039;, xxx_scroll);</pre>
<p>xxx_scroll 関数を wp_head フックに追加します。wp_head フックは通常、WordPressテーマの ヘッダテンプレート header.php 内 &lt;/head&gt; 終了タグの直前に記述されています。</p>
</p>
<pre class="code php">
&lt;?php wp_head(); ?&gt;
&lt;/head&gt;
</pre>
<p>ご使用のテーマのヘッダテンプレートにこの記述がない場合は追加してください。</p>
<h3>XHTML の記述</h3>
<p>以下のように、ページ内アンカーは通常通り、ページトップへのアンカーは #_top を指定します。</p>
<pre class="code xhtml">
&lt;a href=&quot;#h3-1&quot;&gt;「WordPressプラグインの作成」へ移動&lt;/a&gt;
&lt;a href=&quot;#_top&quot;&gt;ページの先頭へ移動&lt;/a&gt;
</pre>
<p>リンクの例:</p>
<ul>
<li><a href="#h3-1">「WordPressプラグインの作成」へ移動</a></li>
<li><a href="#_top">ページの先頭へ移動</a></li>
</ul>
<h3>&#8220;ページの先頭へ移動&#8221;を自動で追加</h3>
<p>エントリの最後には&#8221;ページの先頭へ移動&#8221;のリンクがあると親切です。これを自動で追加するプラグインを作成します。WordPress のエントリは、おおよそ以下のような構造になっています。</p>
<pre class="code xhtml">
&lt;div id=&quot;content&quot;&gt;
  :
  &lt;div class=&quot;post&quot;&gt;
    :
    &lt;div class=&quot;entry&quot;&gt;
      エントリ本文
    &lt;/div&gt;
    エントリ関連情報
  &lt;/div&gt;
  :
&lt;/div&gt;
</pre>
<p>テーマによっては、構造が異なりますので、ご利用のテーマについて予め調べておいてください。ここでは post の最後にリンクを作成することにします。</p>
<p>post の最後にリンクを追加:</p>
<pre class="code js">
$post = j$(&#039;.post&#039;);
if($post.size())
	$post.append(&#039;&lt;div class=&quot;block&quot;&gt;&lt;a href=&quot;#_top&quot;&gt;ページの先頭へ&lt;/a&gt;&lt;/div&gt;&#039;);
</pre>
<p>append は、対象の DOM 要素の子要素の末尾に XHTML文字列や DOM 要素を追加します。この例では、post クラスを持つ div の終了タグ直前にアンカーリンクを追加しています。これを先ほどのプラグインの初めに記述します。</p>
<pre class="code js">
j$(function(){
　ここに記述します
</pre>
<p>a タグの click イベント定義後に a タグを追加しても、リンク動作をしないので注意してください。a タグ作成後に click イベント定義、の順です。</p>
<h4>IEでは動作しない</h4>
<p>スクリプトで動的に a タグを追加すると IE では href に http から始まるホスト名が付加されるため、# から始まるリンク先を選択するセレクタ [href^=#] では対象外になってしまいます。そのため、以下のようにセレクタを追加する必要があります。</p>
<pre class="code js">&#039;a[href^=#], a[href$=#_top]&#039;</pre>
<p>これで #_top で終わっている a タグも選択されます。ただし、ほとんどないとは思いますが、別ページや外部リンクに #_top が付加されていると正しく動作しません。その場合は、自動で追加する a タグの id 名を #_top から他のものに変更してください。</p>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/SB7bW1UQxsg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/116/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/116</feedburner:origLink></item>
		<item>
		<title>CSSだけで作る伸縮ボタン</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/XjEGRcTx3Ns/115</link>
		<comments>http://triplexxx.jp/archives/115#comments</comments>
		<pubDate>Mon, 14 Jul 2008 12:35:17 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[ボタン]]></category>

		<guid isPermaLink="false">http://triplexxx.jp/?p=102</guid>
		<description><![CDATA[
横幅がキャプション（リンクテキスト）に応じて伸縮するボタンを、CSSのみ・ボタン用画像1枚だけ、で実現する方法をまとめます。これは、海外で scalable button，fancy button，sexy butto [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript"><!--
jQuery(function() {
  jQuery('.button3,.button2,.button1').each(function() {
    var me = jQuery(this);
    me.html('<span>'+ me.html() +'</span>');
    if(me.hasClass('button3'))
		  me.click(function() { this.blur(); });
  });
});
//--></script></p>
<p>横幅がキャプション（リンクテキスト）に応じて伸縮するボタンを、CSSのみ・ボタン用画像1枚だけ、で実現する方法をまとめます。これは、海外で scalable button，fancy button，sexy button，sliding doors 等と呼ばれているテクニックです。簡単に言うと「a タグに span タグを入れ子にして、それぞれの背景でボタンの左端からと右端からを表示する」となります。言うのは簡単ですが、クロスブラウザで実現するには細かなテクニックが必要です。さらに、ボタンの状態に合わせてボタンの画像を変更するテクニックも説明します。</p>
<p><span id="more-115"></span></p>
<h3>ボタン用画像</h3>
<p>ボタンの背景画像は、ボタンの状態に合わせてそれぞれ、通常状態，hover 状態（，active 状態）のように縦方向に連続して作成します。横幅は、サイトに使用するボタンとして十分に長いものにしてください。ここでは、透過PNG画像を使用します。</p>
<p><a rel="lightbox" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_cssbutton_bg.png'><img src="http://triplexxx.jp/wp-content/uploads/2008/07/wp_cssbutton_bg.png" alt="ボタンの背景画像" title="wp_cssbutton_bg" width="300" height="96" class="alignnone size-medium wp-image-103" /></a></p>
<h3>XHTML 記述例</h3>
<p>例としてボタンのクラスを &#8220;hogebutton&#8221; とします。XHTML は a タグに span タグを入れ子にしただけのもので良いです。</p>
<p>XHTMLソース:</p>
<pre class="code xhtml">
&lt;a class=&quot;hogebutton&quot; href=&quot;#&quot;&gt;&lt;span&gt;button&lt;/span&gt;&lt;/a&gt;;
</pre>
<p>span タグの存在が美しくない、という場合は、JavaScript でこっそり追加すると良いでしょう。以下は、前回作成した insert プラグインを使って、jQuery で button クラスを持つの DOM 要素内に span タグを追加する例です。</p>
<p>エントリ本文:</p>
<pre class="code xhtml">
&lt;a class=&quot;hogebutton&quot; href=&quot;#&quot;&gt;button&lt;/a&gt;;
&lt;!--xxx_insert:button_span,js--&gt;
</pre>
<p>カスタムフィールド button_span:</p>
<pre class="code js">
jQuery(function() {
  jQuery(&#039;.hogebutton&#039;).each(function() {
    var me = jQuery(this);
    me.html(&#039;&lt;span&gt;&#039;+ me.html() +&#039;&lt;/span&gt;&#039;);
  });
});
</pre>
<h3>CSS 記述例</h3>
<p>幅方向に伸縮するボタンを実現する CSS は以下の通りとてもシンプルです。</p>
<p>最小限の CSS:</p>
<pre class="code css">
a.hogebutton {
	float: left;
	padding-right: 20px; /* ボタン内　右側余白*/

	line-height: 42px;   /* ボタン高さ */
	background: url(hogebutton.png) right top no-repeat;

	cursor: pointer;
	margin-right: 5px;   /* ボタン外　右側余白*/
	outline: none;       /* FireFox:点線を非表示 */
}

a.hogebutton span {
	display: block;
	padding-left: 20px;  /* ボタン内　左側余白*/

	background: url(hogebutton.png) left top no-repeat;
	background-color: #E6DCDC; /* 透過部分の背景色 */
}
</pre>
<div class="block"><a class="button1" href="#">button</a><a class="button1" href="#">button button</a></div>
<ul>
<li>a タグに floatと右余白を指定。<br />
背景画像は右上端を基点にします。
</li>
<li>span タグに display と左余白を指定<br />
背景画像は左上端を基点にします。
</li>
<li>span タグに 上位層と同じ背景色を指定します。</li>
</ul>
<p>余白はアンカーテキストの左右に表示させるボタンの幅です。span タグに背景色を指定することで、span の背景画像の透過部分に a タグの背景画像が透けるのを防ぎます。</p>
<h3>hover，active でボタンの画像を変更</h3>
<p>実際は、ボタンの画像を変更するのではなく、表示する範囲を変更します。これは background-position の指定で実現できます。</p>
<p>hover，active の CSS:</p>
<pre class="code css">
a.hogebutton:hover {
	background-position: right -42px;
}

a.hogebutton:hover span {
	background-position: left -42px;
}

a.hogebutton:active {
	background-position: right bottom;
}

a.hogebutton:active span {
	background-position: left bottom;
}
</pre>
<div class="block"><a class="button2" href="#">button</a><a class="button2" href="#">button button</a></div>
<p>hover 時にY方向を -42px と指定することで背景画像を上にずらしています。その結果、ブロック内に表示されるのは背景画像のY=42px からとなります。active 時の bottom 指定は、画像の下端から表示することになります。</p>
<h4>IE:ボタンクリック後の表示</h4>
<p>IEではボタンクリック後も active の状態で表示されてしまいます。これを回避するには、ボタンの click イベント時に this.blur(); とします。</p>
<pre class="code xhtml">
&lt;a class=&quot;hogebutton&quot; href=&quot;#&quot; onclick=&quot;this.blur();&quot;&gt;
</pre>
<p>タグ内に JavaScript を記述したくない場合は、前述の span タグ追加と同じように jQuery で追加するのが簡単です。</p>
<pre class="code js">
jQuery(function() {
  jQuery(&#039;.hogebutton&#039;).each(function() {
    var me = jQuery(this);
		me.html(&#039;&lt;span&gt;&#039;+ me.html() +&#039;&lt;/span&gt;&#039;);
		me.click(function() { this.blur(); });
  });
});
</pre>
<div class="block"><a class="button3" href="#">button</a><a class="button3" href="#">button button</a></div>
<h3>ボタンへの回り込みを回避する</h3>
<p>float 指定したボタンは、以下のように以降の要素が回り込んでしまいます。</p>
<p>float 要素への回り込み:</p>
<p><a class="button3" href="#">button</a></p>
<p>このようにテキストがボタンに回り込んでしまいます。これを回避するためによく用いられるのは、float を解除する属性 clear: both; を使う方法です。</p>
<ul>
<li>float の次の要素に指定する。<br />
次の要素で前の float 要素の指定を解除するのは微妙？</li>
<li>after 擬似要素で指定する。<br />
IEでは使えない。</li>
</ul>
<p>clear を使用しない方法には、float された要素群を div で囲むというものがあります。このエントリで回り込みが発生していないボタンは、すべて以下の div で a タグ（群）を囲んでいます。このようにすると、前後に関係なくこのブロック内のみが float となるので、汎用的なコンテナとして使えます。</p>
<p>XHTML:</p>
<pre class="code xhtml">
&lt;div class=&quot;block&quot;&gt;float要素&lt;/div&gt;
</pre>
<p>CSS:</p>
<pre class="code css">
.block {
  overflow: hidden;
   width: 100%; /* IE */
}
</pre>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/XjEGRcTx3Ns" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/115/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/115</feedburner:origLink></item>
		<item>
		<title>WordPressにJavaScriptでFlashを表示する</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/2wtzXCBzKP8/114</link>
		<comments>http://triplexxx.jp/archives/114#comments</comments>
		<pubDate>Fri, 11 Jul 2008 00:00:15 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.triplexxx.jp/?p=101</guid>
		<description><![CDATA[前回に続いて、今回は javascript で動的にソースを書き出すことで、Flashを表示しつつ、XHTML Valid にする方法を説明します。

JavaScript で XHTML Valid
通常は以下のように [...]]]></description>
			<content:encoded><![CDATA[<p>前回に続いて、今回は javascript で動的にソースを書き出すことで、Flashを表示しつつ、XHTML Valid にする方法を説明します。</p>
<p><span id="more-114"></span></p>
<h3>JavaScript で XHTML Valid</h3>
<p>通常は以下のように、HTML の任意の位置に &lt;script&gt; タグで括って、document.write(&#8217;～&#8217;) と記述すれば JavaScript は実行されます。&lt;!&#8211; ～ &#8211;&gt; の部分はコメントと見なされるので XHTML Valid となります。</p>
<p>ソース:</p>
<pre>&lt;script type="text/javascript"&gt;
&lt;!--
document.write('
&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="200" HEIGHT="50" id="/image/flash_sample" ALIGN=""&gt; &lt;PARAM NAME=movie VALUE="/image/flash_sample.swf"&gt; &lt;PARAM NAME=quality VALUE=high&gt; &lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; &lt;EMBED src="flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;
<span class="marker">'</span>);
//<span class="marker">--</span>&gt;
&lt;/script&gt;</pre>
<p>しかし、WordPressのエディタにそのまま記述すると、&#8217; や &#8212; が 実体参照の &amp;#番号; のように変換されてしまうため、プラグインを使って document.write() を機能させる必要があります。</p>
<h4>プラグインの作成</h4>
<p>エントリ内にプレースホルダを記述し、ファイルやカスタムフィールドの内容と置換させます。</p>
<p>プレースホルダ:</p>
<pre>&lt;!--xxx_insert:ファイル名またはカスタムフィールドのキー--&gt;

例:　&lt;!--xxx_insert:hoge.js--&gt;  ファイル名　
例:　&lt;!--xxx_insert:hoge,js--&gt;  カスタムフィールド</pre>
<p>ピリオドとコンマが紛らわしいですが、ファイル拡張子が .js の JavaScript ファイル名か、カスタムフィールドのキー<strong>,js</strong>と記述すれば、JavaScript 用のタグを自動で追加するようにします。書式はお好みで変更してください。</p>
<p>ソース:</p>
<pre>function hoge_insert($content)
{
  global $post;

  $pattern = '&lt;!--xxx_insert:([\w\-\/]+)([\.|,\w$]*)--&gt;';

  if(!preg_match_all('@'.$pattern.'@', $content, $fields))
    return $content;

  $search  = array();
  $replace = array();

  for($i=0; $i&lt;count($fields[0]); $i++) {
    $key = $fields[1][$i];
    $ext = $fields[2][$i];
    $sep = substr($ext, 0, 1);
    $typ = substr($ext, 1);
    $val = '';

    if($sep == '.')
      $val = file_get_contents(TEMPLATEPATH.'/'.$key.$ext);
    else
      $val = get_post_meta($post-&gt;ID, $key, true);

    if(!empty($val)) {
      switch($typ) {
        case 'js':
          $val = '&lt;script type="text/javascript"&gt;'
               . "&lt;!--\n" . $val . "\n//--&gt;"
               . '&lt;/script&gt;';
        break;
      }

      $search[]  = $fields[0][$i];
      $replace[] = $val;
    }
  }

  return str_replace($search, $replace, $content);
}

add_filter('the_content', 'xxx_insert');</pre>
<p>このソースでプラグインファイルを作成し、プラグインフォルダにアップロードして、管理画面からプラグインを有効にします。</p>
<p>ファイルから置換する場合:</p>
<pre>&lt;!--xxx_insert:js/flash_sample.js--&gt;</pre>
<p><script type="text/javascript"><!--
document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="200" HEIGHT="50" id="flash_sample_file" ALIGN=""> <PARAM NAME=movie VALUE="/image/flash_sample.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="/image/flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>');

//--></script><br />
カスタムフィールドから置換する場合:</p>
<pre>&lt;!--xxx_insert:flash_sample,js--&gt;</pre>
<p><script type="text/javascript"><!--
document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="200" HEIGHT="50" id="flash_sample_meta" ALIGN=""> <PARAM NAME=movie VALUE="/image/flash_sample.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="/image/flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED></OBJECT>');
//--></script></p>
<h3>jQuery で XHTML Valid</h3>
<p><a href="http://jquery.lukelutman.com/plugins/flash/">jQuery Flash Plugin</a>を使うとさらに簡単に Flash を表示できます。  ソース:</p>
<pre>jQuery(function(){
  jQuery('#insert_flash_sample').flash({
    src: '/image/flash_sample.swf',
    width: 200,
    height: 50
  });
});</pre>
<p>上記ソースを .js ファイルかカスタムフィールドに記述し、エントリにはプレースホルダを記述します。ここでは例として、カスタムフィールドを使用し、キーを jquery_flash_sample とします。</p>
<p>ソース（エントリ内）:</p>
<pre>&lt;div id="insert_flash_sample"&gt;&lt;/div&gt;
&lt;!--xxx_insert:jquery_flash_sample,js--&gt;</pre>
<p>表示結果（Flash）:</p>
<div id="insert_flash_sample"></div>
<p><script type="text/javascript"><!--
jQuery(function() {jQuery('#insert_flash_sample').flash({
　src: '/image/flash_sample.swf',
　width: 200,
　height: 50
});
});
//--></script>なお、<a href="http://jquery.lukelutman.com/plugins/flash/">jQuery Flash Plugin</a> は Flash 挿入元の div を class=&#8221;alt&#8221; で置換するため、すでに同じクラス名を使用している場合は、これを変更しましょう。バージョン 1.0.1 なら、216行目 $$.replace 関数です。</p>
<pre>this.innerHTML = '&lt;div class="<span class="marker">alt</span>"&gt;'+this.innerHTML+'&lt;/div&gt;';</pre>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/2wtzXCBzKP8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/114/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/114</feedburner:origLink></item>
		<item>
		<title>WordPressでFlashを表示する</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/emAEyNWNdeg/113</link>
		<comments>http://triplexxx.jp/archives/113#comments</comments>
		<pubDate>Thu, 10 Jul 2008 08:03:26 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[XHTML]]></category>

		<guid isPermaLink="false">http://www.triplexxx.jp/?p=97</guid>
		<description><![CDATA[WordPress で Flash を表示させるときに生じる諸々の問題とその解決方法を説明します。

Flashで生成したソースをコピー＆ペースト
FlashMXで[ファイル｜パブリッシュプレビュー｜HTML]から表示さ [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress で Flash を表示させるときに生じる諸々の問題とその解決方法を説明します。</p>
<p><span id="more-113"></span></p>
<h3>Flashで生成したソースをコピー＆ペースト</h3>
<p>FlashMXで[ファイル｜パブリッシュプレビュー｜HTML]から表示させたページのソースをコピーして、WordPressの<strong>HTMLエディタ</strong>でペーストします。</p>
<p>ソース:</p>
<pre>
&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
 WIDTH="200" HEIGHT="50" id="/image/flash_sample" ALIGN=""&gt;
 &lt;PARAM NAME=movie VALUE="/image/flash_sample.swf"&gt; &lt;PARAM NAME=quality VALUE=high&gt; &lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; &lt;EMBED src="flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN=""
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/EMBED&gt;
&lt;/OBJECT&gt;
</pre>
<p>表示結果（画像）:</p>
<p><a rel="lightbox[wp-flash]" href="http://triplexxx.jp/wp-content/uploads/2008/07/wp_flash1.png"><img class="alignnone size-medium wp-image-98" title="wp_flash1" src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_flash1-300x159.png" alt="Flashで生成したソースをコピー＆ペースト" width="300" height="159" /></a></p>
<p>貼り付けたソースの一部が表示されてしまいます。</p>
<p>表示したページのソース:</p>
<pre>
<span class="marker">&lt;p&gt;</span>&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"<span class="marker">&lt;br /&gt;</span>
 codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"<span class="marker">&lt;br /&gt;</span>
 WIDTH="200" HEIGHT="50" id="flash_sample" ALIGN=""&gt;<span class="marker">&lt;br /&gt;</span>
 &lt;PARAM NAME=movie VALUE="/image/flash_sample.swf"&gt; &lt;PARAM NAME=quality VALUE=high&gt; &lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; &lt;EMBED src="/image/flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN=""<span class="marker">&lt;br /&gt;</span>
 TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/EMBED&gt;<span class="marker">&lt;br /&gt;</span>
&lt;/OBJECT&gt;<span class="marker">&lt;/p&gt;</span>
</pre>
<p>WordPress のエディタによって p タグと br タグが自動で追加されてしまっています。</p>
<h3>Flashで生成したソースを1行にしてコピー＆ペースト</h3>
<p>前記のソースの&lt;OBJECT&gt;～&lt;/OBJECT&gt;に含まれる改行を無くし、1行にして、WordPressの<strong>HTMLエディタ</strong>へペーストします。</p>
<p>ソース:</p>
<pre>
&lt;OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="200" HEIGHT="50" id="/image/flash_sample" ALIGN=""&gt; &lt;PARAM NAME=movie VALUE="/image/flash_sample.swf"&gt; &lt;PARAM NAME=quality VALUE=high&gt; &lt;PARAM NAME=bgcolor VALUE=#FFFFFF&gt; &lt;EMBED src="flash_sample.swf" quality=high bgcolor=#FFFFFF  WIDTH="200" HEIGHT="50" NAME="flash_sample" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/EMBED&gt;&lt;/OBJECT&gt;
</pre>
<p>表示結果（画像）:</p>
<p><a rel="lightbox[wp-flash]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_flash2.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_flash2-300x77.png" alt="Flashで生成したソースを1行にしてコピー＆ペースト" title="wp_flash2" width="300" height="77" class="alignnone size-medium wp-image-99" /></a></p>
<p>正しく表示されています。しかし、見た目はこれで良いのですが、XHTMLをチェックするとエラーになります。</p>
<p>XHTML Validation 結果:</p>
<p><a rel="lightbox[wp-flash]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_flash_xhtml_valid_error.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_flash_xhtml_valid_error-300x189.png" alt="XHTML Validation 結果" title="wp_flash_xhtml_valid_error" width="300" height="189" class="alignnone size-medium wp-image-100" /></a></p>
<p>以下の内容が指摘されます。</p>
<ul>
<li>OBJECTタグに classid，codebase、WIDTH，HEIGHT，id，ALIGN の属性は無い。</li>
<li>PARAMタグに NAME，VALUE の属性は無い。</li>
<li>EMBEDタグに src，quality，bgcolor の属性は無い。</li>
<li>属性値は引用符（&quot;）で括る。</li>
<li>PARAMタグは /&gt; で閉じる。</li>
</ul>
<p>さらに注意すべきなのは以下の点です。</p>
<ul>
<li>タグや属性の表記は小文字にする。</li>
<li>embed タグは使えない（XHTML で定義されていない）。</li>
</ul>
<h3>XHTML Valid になる記述</h3>
<p>以上を踏まえてソースを修正します。</p>
<p>ソース:</p>
<pre>
&lt;object data="/image/flash_sample.swf" type="application/x-shockwave-flash" width="200" height="50"&gt;
&lt;param name="movie" value="/image/flash_sample.swf" /&gt;
&lt;/object&gt;
</pre>
<p>表示結果（Flash):</p>
<p><object data="/image/flash_sample.swf" type="application/x-shockwave-flash" width="200" height="50"><param name="movie" value="/image/flash_sample.swf" /></object></p>
<p>正しく表示されますが、この場合は、Flash Player の自動インストール/アップデートはできません。<a href="http://www.adobe.com/jp/devnet/flashplayer/articles/expressinstall.html">Express Install</a> を利用すれば可能ですが、閲覧中のブラウザにFlash Player 6 r65 以降がインストールされ JavaScript が有効になっている必要があります。</p>
<p>また、Light Box を使用する場合は、Flash が Light Box の前面に表示されてしまうことがあるようです（このサイトでは WordPress <a href="http://www.4mj.it/lightbox-js-v20-wordpress/">LightBox2 プラグイン</a>を使用していますが、現象は再現しません）。これを回避するには、以下の param タグを追加します。</p>
<pre>
&lt;param name="wmode" value="transparent" /&gt;
</pre>
<p>表示結果（Flash）:</p>
<p><object data="/image/flash_sample.swf" type="application/x-shockwave-flash" width="200" height="50"><param name="movie" value="/image/flash_sample.swf" /><param name="wmode" value="transparent" /></object></p>
<p>背景が透過になっているのがわかります。ただし、wmode を transparent にした Flash では、以下のような不具合があるので注意してください。</p>
<ul>
<li>日本語のテキスト入力ができない（ペーストは可能）<br />
（FireFox3，Opera9，Safari3 で確認済）</li>
<li>ボタンがクリックできない<br />
（現象再現できず）</li>
</ul>
<p>入力テスト用（Flash，wmode無し ）:</p>
<p><object data="/image/flash_sample1.swf" type="application/x-shockwave-flash" width="200" height="50"><param name="movie" value="/image/flash_sample1.swf" /></object></p>
<p>入力テスト用（Flash，wmode=transparent ）:</p>
<p><object data="/image/flash_sample1.swf" type="application/x-shockwave-flash" width="200" height="50"><param name="movie" value="/image/flash_sample1.swf" /><param name="wmode" value="transparent" /></object></p>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/emAEyNWNdeg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/113/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/113</feedburner:origLink></item>
		<item>
		<title>WordPressのプラグインを作成する</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/W3ShdoBxazM/112</link>
		<comments>http://triplexxx.jp/archives/112#comments</comments>
		<pubDate>Tue, 08 Jul 2008 06:38:39 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://www.triplexxx.jp/?p=88</guid>
		<description><![CDATA[WordPress のプラグインは php で作成します。WordPress の各種動作は php の関数で定義されており、それらをフック（独自の関数を追加）することでプラグインが機能します。
プラグインによくあるのは「 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress のプラグインは php で作成します。WordPress の各種動作は php の関数で定義されており、それらをフック（独自の関数を追加）することでプラグインが機能します。</p>
<p>プラグインによくあるのは「エントリ本文の特定の文字列（＝プレースホルダ）を置き換え（て様々な処理をす）る」ものです。例えば WordPress の基本機能では、エントリ内に &lt;!&#8211;more&#8211;&gt; と記述すると、エントリ一覧ではその位置までエントリ本文が表示され、続きを読むリンクが追加されます。このような動作をプラグインで実現することができます。以下では、WordPress のプラグインの作成方法を順に説明します。</p>
<p><span id="more-112"></span></p>
<h3>アクションとフィルタ</h3>
<p>プラグインはアクションとフィルタを利用します。それぞれに用意されたフックに、独自の関数を追加することでプラグインとして動作します。現状ではコーディング上、アクションとフィルタは同じものですが、将来のバージョンでは変更があるかもしれないため、目的に応じて使い分けるようにしましょう。</p>
<h4>アクション</h4>
<p>ユーザが行うと思われるほぼすべてのイベントがフック用に用意されています。アクションはデータベースに対する変更や、変更に伴う任意の処理を行う場合に使います。</p>
<p>アクションの追加:</p>
<pre>
add_action('アクション用フック', '独自の関数' {, プライオリティ});
</pre>
<h4>フィルタ</h4>
<p>フィルタは、データベースに対する変更は行いません。データが表示される際に加工を行い、ユーザーに見えるものを変更します。フィルタ用に用意されているフックは、ほとんどがテンプレートタグです。</p>
<p>フィルタの追加:</p>
<pre>
add_filter('フィルタ用フック', '独自の関数' {, プライオリティ});
</pre>
<h4>プライオリティ</h4>
<p>add_action，add_filter の第3引数「プライオリティ」には実行の優先順位を指定します。フックには複数の関数が関連付けられており、それらの実行の順序を制御しないと不都合がある場合に指定します。通常は省略して良いです。</p>
<ul>
<li>デフォルトは10です。</li>
<li>0が最優先で、順にプライオリティが下がっていきます。</li>
<li>一つのフックに同じプライオリティのアクション，フィルタがある場合は、追加された順に実行されます。</li>
</ul>
<h4>アクション，フィルタの削除</h4>
<p>フックに追加されたアクションやフィルタ（の関連付け）を削除するには以下の関数を使います。</p>
<p>アクション，フィルタの削除:</p>
<pre>
remove_action('アクション用フック', 'アクション用関数');
remove_filter('フィルタ用フック', 'フィルタ用関数');
</pre>
<p>自分で追加した以外の関数も削除できます。削除はアクション，フィルタの動作を十分理解したうえで行ってください。</p>
<h3>プラグインの作成</h3>
<p>WordPress には、エントリ本文を出力する the_content というテンプレートタグがあります。例として、これをフックしてテキストファイルをインクルードさせるプラグインを作成します。</p>
<p>php なら readfile()，include() を使えばファイルをインクルードできますが、WordPressではエントリ本文に php を記述して動作させることはできません。<a href="http://bluesome.net/post/2005/08/18/50/" title="Exec-PHP">Exec-PHP</a> のように php をエントリ本文中で動作可能にするプラグインはありますが、それは嫌という場合に応用できるでしょう。</p>
<h4>プラグイン関数（フィルタ、アクション）</h4>
<p>プラグインの処理は、以下の通りです。</p>
<ol>
<li>本文中からプレースホルダを検索します。</li>
<li>プレースホルダで指定されたファイルの内容を取得します。</li>
<li>プレースホルダをファイルの内容に置換します。</li>
</ol>
<pre>
function hoge_include($content)
{
  $pattern = '\[include:([\w\-\/]+\.txt)\]';

  if(! preg_match_all('/'.$pattern.'/', $content, $files))
    return $content;

  for($i=0; $i&lt;count($files[0]); $i++) {
    $text = file_get_contents(TEMPLATEPATH.'/'.$files[1][$i]);
    $content = str_replace($files[0][$i], $text, $content);
  }
  return $content;
}
</pre>
<p>エントリ本文中のプレースホルダ [include:ファイル名.txt] を記述した場所に&quot;ファイル名.txt&quot;の内容をそのまま出力します。php ファイルの場合は php の処理を実行する必要があるので、簡単のため今回はテキストファイルのみをインクルード対象とします。</p>
<pre>
$pattern = '\[include:([\w\-\/]+\.txt)\]';
</pre>
<p>
プレースホルダ[include:ファイル名.txt]の簡易的な正規表現です。
</p>
<pre>
if(! preg_match_all('/'.$pattern.'/', $content, $files))
</pre>
<p>
preg_match_all は、$content 中の $pattern に一致する部分をすべて $files に格納します。preg_match では初めの1件しか検索しないので注意してください。$files は2次元の配列です。</p>
<p>$files[$j][$i] とした場合:</p>
<ul>
<li>$j … 正規表現内のどの部分に相当するかを指定します。
<ul>
<li>$files[0][$i] … 正規表現全体＝プレースホルダ。<br />
例: [readfile:hoge.txt]</li>
<li>$files[1][$i] … 正規表現内の1つめのカッコ()に相当する部分＝ファイル名。<br />
例: hoge.txt</li>
</ul>
</li>
<li>$i … 何件目の検索文字列かを指定します。</li>
</ul>
<pre>
for($i=0; $i&lt;count($files[0]); $i++) {
</pre>
<p>count($files[0]) は正規表現全体に相当する部分の数、つまり検索件数です。</p>
<pre>
$text = file_get_contents(TEMPLATEPATH.'/'.$files[1][$i]);
</pre>
<p>$files[1][$i] は正規表現内のファイル名に相当する部分です。TEMPLATEPATH 以下のパスから成るテキストファイルの内容を file_get_contents で $text に取得します。</p>
<pre>
$content = str_replace($files[0][$i], $text, $content);
</pre>
<p>$content 内の $files[0][$i] に相当するプレースホルダを $text に置換します。</p>
<h4>プラグインファイルの作成</h4>
<ol>
<li>作成したプラグインをWordPressに認識させるために、ファイルの先頭に以下のようなコメント形式でプラグインの情報を記述します。
<pre>
/*
Plugin Name: プラグイン名
Plugin URI: プラグインの配布URL
Description: プラグインの説明
Author: プラグインの作者名
Author URI: プラグイン作者のURL
Version: バージョン
*/
</pre>
</li>
<li>作成したプラグイン関数を、フックするテンプレートタグに関連付けます。
<pre>
add_filter('the_content', 'hoge_include');
</pre>
<p>これだけで the_content に hoge_include が追加されます。特に問題がないため、第3引数の優先度は省略しています。
</li>
</ol>
<h3>プラグインの登録</h3>
<ol>
<li>
プラグインファイルを http://～/wp-content/plugins 以下にアップロードします。<br />
例: プラグイン名: hoge_include，プラグインファイル名: hoge_include.php
</li>
<li>
http://～/wp-admin の[管理画面｜プラグイン]を開くと、hoge_include が自動で検出され、一覧に表示されています。hoge_include の&quot;使用する&quot;をクリックします。<br />
<a rel="lightbox[wp-plugin]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_plugin.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_plugin-150x150.png" alt="テーマの選択" title="wp_plugin" width="150" height="150" class="alignnone size-thumbnail wp-image-89" /></a>
</li>
</ol>
<h3>プラグインの利用</h3>
<ol>
<li>例として http://～/wp-content/themes/テーマ　のフォルダ内に&quot;hoge.txt&quot;をアップロードします。<br />
例: &quot;hoge.txt&quot;</p>
<pre>
&lt;h3&gt;これはインクルードされたファイルです&lt;/h3&gt;
</pre>
</li>
<li>エントリ本文内に [include:hoge.txt] と記述します。<br />
<a rel="lightbox[wp-plugin]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_plugin_include_edit.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_plugin_include_edit-150x150.png" alt="テーマの選択" title="wp_plugin_include_edit" width="150" height="150" class="alignnone size-thumbnail wp-image-91" /></a>
</li>
<li>エントリを表示すると、&quot;hoge.txt&quot;の内容がインクルードされているのを確認できます。<br />
<a rel="lightbox[wp-plugin]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_plugin_include_preview.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_plugin_include_preview-150x150.png" alt="テーマの選択" title="wp_plugin_include_preview" width="150" height="150" class="alignnone size-thumbnail wp-image-90" /></a>
</li>
</ol>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/W3ShdoBxazM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/112/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/112</feedburner:origLink></item>
		<item>
		<title>WordPressのテーマとテンプレート</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/8RP8Ku4OC4o/111</link>
		<comments>http://triplexxx.jp/archives/111#comments</comments>
		<pubDate>Fri, 04 Jul 2008 06:32:25 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[テンプレート]]></category>

		<category><![CDATA[テーマ]]></category>

		<guid isPermaLink="false">http://www.triplexxx.jp/?p=85</guid>
		<description><![CDATA[WordPressはテーマを使ってサイトのレイアウト，デザインを簡単に変更できます。一般的にはこの機能はスキンとも呼ばれます。テーマはWordPress Theme Viewerで公開されているものを利用できますし、自分 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPressはテーマを使ってサイトのレイアウト，デザインを簡単に変更できます。一般的にはこの機能はスキンとも呼ばれます。テーマは<a href="http://themes.wordpress.net/">WordPress Theme Viewer</a>で公開されているものを利用できますし、自分で作成することもできます。テンプレートファイルと呼ばれる PHP ファイルに テンプレートタグ を用いて、簡単かつ自由度の高いデザインを作成することができます。以下では、テーマの変更、カスタマイズについて説明します。</p>
<p><span id="more-111"></span></p>
<h3>テーマの変更方法</h3>
<ol>
<li>お好みのテーマをダウンロードします。<br />
テーマは<a href="http://themes.wordpress.net/">WordPress Theme Viewer</a>の他にも、「WordPress　テーマ」で検索するとたくさん出てきます。
</li>
<li>圧縮されているテーマを解凍します。</li>
<li>/wp-content/themes/ のサブディレクトリとして解凍したテーマをアップロードします。</li>
<li>WordPressの管理画面から［デザイン｜テーマ］を開きます。<br />
<a rel="lightbox[wp-theme]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_themeselect.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_themeselect-150x150.png" alt="テーマの選択" title="wp_themeselect" width="150" height="150" class="alignnone size-thumbnail wp-image-86" /></a>
</li>
<li>テーマ一覧からお好みのテーマを選択します。</li>
</ol>
<p>これだけでテーマを変更できます。</p>
<h3>テーマのカスタマイズ</h3>
<p>使用中のテーマをカスタマイズするには、管理画面のテーマエディタを使用するか、テーマを構成するファイル（*.php）をテキストエディタ（UTF-8を使用できるもの）で編集してアップロードします。カスタマイズする前に元のテーマをバックアップしておくと良いでしょう。</p>
<dl>
<dt>管理画面［デザイン｜テーマエディタ］</dt>
<dd>
<a rel="lightbox[wp-theme]"  href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_themeeditor.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_themeeditor-150x150.png" alt="テーマエディタ" title="wp_themeeditor" width="150" height="150" class="alignnone size-thumbnail wp-image-87" /></a>
</dd>
<p>テーマはスタイルシートと、テンプレートファイルと呼ばれる php のファイルで構成されています。</p>
<h4>スタイルシート</h4>
<ul>
<li>style.css<br />
テーマに必須のファイルです。ファイルの初めに、以下のようなコメント形式でテーマの情報を記述します。
</li>
</ul>
<pre>
/*
Theme Name: テーマ名
Theme URI: テーマを提供しているサイトのURI
Description: テーマの説明
Author: 作者の名前
Author URI: 作者のURI
Version: バージョン番号（オプション）
Template: 親テーマ（オプション）

その他、利用許諾など自由に記述できます。

*/
</pre>
<p>Template は、あるテーマの画像やCSSのみを変更したい場合に、そのテーマの名前を指定します。これを記述するとテンプレートファイルは親テーマのものが使われます。
</p>
<h4>テンプレートファイル</h4>
<p>WordPressは、閲覧者からの要求（クエリ）によって、表示すべき内容に応じたテンプレートファイルを使用します。テンプレートファイルが無ければWordPressのデフォルトの表示が適用されます。</p>
<p>テンプレートファイルには、WordPressで自動的に使用される「単一のエントリ（投稿，ページ）やエントリの一覧を表示するもの」と「それらの内部で明示的に記述して共通に使用されるもの」があります。必要なものだけをカスタマイズすれば良いです。よく使うものを以下に列挙します。</p>
<dl>
<dt>1エントリのみを表示するテンプレートファイル:</dt>
<dd>
<ul>
<li>404.php<br />
存在しないURLへのアクセスがあったときの表示です。
</li>
<li>single.php<br />
単一の投稿を表示します。
</li>
<li>page.php<br />
単一のページを表示します。
</li>
</ul>
</dd>
</dl>
<dl>
<dt>分類されたエントリ一覧を表示するテンプレートファイル:</dt>
<dd>
<ul>
<li>index.php<br />
最新エントリから順に一覧表示します。デフォルトでトップページとして表示されます。最低限、このファイルとstyle.cssがあればテーマとして成り立ちます。
</li>
<li>home.php<br />
index.php とは別にトップページとして表示する場合に作成します。
</li>
<li>category.php<br />
カテゴリで分類したエントリを一覧表示します。
</li>
<li>archive.php<br />
年月などで分類したエントリを一覧表示します。</p>
<li>search.php<br />
検索の結果を一覧表示します。
</li>
</ul>
</dd>
</dl>
<dl>
<dt>テンプレートファイル内部で共通に使用されるもの:</dt>
<dd>
「テンプレートタグ」を記述して、php ファイルの内容を組み込みます。</p>
<ul>
<li>comments.php<br />
エントリのコメントすべてを表示します。<br />
テンプレートタグ: comments_template()
</li>
<li>header.php<br />
共通のフッタを表示します。&lt;head&gt;～&lt;/head&gt; の記述も含みます。<br />
テンプレートタグ: get_header()
</li>
<li>footer.php<br />
共通のフッタを表示します。<br />
テンプレートタグ: get_footer()
</li>
<li>sidebar.php<br />
サイドバーを表示します。<br />
テンプレートタグ: get_sidebar()
</li>
</ul>
</dd>
</dl>
<dl>
<dt>関数ファイル:</dt>
<dd>
<ul>
<li>functions.php<br />
テンプレートファイルから呼び出す関数群を定義します。
</li>
</ul>
</dd>
</dl>
<h4>独自のテンプレートファイル</h4>
<p>WordPressで用意されているものの他に、独自にテンプレートファイルを追加することができます。</p>
<ul>
<li>ページテンプレート<br />
ページのレイアウトをいくつかに分けたい場合に作成します。ページテンプレートがあると、ページの新規作成時にどのページテンプレートを適用するかが選択できます。</p>
<p>
任意のファイル名（*.php）を作成し、ファイルの先頭から以下のコメントを記述すれば、WordPressはページテンプレートとして認識します。</br></p>
<pre>
/*
Template Name: テンプレート名
*/
</pre>
</li>
<li>共通の記述をテンプレートにする<br />
phpのファイルインクルードを使います。例えば、どのテンプレートファイルでも使用する検索フォームがある場合、その部分を php ファイルとして作成し、必要な箇所でそのファイルをインクルードします。</p>
<p>例: 検索フォーム searchform.php</p>
<pre>
&lt;form method="get" id="searchform" action="&lt;?php bloginfo('url'); ?&gt;/"&gt;
&lt;input type="text" value="&lt;?php the_search_query(); ?&gt;" name="s" id="s" /&gt;
&lt;input type="submit" id="searchsubmit" value="検索" /&gt;
&lt;/form&gt;
</pre>
<p>テンプレートファイルでの使用方法</p>
<pre>
&lt;?php include (TEMPLATEPATH . '/searchform.php'); ?&gt;
</pre>
<p>TEMPLATEPATH には現在使用中のテーマへのパスが定義されています。この記述のある箇所に searchform.php の内容が組み込まれます。</p>
</li>
</ul>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/8RP8Ku4OC4o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/111/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/111</feedburner:origLink></item>
		<item>
		<title>WordPress2.5.1のインストール</title>
		<link>http://feedproxy.google.com/~r/Triplexxx/~3/xlAOpSlF1w8/110</link>
		<comments>http://triplexxx.jp/archives/110#comments</comments>
		<pubDate>Thu, 03 Jul 2008 03:41:28 +0000</pubDate>
		<dc:creator>triplexxx</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[インストール]]></category>

		<guid isPermaLink="false">http://www.triplexxx.jp/?p=76</guid>
		<description><![CDATA[WordPressはブログに止まらず、その柔軟な拡張性からCMSとしても利用できるオープンソースのプラットフォームです。商用を含めすべて無料であり、導入も簡単なためシェアを拡げています。また、テーマやプラグインが豊富で、 [...]]]></description>
			<content:encoded><![CDATA[<p>WordPressはブログに止まらず、その柔軟な拡張性からCMSとしても利用できるオープンソースのプラットフォームです。商用を含めすべて<strong>無料</strong>であり、導入も簡単なためシェアを拡げています。また、テーマやプラグインが豊富で、カスタマイズも手軽にできます。PHPやjavascriptの知識があればかなり複雑なことができますし、プログラミングに明るくない場合にも、オリジナリティ溢れるサイトを作成できます。<br />
以下では、WordPress のインストール方法を順に説明します。</p>
<p><span id="more-110"></span></p>
<h3>インストールの前に</h3>
<p>WordPressはデータベースにMySQL、スクリプトにPHPを使用しています。またパーマリンクを実現するため、Apacheのmod_rewriteモジュールが必要です。レンタルサーバーの場合は、それらが利用可能かをまず確認してください。使えない場合は引越しをおすすめします。Apache、MySQL、PHPすべて無料ですので、ローカルでテスト環境を構築してみるのもいいでしょう。WordPress 日本語版の推奨する動作環境は以下の通りです。</p>
<p><strong>動作環境:</strong></p>
<p>PHP: 4.3以上</p>
<p>MySQL server: 4.1以上</p>
<h3>日本語版WordPressをダウンロードします</h3>
<ol>
<li>WordPress 日本語ローカルサイトからWordPressのzipファイルを<a href="http://ja.wordpress.org/">ダウンロード</a>します。2008年7月3日現在、最新バージョンは2.5.1です。<br />
<a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_download1.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_download-150x150.png" alt="WordPressのダウンロード" title="wp_download" width="150" height="150" class="alignnone size-thumbnail wp-image-78" /></a>
</li>
<li>wordpress-2.5.1-ja.zip を解凍します。解凍された wordpress-2.5.1-ja&yen;wordpress フォルダ以下がWordPressに必要なファイルです。</li>
</ol>
<h3>MySQLでデータベースとユーザを作成します</h3>
<p>
cPanel、phpMyAdmin、MySQL Command Line Client（コマンドラインクライアント）のいずれかでMySQLのデータベースとユーザを作成します。レンタルサーバーなどでデータベースの作成権限がない場合は、サーバー管理者がデータベースを作成しますので、管理者からデータベースの情報を取得してください。
</p>
<p>ここではコマンドラインクライアントを例に説明します。作成するデータベースの情報は次の通りとします。</p>
<pre>
データベース名: wp_hoge_db
ユーザ名　　　: wp_hoge_user
パスワード　　: hogehoge
</pre>
<h4>コマンドラインクライアントを使用する場合</h4>
<ol>
<li>コマンドラインクライアントを実行します。<br />
［スタート｜すべてのプログラム｜MySQL｜MySQL Server 5.0｜MySQL Command Line Client］をクリックします。
</li>
<li>データベースとユーザを作成します。
<ul>
<li>mysql> の箇所でコマンドを入力します。</li>
<li>コマンドの途中で Enter 入力すると、プロンプトが -> になり、継続してコマンドを入力することができます。</li>
<li>コマンドの最後にはセミコロン（；）を忘れずに入力してください。</li>
<li>ユーザ名の後には @localhost のようにホスト名を付けますが、通常は省略可能です。</li>
</ul>
</li>
</ol>
<p>データベースの作成</p>
<pre>
mysql> create database wp_hoge_db;
</pre>
<p>ユーザの作成</p>
<pre>
mysql> grant all privileges on wp_hoge_db.* to
    -> wp_hoge_user identified@localhost by 'hogehoge';
mysql> flush privileges;
</pre>
<p><a rel="lightbox[wpinstall]"  href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_mysql.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_mysql-150x150.png" alt="MySQLでWordPressのデータベースとユーザを作成" title="wp_mysql" width="150" height="150" class="alignnone size-thumbnail wp-image-79" /></a></p>
<p>なお、データベースを削除する場合は、以下のように入力します。</p>
<pre>
mysql> drop database wp_hoge_db;
</pre>
<h3>wp-config.phpを設定します</h3>
<p>wordpress-2.5.1-ja&yen;wordpress フォルダ内の wp-config.php ファイルに記述してあるMySQLデータベースの接続情報を、使用環境に合わせて変更します。</p>
<pre>
// ** MySQL 設定 ** //
define('DB_NAME', 'putyourdbnamehere');
define('DB_USER', 'usernamehere');名
define('DB_PASSWORD', 'yourpasswordhere');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
　（略）
define('SECRET_KEY', 'put your unique phrase here');
　（略）
$table_prefix  = 'wp_';
</pre>
<ol>
<li>wp-config-sample.php ファイルを wp-config.php にリネームします。</li>
<li>wp-config.php を開いて、データベースの情報を書き換えます。<br />
データベースの情報は、サーバー管理者から指定されたもの、または前述のように自分で作成したものを使用します。</p>
<dl>
<dt>DB_NAME</dt>
<dd>MySQLのデータベース名（例: wp_hoge_db）に変更します。</dd>
<dt>DB_USER</dt>
<dd>MySQLのユーザ名（例: wp_hoge_user）に変更します。</dd>
<dt>DB_PASSWORD</dt>
<dd>上記ユーザのパスワード（例: hogehoge）に変更します。</dd>
</dl>
<p>
以下の2つは、MySQLデータベース内で一意の文字列を設定します。
</p>
<dl>
<dt>SECRET_KEY</dt>
<dd>使用するWordPressに固有の任意のフレーズにします。</dd>
<dt>$table_prefix</dt>
<dd>使用するWordPressに固有の任意のプレフィクス（例: wp_hoge_）にします。WordPressが作成・使用するテープル名の初めに付加されます。</dd>
</dl>
<p>
同じサーバーの同じMySQLデータベースでも、この2つの設定値ごとに別のWordPressを使用することができます。つまり複数のWordPressを設置することが可能になります。ローカルのテスト環境であれば wp-config.php だけを複数用意し、それらを切り替えて使うことで実現できます。
</p>
<ul>
<li>例:　ブログhoge1<br />
wp-config-hoge1.php</p>
<pre>
define('SECRET_KEY', 'hoge1 secret key');
$table_prefix  = 'wp_hoge1_';
</pre>
</li>
<li>例:　ブログhoge2<br />
wp-config-hoge2.php</p>
<pre>
define('SECRET_KEY', 'hoge2 secret key');
$table_prefix  = 'wp_hoge2_';
</pre>
</li>
</ul>
<p>
wp-config-hoge1.php を　wp-config.php にリネームすればブログhoge1、wp-config-hoge2.php を wp-config.php にリネームすればブログhoge2がそれぞれ利用可能になります。
</p>
</li>
<li>wp-config.php を保存します。</li>
</ol>
<h3>アップロードします</h3>
<p>
アップロード先は、WordPressのみでサイトを構成するなら、サイトのルートディレクトリにします。もちろん、ルートでなくともサブディレクトリでも良いです。アップロード先がそのままWordPressのURLになります。
</p>
<p>例: サイトURLが  http://www.hogehoge.com/ の場合</p>
<ul>
<li>ルートディレクトリにアップロード<br />
http://www.hogehoge.com/</li>
<li>サブディレクトリ（例: blog）にアップロード<br />
http://www.hogehoge.com/blog/</li>
</ul>
<p>アップロードするのは wordpress-2.5.1-ja&yen;wordpress フォルダ内のファイルおよびフォルダすべてです。wordpress フォルダ自身はアップロードしません。ローカルのApache環境なら、htdocs フォルダ以下にコピー（または移動）します。
</p>
<dl>
<dt>注意</dt>
<dd>FFFTP Ver 1.87a では、全ファイルを一度にアップロードしようとすると、途中で失敗しFFFTPが終了することがあります。その場合は、フォルダ単位などで何回かに分けてアップロードしてください。</dd>
</dl>
<h3>インストールします</h3>
<p>ブラウザで ［アップロードしたディレクトリ］/wp-admin/install.php にアクセスします。</p>
<p>例: サイトURLが  http://www.hogehoge.com/ の場合</p>
<ul>
<li>ルートディレクトリ<br />
http://www.hogehoge.com/wp-admin/install.php</li>
<li>サブディレクトリ（例: blog）<br />
http://www.hogehoge.com/blog/wp-admin/install.php</li>
</ul>
<h4>成功した場合</h4>
<ol>
<li>サイト名とメールアドレスを入力し、［WordPressをインストール］をクリックします。<br />
<a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_install.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_install-150x150.png" alt="WordPressのインストール" title="wp_install" width="150" height="150" class="alignnone size-thumbnail wp-image-80" /></a></p>
<ul>
<li>サイト（ブログ）名は、後から変更できます。</li>
<li>メールアドレスも後から変更できます。admin（管理者）のパスワードが送信されますので、受信可能なメールアドレスを入力してください。</li>
</ul>
</li>
<li>［ログイン］をクリックします。<br />
<a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_success.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_success-150x150.png" alt="WordPressのインストールに成功" title="wp_success" width="150" height="150" class="alignnone size-thumbnail wp-image-81" /></a></p>
<p>
WordPress管理者のユーザ名とパスワードをメモしておいてください。前項で入力したメールアドレスにも同じ情報が送信されています。</li>
</p>
</li>
<li>WordPress管理画面が表示されます。
<p>WordPressが利用可能になりました。</p>
<p><a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_start.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_start-150x150.png" alt="WordPressの利用開始" title="wp_start" width="150" height="150" class="alignnone size-thumbnail wp-image-82" /></a></p>
<p>管理画面では投稿、ページの作成やユーザ、プラグイン、テーマの管理などができます。サイトもこの時点で閲覧可能になっています。今後、管理画面にログインするためのURLが次のようになります。</p>
<p>例: サイトURLが  http://www.hogehoge.com/ の場合</p>
<ul>
<li>サイトの管理画面のURL<br />
http://www.hogehoge.com/wp-admin/</li>
</ul>
<p>管理画面にアクセスするとログイン画面が表示されますので、ユーザ名とパスワードを入力し、［ログイン］をクリックします。使用するテーマにログインのリンクがあります。</p>
<p><a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_login.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_login-150x150.png" alt="WordPressにログイン" title="wp_login" width="150" height="150" class="alignnone size-thumbnail wp-image-83" /></a>
</li>
</ol>
<h4>失敗した場合</h4>
<p><a rel="lightbox[wpinstall]" href='http://triplexxx.jp/wp-content/uploads/2008/07/wp_error.png'><img src="http://www.triplexxx.jp/wp-content/uploads/2008/07/wp_error-150x150.png" alt="MySQLのデータベース接続エラー" title="wp_error" width="150" height="150" class="alignnone size-thumbnail wp-image-84" /></a></p>
<p>wp-config.php の記述に誤りがないかを確認してください。どうしても接続できない場合は、MySQLの権限があるなら、現在のデータベースを削除して、新規にデータベースとユーザの作成からやり直すのが早いです。</p>
<img src="http://feeds.feedburner.com/~r/Triplexxx/~4/xlAOpSlF1w8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://triplexxx.jp/archives/110/feed</wfw:commentRss>
		<feedburner:origLink>http://triplexxx.jp/archives/110</feedburner:origLink></item>
	</channel>
</rss>

