[WP] テーマのカスタマイズ

[067] 管理画面カスタマイズの1

WordPress の管理画面をカスタマイズする方法には色々あり、全てをまとめてご紹介することは難しいので順番にご紹介しようと思います。まず最初は全体の概要と 「5.jQuery でHTMLを置換する」 をご紹介します。

管理画面のカスタマイズ方法にはざっと、以下のような方法があるのではないでしょうか。
1.プラグインを使う
2.アクションフック、フィルターフックを使う
3.meta_box の追加や削除を使う
4.CSS で要素を変更したり非表示にする
5.jQuery でHTMLを置換する
6.リダイレクトで代替ページにとばす
7.WordPress コアファイルを変更する

1.プラグインを使う

まずはプラグインがあるかを確認します。こちらは詳しい方が大勢おられると思いますので詳細は割愛しますが、例えばカスタムフィールドテンプレートというプラグインひとつとっても様々な機能があり、色々なことに対応できますよね。

2.アクションフック、フィルターフックを使う

まず、カスタマイズしようと思ったときにアクションフックやフィルターフックが用意されているか調べます。そして、あったら迷わず使います(本当に助かりますよね)。ただし、管理画面のアクションフックやフィルターフックを探すのは骨が折れる場合も多いので根気強く頑張りましょう。

続きを読む

[066] Twenty Ten を1カラムや3カラムにする

WordPress3.0 のデフォルトテーマ「Twenty Ten」 を1カラムや3カラムにしたいと思ったことはありませんか?今回はCSSの設定だけでTwenty Tenを1カラムや3カラムにする方法をご紹介します。

CSSで1カラムにする方法

1カラムにするには container や content の枠を広げて下さい( margin-right を 240px を 0px にします)。子サイトの style.css に以下を追加して下さい。そして、ウィジェットエリア1と2に登録したウィジェットを削除して下さい。
#container { margin-right: 0px; }
#content   { mamrgin-right: 0px; }



CSSで3カラムにする方法

Twenty Ten のサイドバーは #primary と #secondary のふたつが用意されています。これを横並びにすれば3カラムにできますね。

まず、2カラム分のスペースを空けるために container や content の枠を狭めます。そして #primary と #secondary の回り込みをできるようにします(clear:none にします)。
続きを読む

[062] カスタムヘッダーにタイトルを表示する

WordPress3.0のデフォルトテーマ「Twenty Ten」ではカスタムヘッダーを使用することができる。さらに Twenty Ten の functions.php にはヘッダー画像にテキストを表示することができる設定があったので試してみた。

ヘッダーのテキスト設定

まず、子テーマの functions.pphp で、define( ‘NO_HEADER_TEXT’, false ); と設定して下さい。


すると管理画面左メニューの外観>ヘッダーで「ヘッダーのテキスト」を設定できるようになります。


続きを読む

[web] ブラウザ互換チェック Adobe BrowserLab

WordPress のデフォルトテーマ Twenty Ten をベースにしている当サイトを InternetExplorer で閲覧した場合の互換チェックを、 Twenty Ten はIE6でどう見えるでおこないました。

先日 CPI 主催の Adobe セミナーで上條さんから Adobe BrowserLab でもブラウザの互換チェックができるとご紹介いただいたので、実際に試してみました。
まず、実際に試した結果(下図)を紹介します。

やはり IE6 ではタイトルが2行になったり、サイドバーが崩れていたりしていますね。画像での表示のため動作を確認することはできませんが、様々なブラウザで確認できますし、またルーラーを表示することもできるなど、なかなか便利ですね。

以下、Adobe BrowserLab の使い方をご紹介します。
続きを読む

[060] 添付画像を出力する色々

WordPress では get_children で添付画像を取得して関数「wp_get_attachment_image」や「wp_get_attachment_image_src」を使って表示することができることを、 添付画像をサムネイルで表示するでご紹介しました。今回は画像を登録した際に記入できる「説明」って使ってないなと思って調べてみました。

