BLOG

 

wordpressで複数のカスタムフィールドを対象にソートする場合

04 5月 2014, Posted by Teppei Tokikawa in WordPress, プログラミング

newのカスタムフィールド

release_dateのカスタムフィールド
の両方でソートする場合の例です。

 

テーマ内のfunction.phpに追記します。

※パスの例

wordpress/wp-content/themes/twentythirteen/functions.php

 

1、sqlにjoinを追加する関数を作成

function custom_posts_join( $join, $query ) {
	global $wpdb;
	$join .= " INNER JOIN $wpdb->postmeta AS m1 ON m1.post_id = $wpdb->posts.ID AND m1.meta_key = 'new'";
	$join .= " INNER JOIN $wpdb->postmeta AS m2 ON m2.post_id = $wpdb->posts.ID AND m2.meta_key = 'release_date'";
	return $join;
}

 

2、sqlにorderbyを追加する関数を作成

function custom_posts_orderby( $orderby, $query ) {
	$orderby = 'm1.meta_value DESC, m2.meta_value DESC';
	return $orderby;
}

 

3、query_postsの前に1,2で作成した関数を実行

add_filter( 'posts_join', 'custom_posts_join', 10, 2 );
add_filter( 'posts_orderby','custom_posts_orderby', 10, 2 );

query_posts($args);

 

4、ループで出力が完了したら、3を削除してあげます。

while (have_posts()) : the_post();
 :
 :
endwhile;

remove_filter( 'posts_join', 'custom_posts_join', 10, 2 );
remove_filter( 'posts_orderby','custom_posts_orderby', 10, 2 );

ITと英語を学べる留学”グローバルITアカデミーはこんな事も勉強できる、グローバル人材育成機関です。

Post a comment