カスタム投稿タイプのアーカイブ表示で、カスタム分類での絞り込み検索を行う

Webサイト上で絞り込み検索ができるようにしたい」というのは比較的よくある要望だと思います。そんな場合どうしてますか?カスタム投稿タイプだったら、アーカイブ表示の際に、少々工夫すれば絞り込みを行うことができてしまうのです。

WordPress では、パーマリンクの設定如何に関わらず、?cat=5 などといったパラメーターを追加すると絞り込みが可能となっています。(なので、カテゴリー内でのテキスト検索といったことも簡単に可能なんですよ?)
このため、フォームの method 属性を get にしておけば、比較的簡単に絞り込みができてしまうのですが、この場合、アドレス欄にパラメーターがずらずら並んでしまってクライアント受けが良くないのと、チェックボックスによる複数項目での検索に対応しづらいのが難点です。

これを post で投げて、アドレスはそのままで絞り込み検索、さらにはページ送りにも対応させてしまいましょう。

“カスタム投稿タイプのアーカイブ表示で、カスタム分類での絞り込み検索を行う” の続きを読む

パーマリンクの %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;
}

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 使えって?

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

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

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

WordPressで追加した画像サイズを本文に挿入できるようにする

WordPressで生成される画像サイズを追加する方法については、画像アップロードで作成される画像の種類を追加するにてご紹介しましたが、これだけだと本文に画像を追加する際のサイズの選択肢に表示されません。

今回は、さらに一歩進めてサイズを追加するとともに、挿入するサイズとして選択できるようにしてみました。

“WordPressで追加した画像サイズを本文に挿入できるようにする” の続きを読む