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

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

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3674閲覧

カスタムフィールドの値(数値)で並び替えをしたい【WordPress】

kii.32

総合スコア67

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/01/12 16:29

前提・実現したいこと

ワードプレスの投稿を投稿ごとにカスタムフィールド(Advanced Custom Fields)の数値で並び替えをしたいです。
(初期値は新着順に表示がされます。)

WordPressのサイト上で簡単に並び替え&絞り込みする方法

こちらを参考に「価格順」のボタンを作成し、下記コードを書きました。
が、価格順のボタンを押しても、並び替えがされません。

URL自体は
https://example/post/

https://example/post/?meta_key=price&orderby=meta_value_num&order=ASC

に変わるのですが、並び替え反映がされずに困っております。。。

詳しい方いらっしゃいましたら、ご教授いただけますと幸いです。
どうぞ、宜しくお願い致します。

該当のソースコード

php

1<div class="items"> 2 <div class="inner"> 3 <ul class="sort"> 4 //価格順に並び替えるボタン 5 <li><a href="<?php echo add_query_arg( array('meta_key' => 'price', 'orderby' => 'meta_value_num', 'order' => 'ASC'), get_pagenum_link(1) ); ?>">価格順</a></li> 6 </ul> 7 <div class="posts"> 8 <?php 9 /* (ステップ1)データの取得 */ 10 $paged = get_query_var('paged', 1); 11 $query = new WP_Query( 12 array( 13 'paged' => $paged, 14 'posts_per_page' => 15, 15 'post_type' => 'post', 16 'cat' => 6, 17 ) 18 ); 19 ?> 20 <?php 21 /* (ステップ2)データの表示 */ 22 if ( $query->have_posts() ) : ?> 23 24 <?php while ( $query->have_posts() ) : $query->the_post();?> 25 <article class="post"> 26 <a href="<?php the_permalink(); ?>"> 27 <figure class="figure"> 28 <img src="../img/XXX.png" alt=""> 29 </figure> 30 <div class="text"> 31 <h3 class="title"> 32 <?php //記事タイトルの先頭24文字を表示 33 if( mb_strlen( get_the_title( $next->ID ) ) > 24 ): 34 $title= mb_substr( get_the_title( $next->ID ), 0, 24 ) ; echo $title. '...' ; 35 else: 36 echo get_the_title( $next->ID ); 37 endif; 38 ?> 39 </h3> 40 <p class="price"> 41 <?php $myk_field_name = get_field('price');if($myk_field_name){ ?> 42 <?php echo number_format($myk_field_name); ?>43 <?php } ?> 44 </p> 45 </div> 46 </a> 47 </article> 48 <?php endwhile; ?> 49 </div> 50     //ページナビ 51 <?php wp_pagenavi(array('query' => $query)); ?> 52 <?php endif; wp_reset_postdata(); ?> 53 </div> 54</div>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そりゃURLパラメータでメインクエリに並び順の情報を渡してるのに
メインクエリを使わずにループしてたら反映はしないでしょう

php

1 $query = new WP_Query( 2 array( 3 'paged' => $paged, 4 'posts_per_page' => 15, 5 'post_type' => 'post', 6 'cat' => 6, 7 ) 8 );

ここにmeta_key orderby orderの値を反映するようにしないと

値はメインクエリ(global $wp_query)が持ってるはずなので
そこから借用するのが現状からでは手っ取り早いかもしれないですが
サブループのクエリはメインクエリに干渉しないようにしたいところです

add_query_argは['order_by_price'=>'ASC']とかを追加するだけにして
$_GET['order_by_price']がセットされてたら
クエリにmeta_key orderby orderの値を追加とか

投稿2020/01/13 05:42

KazuhiroHatano

総合スコア7802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kii.32

2020/01/14 00:31

回答頂きありがとうございます。 回答を参考にさせて頂き、下記コードで無事実装することができました。 もっとこうした方が良いことがあればご教授いただけますと幸いです。 【並び替えボタン】 <li><a href="<?php echo add_query_arg( array('order_by_price'=>'ASC'), get_pagenum_link(1) ); ?>">価格順</a></li> 【functions.php】 function change_posts_query( $query ) { if( is_category() ) { if( !empty($_GET['order_by_price']) ){ $query->set('meta_key', 'price'); $query->set('orderby', 'meta_value_num'); $query->set('order', 'ASC'); } } } add_action('pre_get_posts', 'change_posts_query');
KazuhiroHatano

2020/01/14 01:10

'order_by_price'=>'DESC'にしたら$query->set('order', 'DESC');になるようにしときたいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問