WordPressでカスタムフィールドの値で並べ替え出来るようにする

WordPressでカスタムフィールドの値で並べ替え出来るようにする



例えば投稿の表示件数をカスタムフィールド「post_view」に保存するように設定しているとします。

今回は、アーカイブページで並べ替えソート用のフォームを設置して、そこに「人気記事順」を追加する方法です。

まずはソート用のフォームはこんなコード。

function sort_post() {
	$option_ary = array(
		'date'          => '新着順',
		'rand'          => 'ランダム',
		'comment_count' => 'コメント件数順',
		'post_view'     => '人気記事順',
	);
	if ( isset ( $_GET['orderby'] ) ) {
		$sort_val = $_GET['orderby'];
	}
	$option = '';
	foreach ( $option_ary as $key => $val ) {
		$selected = '';
		if ( $key === $sort_val ) {
			$selected = ' selected';
		}
		$option .= '<option value="' . add_query_arg( array( 'orderby' => $key ), get_pagenum_link( 1 ) ) . '"' . $selected . '>' . $val . '</option>' . "\n";
	}
	return '<select class="form-control" onchange="location = this.value;">' . "\n" . $option . '</select>' . "\n";
}

add_query_arg()を使ってパラメータ付きのURLを生成して、セレクトフォームで選択したらそのURLにリンクするようにしています。

次に人気記事順を選択した際に、カスタムフィールド「post_view」の値が多い順にソートするにはこんなコード。

function sort_metakey() {
	if ( isset ( $_GET['orderby'] ) ) {
		if ( 'post_view' === $_GET['orderby'] ) {
			set_query_var( 'orderby', 'meta_value_num' );
			set_query_var( 'meta_key', $_GET['orderby'] );
			set_query_var( 'order', 'DESC' );
		}
	}
}
add_filter( 'pre_get_posts', 'sort_metakey' );

これで、

hogehoge.com/?orderby=post_view

にアクセスすると人気記事順に並べ替えられます。

Querying by meta keys in wordpress URL string
参考
Querying by meta keys in wordpress URL string

I feel like I've been all around the web and back again looking for an answer to this and it's really starting to grind my gears. Not sure if this is the correct way to do it, but I want to add a

Querying by meta keys in wordpress URL string Stack Overflow


最近USBケーブルを買ったらケーブルをまとめるマジックテープが従来のケバケバトゲトゲと比べて薄型に進化していることに感銘!

これは入手せねばとamazonで検索。

100本入りが1本10円程度と一番コスパが良かったのでこれを購入。
思いの外幅が広かったけれど、ケーブルをまとめる以外にも、苗を支柱に固定するのにも使えそうだ。

今日はここまで

関連する記事



こちらはいかが?


コメントを残す