質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.05%

wordpressのカスタムフィールドの値で降順・昇順のソート(並べかけ)をかけたい

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 670

score 14

新米エンジニアです(PHP歴2ヶ月ほど)。
タイトルの件、10hほど時間使っているのですが、解決できておりません。
未熟な私ですが、お教えいただけますと幸いです。

やりたいこと

カスタムフィールド「price」を値順でソートをかけたい

困っていること

安い順、高い順でそれぞれソートしても、結果は変わらない(ソートされない)

// 並び替え条件パラメータを追加
function add_meta_query_vars( $public_query_vars ) {
    $public_query_vars[] = 'sort';
    return $public_query_vars;
}
add_filter( 'query_vars', 'add_meta_query_vars' );

// 並び替え処理を設定
function change_posts_per_page( $query ){
//  if ( is_admin() || ! $query -> is_main_query() ){ 
//      return;
//    }
  if($query->is_search()){
    if( !empty($_GET['sort']) ){
       if( $_GET['sort'] == 'low' ){
           $query->set( 'meta_key', 'price');
           $query->set( 'orderby', 'meta_value_num');
            $query->set( 'order', 'DESC');
           echo "test1";
            var_dump($query);
       }else{
            $query->set( 'meta_key', 'price');
            $query->set( 'orderby', 'meta_value_num');
            $query->set( 'order', 'ASC');
            echo "test2";
            var_dump($query);
      }
      }
  }
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
<?php
query_posts( array(
    'tax_query' => $taxquerysp,
    's' => $s,
    'meta_key' => 'price', //カスタムフィールドのキーを指定
    'orderby' => 'meta_value_num',
    'order' => 'ASC'
    )
);
?>
※※※※※※※※※※※※※※※※※※※※※※省略※※※※※※※※※※※※※※※※※※※※※※
    <div class="result-change">
    <span class="condition-title">並べ替え</span>
    <span class="condition">
    <?php $sort_val = get_query_var( 'sort', '' ); ?>
    <select id="sort" name="sort" >
        <option value="<?php echo add_query_arg('sort', false); ?>" <?php if($sort_val == ''): echo 'selected'; endif; ?>>指定なし</option>
        <option value="<?php echo add_query_arg('sort','low'); ?>" <?php if($sort_val == 'low'): echo 'selected'; endif; ?>>料金が安い順</option>
        <option value="<?php echo add_query_arg('sort','high'); ?>" <?php if($sort_val == 'high'): echo 'selected'; endif; ?>>料金が高い順</option>
    </select>
    </span>
    </div>
    <div class="post-loop-wrap">
    <?php

      if ( have_posts() ) :

        while ( have_posts() ) : the_post();

    ?>

ソート後の結果をVar_dumpすると

["query"]=>
array(2) {
["s"]=>
string(0) ""
["sort"]=>
string(3) "low"
}
["query_vars"]=>
array(56) {
※省略※
["meta_key"]=>
string(5) "price"
※省略※
["post_type"]=>
string(4) "post"
["orderby"]=>
string(14) "meta_value_num"
["order"]=>
string(4) "DESC"

と入れたい関数にはデータが入っているのですが、反映されないため、どう改善すればよいか分からない状態です。
どうぞよろしくおねがいします。
ちなみに、上記の内容でなくても、価格でソートがかけられればOKです

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.05%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る