記事保存時にカスタムフィールドを追加するためのメモ
welcartにて商品を価格順に並び替える為にはカスタムフィールドを用いる必要があるそうです。毎回手動で登録するのは効率が悪いので、商品保存時にカスタムフィールドを追加する処理をfunctions.phpに記述しました。 (welcartの場合はかACFが使えないので、wordpressにはじめから用意されているカスタムフィールドを用いました。)
function save_the_price( $post_id ) { if ( !empty($_POST) && isset($_POST['itemsku']) ) { $the_key = array_shift(array_keys($_POST['itemsku'])); //$_POSTから売価を取得 $the_price = $_POST['itemsku'][$the_key]['price']; //"_price"という名のカスタムフィールドに価格を格納 if ( ! add_post_meta( $post_id, '_price', $the_price, true ) ) { //"_price"という名のカスタムフィールドが既に存在している場合は更新 update_post_meta ( $post_id, '_price', $the_price ); } } } add_action( 'save_post', 'save_the_price' );
並び替え用ボタンをテンプレートに追加
カスタムフィールドのキーはデフォルトでは使用できないので、カスタムクエリを追加する処理をfunctions.phpに記述。
function add_meta_query_vars( $public_query_vars ) { $public_query_vars[] = 'meta_key'; //カスタムフィールドのキー $public_query_vars[] = 'meta_value'; //カスタムフィールドの値(文字列) return $public_query_vars; } add_filter( 'query_vars', 'add_meta_query_vars' );
並び替えボタンを配置したいファイル(category.phpやarchive.phpなど)に以下のリンクを追加します。add_query_arg関数を用いてクエリを追加したURLを取得します。
<a href="<?php echo add_query_arg( array('meta_key' => '_price', 'orderby' => 'meta_value_num', 'order' => 'ASC'), get_pagenum_link(1) ); ?>">価格が安い順</a> <a href="<?php echo add_query_arg( array('meta_key' => '_price', 'orderby' => 'meta_value_num', 'order' => 'DESC'), get_pagenum_link(1) ); ?>">価格が高い順</a>
こちらを参考にさせていただきました:WordPressの投稿一覧をボタンクリックで並び替える方法