メディアに登録した画像の説明に「説明」、キャプションに「キャプション」と入力して保存してみます。そして、var_dump を使って、get_childrenで取得したオブジェクトをのぞいてみると、 post_content には「説明」、post_excerpt には「キャプション」と入っています。

なるほど、これなら get_children で取得した画像(複数が配列に格納されている)から1つオブジェクトを $image とすると、以下のように指定して使用することができますね。
(1) 説明: $image->post_content
(2) キャプション: $image->post_excerpt
続きを読む

[059] 子サイトにユーザを新規登録する方法

WordPressをマルチサイト化(ネットワーク化)して、子サイトでユーザアカウントを登録しようして、新規ユーザアカウントが親サイトに登録されてしまったことありませんか?今回、この問題を解決すべく、以下の2点を調査してみましたのでご紹介します。
(1) ユーザアカウント 新規登録の仕組み
(2) 子サイトにユーザアカウントを登録する方法

ユーザアカウント 新規登録の仕組み

まず、前提条件としてマルチサイト化して、特別管理者>設定から 「ユーザアカウントの新規登録を許可する」もしくは、「新規サイトおよびユーザーアカウントの登録をどちらも許可する。」 いずれかの設定になっている必要があります。


ユーザアカウント登録が許可された状態で、子サイトで新規登録をしようとする(http://(サブドメイン).(親ドメイン)/wp-signup.php にアクセスする)と、親サイトの wp-sign.up にとばされてしまいます。しかたなく、そこで新規ユーザ登録すると予想通り親サイトにユーザ登録されてしまいます・・・。そこで、親サイトでの新規ユーザ登録の仕組みを調べてみました。

実際にユーザアカウント新規登録の流れをコードから追跡してみると、以下のようになっていました。
ユーザアカウント 新規登録の流れ
1.ユーザアカウントの新規登録 ・・・ wp-sign.up
  ・ ユーザ名やメールアドレスの登録
  ・ データベースの signup テーブルに反映
  ・ 有効化するURLを登録されたメールに送信
2.ユーザアカウントの有効化 ・・・ wp-activate.php
  ・ ユーザアカウントを作成
  ・ ユーザアカウントをブログに登録
  ・ ユーザ新規登録をお知らせするメールを送付


続きを読む

[057] ウィジェットでコンテンツ管理してみませんか?

WordPress3.0 のデフォルトテーマ「Twenty Ten」の特徴のひとつは「豊富なウィジェットエリア」(合計6つ)ですね。実際にテーマ「Twenty Ten」のコードを見た方には、「get_sidebar( ‘footer’ ):」ってサイドバーかフッターかどっちだよと、つっこみを入れた人が多数おられたかと思いますw
また、カスタム投稿タイプを使うようになって、アーカイブページがなく一覧を表示するのにお困りの方も多くおられたと思います。

そこで、サイドバーやフッターだけでなくコンテンツエリアにウィジェットエリアを広げて、投稿(カスタム投稿タイプなど)を表示変更できるようにして、ウィジェットでコンテンツ管理できるようにしてみたいと思います。

ウィジェットエリアを定義する

ウィジェットエリアを登録する以下のコードを functions.php に加えて下さい。すると、外観>ウィジェットで、コンテンツウィジェットエリアHOMEが表示されます。
続きを読む

[055] カスタム投稿タイプやメディアにカテゴリーを登録する

WordBench川崎が11月14日にあり、WordCamp Nagoya 2010 について報告いただきました。参加できなかった私にはとてもありがたい会でした。

当日は WordCamp での発表や写真を中心に広い範囲に話題がおよびましたが、その中で @jim0912 さんの報告にて register_taxonomy がカスタムタクソノミー(カスタム分類)以外にも使えるのではないかとのお話があったので試してみました。

WordCamp Nagoya 2010



WordCampNagoya2010 発表「WordPress 3.0とは」

Copyright (C)2010Prime Strategy co.,ltd.

大曲さんの報告でカスタムタクソノミー(カスタム分類)を登録する関数「register_taxonomy」について以下のアドバイスをいただき、調べてみました。
register_taxonomy($taxonomy, $object_type, $args);
(1) パラメーター「 $taxonomy」 はカスタムタクソノミーだけでなくカテゴリーも使えるかも
(2) パラメーター「$object_type」 は投稿タイプ(post_type)を指定することができる

結論から言うと、register_taxonomy や register_taxonomy_for_object_type で登録できました。



  1. カスタム投稿タイプにカテゴリーをつける
    以下のコードのように、まずカスタム投稿タイプ「food」を登録して、register_taxonomy_for_object_type( $taxonomy, $object_type ) を使ってカスタム投稿タイプにカテゴリーをつけることができました。

    なお、以下のコードは、子テーマのfunctions.php に記載して下さい。以降はadd_action と register_my_taxonomy は記載を省略しています。
続きを読む

[web] FireBugの使い方 FireFox Add-ons

ブラウザ FireFox に多くのアドオン(拡張機能)が存在しています。今回はそのなかで、私にとってWEB開発になくてはならなくなった FireBug というアドオンを紹介します。、

Firebug は、Web ページを閲覧中にクリック一つで使える豊富な開発ツールを Firefox に統合します。あなたはあらゆる Web ページの CSS、HTML、及び JavaScript をリアルタイムに編集、デバッグ、またはモニタすることが出来ます。(出典)Add-ons for Firefox 拡張機能 Firebug



まずは、あなたのブラウザを FireFox にしていただき、上記の(出典)からリンクして、「今すぐダウンロード」を押下すとインストールできます。※インストールしたアドオンはメニューのツール>アドオン>拡張機能 から設定や削除ができます。

インストールすると、BUGという名の通り虫マークがステータスバーに表示され、押すとFIreBug が起動します。※メニューのツール>FireBug>FIreBugを開く からも起動できます。



FireBug のタブで HTML を選択するとサイトのHTML構造が表示されます。さらに詳しく知りたい要素を選択すると以下が表示されます。
(1) サイトの該当箇所に色が付きます(青:選択要素、紫:Padding範囲、黄:Margin範囲)
(2) 右にスタイルシート、累積、レイアウト、DOM情報が表示されます



続きを読む

[Seminar] WordPress3.0の新機能とCMSへの応用

KDDI Web Communications 殿主催の CMS 8日間連続無料セミナーがあり、11月12日(金)のWordPress に参加させていただきました。会場もとても綺麗で、来場者もざっと50人以上の方が来られていて 大盛況でした。

講師は株式会社キャンプフォー 高山一登殿でした。
高山殿は WordPress のイベント「WordCamp Yokohama 2010」での発表がとても面白かったので、無料セミナーがあると聞いて参加しました。



参加者のうちWordPressのテンプレートタグが分かるのはおよそ半分という構成で、当日のセミナー全体の流れは以下のようになっていました。

  1. KDDI Web Communications 殿から告知、書籍の抽選
  2. WordPress の紹介、WordPress の簡単インストール
  3. サンプル1 フォトブログのテーマをライブコーディング
  4. サンプル2 KDDI Cafe のテーマをライブコーディング
  5. マルチサイト化の実演
  6. プラグインの紹介、質疑応答



以下は講師の高山殿のセミナーでの発表内容を、メモから書き起こしました。(もし、間違いや理解違い等がありましたらご容赦下さい。お教えいただければ訂正します。)
今回のセミナーは私にとっては、実際にコーディングする流れを見れたので、様々な機能や関数の使い方とあわせて非常にためになる内容でした。入門~初級者にとっても、実際に何をコーディングしているかを理解することは難しいものの、その結果として具体的なメリットや便利さを感じられたのではないかと思います。

今回のセミナーについては @crema さんのブログに詳細なメモが掲載されていますので、あわせてご参照になるとCMSソフトウェア WordPress3.0 の理解の助けになるかと思います。
とってだし自分用メモ「WordPress3.0の新機能とCMSへの応用」セミナー

続きを読む

[053] Twenty Ten ヘッダー画像サイズ変更

WordPress3.0 のデフォルトテーマ Twenty Ten はヘッダー画像を 外観>ヘッダー から好きな画像に変更することができます。
ヘッダー画像のサイズは 940px×198px で固定となっていて、ヘッダー画像をアップする際にトリミングをおこなってくれる機能もあって、とても便利です。

Twenty Tenのレイアウトを変える で全体の横幅を大きくしたので、今回は画像のサイズを変更してみました。

まず、変更方法を調べてみると Twenty Ten のテーマフォルダの functions.php の関数 twentyten_setup() にそれらしい箇所がありました。

	// The height and width of your custom header. You can hook into the theme's own filters to change these values.
	// Add a filter to twentyten_header_image_width and twentyten_header_image_height to change these values.
	define( 'HEADER_IMAGE_WIDTH', apply_filters( 'twentyten_header_image_width', 940 ) );
	define( 'HEADER_IMAGE_HEIGHT', apply_filters( 'twentyten_header_image_height', 198 ) );



ヘッダー画像のサイズを定義する HEADER_IMAGE_WIDTH、HEADER_IMAGE_HEIGHT の定義では apply_filter が使用されているので、フィルターフックで変更が可能だと分かります。これなら簡単にヘッダー画像のサイズを変更できそうです。

続きを読む

[052] 添付画像をサムネイルで表示する

例えばカスタム投稿タイプの添付画像をサムネイルの大きさで表示しようと思うと、結構手間がかかりますよね。

WordPress3.0 のデフォルトテーマ Twenty Ten では loop.php に、カテゴリー「Gallery」だった場合に画像を表示するコードがあります。そこで、これを参考にしてカスタム投稿タイプの添付画像をサムネイルの大きさで表示するプログラムを作成してみました(今回はひとつ目の画像のみ)。

さて、全体の流れは以下の通りとなります。

  1. カスタム投稿タイプの取得: WP_Query ⇒ the_post
  2. 添付の取得: get_children
  3. 画像の取得: wp_get_attachment_image_src



続きを読む

[051] Twenty Ten はIE6でどう見える

今さらですが、WordPress3.0 のデフォルトテーマ Twenty Ten をベースに運営している当サイトが IE6 でどう見えているのか気になったので試してみた。

使用したのは IETester です。ダウンロードはこちら (IETester

Windows 7 に特に問題なくインストールすることができました。

さて実際に見てみると・・・、以下の3点に気付きましたが、全体としては思ったほど崩れていないものだなと安心しました。まぁ、Twenty Ten テーマのおかげなのですが。
続きを読む

[049] Twenty Ten のページをカスタマイズ

Twenty Ten のページをカスタマイズする場合の代表的な手順を紹介する。

  1. 子テーマを用意して、作成した子テーマを有効化する
  2. テンプレート階層をみて、カスタマイズするファイルを選択する(以下は具体例)

    • ホームをカスタマイズしたい場合は home.php を作成する
    • スラッグ名が「information」のカテゴリーページなら category-information.php を作成する
    • スラッグ名が「contactus」のページなら page-contactus.php を作成する
    • ページを作成するならページテンプレートを活用することもできる
  3. 条件分岐によって制御することもできる(is_home()、is_single() など)
  4. ページを作成したら、カスタマイズを開始する(以下はカスタマイズ例)

    • レイアウトを変更する
    • ヘッダーを変更する
    • 投稿を取得してコンテンツを表示する


続きを読む

[048] ログイン|ログアウトの表示

WordPress のヘッダーにログインしているときは「ログイン|新規登録する」、していないときは「こんにちわ○○さん|ログアウトする」と表示したいが上手くいかないそうなので、作成してみた。

実現に必要になるのは以下の3つの要素になる。

  1. ログイン判定
  2. ログイン|新規登録|ログアウトの各々のURL取得
  3. ログインしているユーザ名の取得


1.ログイン判定は「is_user_logged_in()」でできる
2.各々のURLを取得する関数は、SOURCEFORGE で調べた
  • ログイン: wp_login_url
  • ログアウト: wp_logout_url
  • 新規登録: wp_login_url . ‘?action=register’

    ※新規登録は wp_register があるが、これはURLだけでなくリンク自体を作成するのでNGたが、実際に動作させてみるとURLは wp_login_url + ?action=register となっているので採用してみた。
WordPressの関数はWordPress日本語のドキュメント「SourceForge」に掲載されているが、「関数リファレンス」と「テンプレートタグ」に分かれているので両方見る必要がある。また、日本語に翻訳されていないものは英語版で調べる必要あり。
http://wpdocs.sourceforge.jp/テンプレートタグ

3.ログインしているユーザ名の取得
現在のユーザ(オブジェクト)は wp_get_current_user() で取得できる。英語版の SourceForge の例文を見るとユーザIDはuser_login 、表示名は display_name だと分かる。
http://codex.wordpress.org/Function_Reference/wp_get_current_user

さて、これらをふまえると以下のようなコーディングで実現できると考えられる。
※4行目が-> とHTML文字コードもまま表示されているので、->と変更して使用下さい。
if(is_user_logged_in()){
	$current_user = wp_get_current_user();
	$logout_url = wp_logout_url();
	echo 'こんにちは'.$current_user-&gt;display_name.'さん|<a href="'.$logout_url.'">ログアウトする</a>';
} else {
	$login_url = wp_login_url();
	echo '<a href="'.$login_url.'">ログイン</a>|<a href="'.$login_url.'?action=register">新規登録する</a>';
}

[046] wp_enqueue_script の仕組み

wp_head でヘッダに追記する で記載した wp_enqueue_script は、外部ファイルをに登録する際にその名称やバージョンをグローバル変数 $wp_scripts で管理して出力してくれるらしいという件について調べてみた。(参考)WordPress フォーラム


wp_enqueue_script は以下のように引数として渡されたスクリプトを、グローバル変数 $wp_scripts に登録している。

$wp_scripts は wp-includes/class.wp-scripts.php で定義されているクラスで WP_Dependencies を継承している(WP_Dependencies は wp-includes/class.wp-dependencies.php )。
関数 wp_enqueue_script で実行される $wp_scripts->enqueue( $handle ) はWP_Dependenciesクラスで定義されている。

wp-includes/functions.wp-scripts.php

/**
 * Enqueues script.
 *
 * Registers the script if src provided (does NOT overwrite) and enqueues.
 *
 * @since r16
 * @see wp_register_script() For parameter information.
 */
function wp_enqueue_script( $handle, $src = false, $deps = array(), $ver = false, $in_footer = false ) {
	global $wp_scripts;
	if ( !is_a($wp_scripts, 'WP_Scripts') )
		$wp_scripts = new WP_Scripts();

	if ( $src ) {
		$_handle = explode('?', $handle);
		$wp_scripts->add( $_handle, $src, $deps, $ver );
		if ( $in_footer )
			$wp_scripts->add_data( $_handle, 'group', 1 );
	}
	$wp_scripts->enqueue( $handle );
}



wp-includes/class.wp-dependencies.php
	function enqueue( $handles ) {
		foreach ( (array) $handles as $handle ) {
			$handle = explode('?', $handle);
			if ( !in_array($handle, $this->queue) && isset($this->registered]) ) {
				$this->queue = $handle;
				if ( isset($handle) )
					$this->args] = $handle;
			}
		}
	}



