プラグインでバージョン情報を使いたいときは、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 使えって?

Meta Manager 1.0.5アップデート

Meta Manager を 1.0.5にアップデートしました。非公開のカスタム投稿タイプでもメタ情報のボックスが表示されてしまっていたため、非公開のカスタム投稿タイプの場合、表示しないように条件の変更を行いました。

併せて、メタ情報のボックスを非表示にできるようにフィルターフックを追加しています。CODE 1 では、book というカスタム投稿タイプであれば、表示しないようになります。投稿タイプ以外にも記事の情報を参照出来る $post もパラメーターとしてとれますので、記事の属性などによっての切り替えも可能です。

CODE 1

function meta_manager_meta_box_control_filter( $display, $post_type, $post ) {
	if ( $post_type == 'book' ) {
		$display = false;
	}
	return $display;
}
add_filter( 'meta_manager_meta_box_display', 'meta_manager_meta_box_control_filter', 10, 3 );

Custom Post Types Relationships (CPTR)を使って、手動で関連記事の設定と表示を実装する

Custom Post Types Relationships (CPTR) というプラグインをご存じでしょうか。このプラグインは、投稿と投稿や投稿と固定ページ、固定ページとカスタム投稿タイプなど、記事と記事の関連付けが行えるプラグインです。今回は、この Custom Post Types Relationships (CPTR) を使って、手動での関連記事設定と表示する方法をご紹介したいと思います。

“Custom Post Types Relationships (CPTR)を使って、手動で関連記事の設定と表示を実装する” の続きを読む