【WordCamp Tokyoリレーブログ企画】涙無しには読めないスタッフブログ!?

こんにちわぷー!!
WordPress界のキアヌ・リーb…もとい、黄色いおじさんことまがりんです。

本日は、ナイスタイミング北村氏による「【WordCamp Tokyoリレーブログ企画】すすめ!WordCamp TOKYO 2012!」からの無茶ブリを受けて、涙々の感動巨編をお送りしたいと思います。
そう!思うだけなら自由なんです。基本的人権万歳。

思えば、WordCamp Tokyo 2012 の企画が正式にスタートしたのは、今年の7月5日に、渋谷のJELLY JELLY CAFE で行われたキックオフミーティングが最初でした。一応、その前からも中心メンバー数名では企画が進んでいたものの、参加意思のあるメンバーが集い、認識を共にしたのはこのときからでした。

今振り返ってみると、ほぼ二ヶ月前。それから、およそ1ヶ月後の8月2日には、公式サイトがオープンとなり、8月10日には、参加登録が開始されました。また、これらと同時進行で、スポンサー募集、スピーカー公募、ブース出展募集、会場内のレイアウト策定、現地取材など様々なタスクも、昼は本職、夜は WordCamp の準備の掛け持ちをしながら突貫工事でやってきました。

寝る間も惜しんでミーティングを敢行するスタッフたち?

あまりに突貫すぎたためと、今回初となる実施内容も多いため、多方面から「対応遅い」などのお叱りの言葉をいただいたりと言うこともありましたが、現状、ドタバタしつつも、あと一息というところまで来られたということに、1スタッフとして一定の感慨を憶え、開催を楽しみにしている部分があります。

過酷な労働にも耐えうる当日用作業スーツも準備万端

それもこれも、なんだかんだ言いながら個々のメンバーが互いのタスクを尊重し、楽しみつつやっているからこそ実現できているのではないかなあと、個人的には思っています。

そんなスタッフの思いが詰まった WordCamp Tokyo 2012 も、あと1週間ちょっとでの開催となります。
単にセッションを見たり・聞いたりするだけでなく、用意されている個々のものに、スタッフがどのような思いで作成したのか、そんな点にもちょっとだけ、意識を振り向けてくれるとより、楽しめるイベントになるのではないかなあと思います。

スタッフとしても、あともう一踏ん張り!
残されたタスクをモーレツにこなして、来場された方には、少しでも楽しんでもらえたらと思っています。そして、そんなスタッフがちょっとでも面白そうと思われた方は、是非次回の WordCamp をはじめとしたイベントのスタッフとして応募してみてください。ポイントは、タスクが回ってくるのを待つのではなく、自分から○○をやりたいと志願することです。

フェイスブックグループ上で展開される真剣なやりとり
注)他のスレッドはもっとまじめにやってます。本当です。信じt

それでは、会場でお会いできることを楽しみにしています。

あ、まだ参加登録してないそこのあなた!こちらからどうぞ
↓ ↓ ↓ ↓ ↓ ↓ ↓

次回は一転、WordCamp Tokyo 実行委員会の ジークフリード・キルヒアイス こと、物部さんがお送りする知的で高貴な物語をどうぞ。

パーマリンクの %category% の出力条件を変更してみる

パーマリンク設定に %category% が含まれていた場合、カテゴリーのIDが若いものを元にして表示するURLが構成されるのはご存じでしょうか。
まあ、知らなかった方は、そうなっているので、「なるほどですねー。」と一言、頭に刻み込んでおいてください。

ただし、カテゴリーに 拙作 PS Taxonomy ExpanderMy Category Order などを使っていたりすると、この指定した順列に従って欲しいということもあるのではないでしょうか。

そんなときは、CODE 1 で一発解消!!

といきたいところですが、大きな問題点がっ。

両プラグインとも、同一階層内での順列情報のみしか持っていないため、階層が異なったり、異なる親カテゴリーだと自由な設定ができません。
そんな場合は、_usort_terms_by_order 関数内の term_order をスラッグ(slug)や説明(description)に変更すれば、他の要素での並び替えも出来るかと思いますので、自由にカスタマイズしてみてください。

CODE 1

function category_permalink_orderby_order( $permalink, $post, $leavename ) {
	if ( strpos( $permalink, '%ordered_category%' ) !== false ) {
		$cats = get_the_category( $post->ID );
		if ( $cats ) {
			usort($cats, '_usort_terms_by_order');
			$category = $cats[0]->slug;
			if ( $parent = $cats[0]->parent )
				$category = get_category_parents($parent, false, '/', true) . $category;
		}

		if ( empty($category) ) {
			$default_category = get_category( get_option( 'default_category' ) );
			$category = is_wp_error( $default_category ) ? '' : $default_category->slug;
		}
		$permalink = str_replace( '%ordered_category%', $category, $permalink );
	}
	return $permalink;
}
add_filter( 'post_link', 'category_permalink_orderby_order', 10, 3 );