さて、実際に $wp_scripts を出力してみた出力結果は以下の通り。

続きを読む

[044] One Column no sidebar

WordPress3.0 のデフォルトテーマ Twenty Ten でページを作成する場合にはテンプレートを利用して One Column no sidebar のレイアウトのページを作成できるので紹介します。

テンプレートを選択するのは、ページ新規作成か編集画面の(デフォルトの場合)右下にあるページ属性というボックスで設定します。


テンプレートは最初「デフォルトテンプレート」が選択されていると思います。これを One Column, no sidebar に変更して、ページを保存すると1カラムでサイドバー表示のないページになります。さて、実際に試してみました。すると、左右に大きな余白ができてしまいました。



これは1カラムになって全体の幅が大きくなったにも関わらず、 コンテンツの幅が下記のように 640px に設定されていたからでした。

.one-column #content {
	margin: 0 auto;
	width: 640px;
}



そこで、上記CSS設定を私はレイアウトを少し大きくしたので 980px に(通常であれば940px に)変更したものを子テーマの style.css に追記しました。すると、横幅全体を使って大きく表示してくれるようになりました。

[042] wp_head でヘッダに追記する

CSSを変更する時はこれまで style.css に追記したり、要素に style=”" と直接追記していたが、javascript や JQuery のスクリプトをこれから追記していこうと思い、その方法を調べてみた。