function category_order_permalink( $permalink ) {
	$permalink = str_replace( '%category%', '%ordered_category%', $permalink );
	return $permalink;
}
add_filter( 'pre_post_link', 'category_order_permalink' );


function _usort_terms_by_order( $a, $b ) {
	if ( $a->term_order > $b->term_order )
		return 1;
	elseif ( $a->term_order < $b->term_order )
		return -1;
	else
		return 0;
}

プラグインでバージョン情報を使いたいときは、get_file_data を用いるととってもエコなのよ

こんにちは、こんにちは!ぼく、はm

WordPress のプラグインでプラグイン自体のバージョン情報を利用したいときに便利な方法という、なんともニッチな技法の紹介です。

たまに、プラグイン内でプラグインのバージョンを定義していたりしますが、これだと、うっかりバージョン番号を変更し忘れることが多々発生します。(ぼけっち!)

このようなアルツh・・もとい、うっかりなすびな方は、プラグインファイルに書いているであろうコメントのバージョンを利用しちゃうと便利です。

WordPress では get_file_data という関数を使うと一発で、これらファイル内の記述から該当する記述をパースして配列で取得できる超絶便利なシロモノがあります。

get_file_data はパラメーターを2つ指定する必要があり、最初がファイルのパス、2つ目が取得したデータのキーと指定名を配列で指定します。プラグインのデータを取得する get_plugin_data では、パラメーターとして、下記の配列が使われていますので、計9パラメーターが WordPress 側で認識可能ということになります。(_sitewide は、Networkパラメーターと同義で非推奨)

$default_headers = array(
	'Name' => 'Plugin Name',
	'PluginURI' => 'Plugin URI',
	'Version' => 'Version',
	'Description' => 'Description',
	'Author' => 'Author',
	'AuthorURI' => 'Author URI',
	'TextDomain' => 'Text Domain',
	'DomainPath' => 'Domain Path',
	'Network' => 'Network',
	// Site Wide Only is deprecated in favor of Network.
	'_sitewide' => 'Site Wide Only',
);

これをちょっとひねって、プラグイン内で自プラグインのバージョンを用いる場合は、下記のように記述できるかと思います。

$data = get_file_data( __FILE__, array( 'version' => 'Version' ) );
$version = $data['version'];

なお、取得できるデータはファイルの冒頭よりファイルサイズで 8kバイト の範囲内になりますので、データ部分はファイルの最初に書いておきましょうね。

WordPress の投稿スラッグを自動的に生成する

WordPress のパーマリンク構造に %postname% が含まれていて、うっかりパーマリンクの設定をし忘れると、ブラウザのアドレス欄に日本語が表示されたり、 %e3%81%8a%e5%95%8f%e3%81%84%e5%90%88%e3%82%8f%e3%81%9b みたいな感じで、イミフな文字列がならんでしまったりしてあまり気持ちの良いものではありませんよね。
よく分かっているならまだしも、運営を任せていたりすると、そんなURLが大量に発生してげんなり・・・そんな状況もよくあり得ます。

先日フォーラムの 記事のスラッグ名を自動的に記事IDにしたい に回答した内容を一歩進めて、なるべく汎用的に使えるコードを書いてみました。

“WordPress の投稿スラッグを自動的に生成する” の続きを読む

WordPressでカスタムフィールドも検索対象にする

WordPressでカスタムフィールドも検索対象に含めてみました。

といっても、全てのカスタムフィールドを検索対象にするといろいろとアレなので、特定の名前を持つもののみに限定しなければなりません。
そこは、

pm.meta_key IN ( 'meta_key1', 'meta_key2', 'meta_key3' )

の meta_keyn の部分を調整してもらえれば、大丈夫だと思います。

function search_custom_field_query( $search, $wp_query ) {
	if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) {
		$q = $wp_query->query_vars;
		$n = !empty($q['exact']) ? '' : '%';

		$add_search = '';
		foreach( (array) $q['search_terms'] as $term ) {
			$term = esc_sql( like_escape( $term ) );
			$add_search = " OR ( pm.meta_key IN ( 'meta_key1', 'meta_key2', 'meta_key3' ) AND pm.meta_value LIKE '{$n}{$term}{$n}')";
		}
		$search = str_replace( ')))', ')' . $add_search . '))', $search );
	}
	return $search;
}
add_filter( 'posts_search', 'search_custom_field_query', 10, 2 );


function search_custom_field_join( $join, $wp_query ) {
	global $wpdb;
	if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) {
		$join .= " INNER JOIN {$wpdb->postmeta} AS pm ON pm.post_id = {$wpdb->posts}.ID";
	}
	return $join;
}
add_filter( 'posts_join', 'search_custom_field_join', 10, 2 );

/*
 * 
 */
function search_custom_field_groupby( $groupby, $wp_query ) {
	global $wpdb;
	if ( $wp_query->is_main_query() && $wp_query->is_search() && ! is_admin() ) {
		$groupby = "{$wpdb->posts}.ID";
	}
	return $groupby;
}
add_filter( 'posts_groupby', 'search_custom_field_groupby', 10, 2 );

え?Search Everything 使えって?