Twenty Ten ではの最後に wp_enqueue_script( ‘comment-reply’) と wp_head() を呼び出している。

	/* We add some JavaScript to pages with the comment form
	 * to support sites with threaded comments (when in use).
	 */
	if ( is_singular() && get_option( 'thread_comments' ) )
		wp_enqueue_script( 'comment-reply' );

	/* Always have wp_head() just before the closing 
	 * tag of your theme, or you will break many plugins, which
	 * generally use this hook to add elements to  such
	 * as styles, scripts, and meta tags.
	 */
	wp_head();



wp_head() はというと do_action(‘wp_head’) だけをおこなっているので、に追記する内容を出力する関数をadd_action(’wp_head’,'呼び出す関数名’) で定義すればよさそう。ただし、追記順に制約がある場合は add_action に優先順位を設定する必要がある。

wp-includes/general-template.php

続きを読む

[041] Twenty Tenのレイアウトを変える

WordPress3.0 のデフォルトテーマ Twenty Ten のサイトレイアウト、具体的には全体とサイドバーの横幅を広げたいなと思い調べてみた。

まず、サイトの要素の大きさには以下の4つがある

  1. 要素の大きさ width
  2. 境界線 border
  3. 余白(境界線内) padding
  4. 余白(境界線外) margin
右図は下記サンプルCSS設定のレイアウトである
div#sapmle{
	width: 100px; border: solid 10px #999;
	margin: 40px 30px 20px 10px;
	padding: 30px 20px 10px 0px;
}




今回はdiv#wrapper の横幅を 940pxから980px に、サイドバーの横幅を 220pxから270px に広げた(すでに変更済み)。ポイントはdiv#container の-240pxというmarginだった。

Twenty Ten の各要素の大きさ(width、padding、margin)は下図のようになっていた。要素名はCSS にならっていて、div#wrapper なら div id=”wrapper” の要素を指す。
また、Twenty Tenの子テーマに追加したCSS設定も合わせて掲載する。

続きを読む

[028] Twenty Ten の自動抜粋を変更する

Twenty Ten ではカテゴリーアーカイブの場合に抜粋表示をおこないます。今回はそれが全文表示されるように変更しました。

Twenty Ten の loop.php では104、132行目の2箇所で is_archive() || is_search() で判定してアーカイブか検索結果なら the_excerpt() で抜粋表示をおこない、右記以外の場合は the_content() で more 指定した場合のみ、抜粋表示するようにしています。

  if ( is_archive() || is_search() ) : // Display excerpts for archives and search. ?>


      the_excerpt();



そこで、まず Twenty Ten を template とする子テーマに loop.php をコピーして、条件分岐の「 is_archive() || 」をはずしてみたところ、else にある the_content によってカテゴリーアーカイブで全文表示されるようになりました(more があればもちろん抜粋表示されます)。

        if ( is_search() ) : // Display excerpts for archives and search. ?>


        the_content( __( 'Continue reading <span class="meta-nav">&rarr;</span>', 'twentyten' ) );