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

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

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

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

2回答

1399閲覧

ワードプレス検索結果一覧でカスタムフィールドの値にて並び順変更

lc_kn

総合スコア16

WordPress

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

PHP

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

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2021/01/14 06:10

検索結果一覧の並び順をカスタムフィールドの値順に変更を考えているのですが
色々調べていても思うようにいかず悩んでいます
お手数ですがご教授のほど、よろしくお願いします。

  • カスタムフィールド:cf06(値は数字です)
  • 最後の5行はプラグインなしでページャーを設置しています。
<?php if(have_posts()) : ?> <?php while(have_posts()):the_post() ?> <a href="<?php the_permalink() ?>"><?php the_title(); ?></a> ID:<?php echo post_custom('cf06'); ?> <?php endwhile; ?> <?php else: ?> <p>該当する記事がございません。</p> <?php endif; ?> <?php if (function_exists("pagination")) { pagination($additional_loop->max_num_pages); } ?>

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

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

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

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

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

CHERRY

2021/01/14 06:55

> 色々調べていても思うようにいかず悩んでいます 調べた内容や試した内容を質問に追記していただけないでしょうか。
lc_kn

2021/01/14 07:17

何もわからずでスイマセン 一応下記の内容で並び順は出来たのですが そうすると、次のページも同じ内容が表示されてしまい 思うようにできませんでした <?php query_posts( array( 'post_type' => 'post', 'meta_key' => 'cf06', //並べ替えたいカスタムフィールドキー 'orderby' => 'meta_value_num', 'order' => 'ASC', ) ); if (have_posts()) : while (have_posts()) : the_post(); ?>
guest

回答2

0

まず、

query_posts(

query_posts は、メインクエリを書き換えるので、非推奨になっていますので、使わないほうが良いです。

pre_get_posts を使いましょう。

そうすると、次のページも同じ内容が表示されてしまい思うようにできませんでした

検索結果一覧の並び順にしたいとのことなので、検索結果一覧の判定は、is_search() で判定します。

まず、参考情報としては...

orderby (文字列 | 配列) - パラメータで指定した項目の値で投稿をソートする。

'meta_value_num' - カスタムフィールドの値を数値として並び替える。(バージョン 2.8 以降で使用可能)。これもまた、'meta_key=keyname'がクエリに存在しなければならないことに注意して下さい。

あたりになります。

以上を まとめるとこんな感じのコードをテーマの functions.php に記載します。

add_action( 'pre_get_posts', 'custom_field_sort_315919' ); function custom_field_sort_315919 ($query) { if ( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_search() ) { $query->set('meta_key', 'カスタムフィールドの項目名'); $query->set('orderby', 'meta_value_num'); $query->set('order', 'DESC'); return $query; } }

投稿2021/01/14 07:21

編集2021/01/14 08:19
CHERRY

総合スコア25218

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

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

lc_kn

2021/01/14 07:57

検索結果一覧の判定は、is_search()  です functions.phpに記載をして検索をかけたところ あるはずの検索結果が0件になってしまいました... 根本的に何かおかしいのでしょうか お手数おかけして申し訳ございません
CHERRY

2021/01/14 08:21 編集

失礼しました。 > if ( $query->is_search() ) { > $query->set('meta_key', 'カスタムフィールドの項目名'); > $query->set('orderby', 'meta_value_num'); > $query->set('order', 'DESC'); > return; > } の部分の return で、 $query が、抜けていますね。 return $query; としたら状況は変わりますか?
lc_kn

2021/01/14 09:26

いろいろありがとうございます。 やはり状況は変わりませんでした。 試しに > $query->set('meta_key', 'カスタムフィールドの項目名'); を削除すると検索結果が表示されました。
guest

0

自己解決

いろいろ調べていまして
原因がわかりました
functions.phpに「カステムフィールドを検索対象にする」コードをいれていたのですが、それを別の内容に書き換えたら実装が可能になりました
お手数おかけしました
ありがとうございました

//カスタムフィールド を検索対象に function custom_search($search, $wp_query) { global $wpdb; if (!$wp_query->is_search) return $search; if (!isset($wp_query->query_vars)) return $search; $search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : ''); if ( count($search_words) > 0 ) { $search = ''; $search .= "AND post_type = 'post'"; foreach ( $search_words as $word ) { if ( !empty($word) ) { $search_word = '%' . esc_sql( $word ) . '%'; $search .= " AND ( {$wpdb->posts}.post_title LIKE '{$search_word}' OR {$wpdb->posts}.post_content LIKE '{$search_word}' OR {$wpdb->posts}.ID IN ( SELECT distinct post_id FROM {$wpdb->postmeta} WHERE meta_value LIKE '{$search_word}' ) ) "; } } } return $search; } add_filter('posts_search','custom_search', 10, 2); //カスタムフィールド の並び順 add_action( 'pre_get_posts', 'custom_field_sort_315919' ); function custom_field_sort_315919 ($query) { if ( is_admin() || ! $query->is_main_query() ){ return; } if ( $query->is_search() ) { $query->set('meta_key', 'カスタムフィールドの項目名'); $query->set('orderby', 'meta_value_num'); $query->set('order', 'DESC'); return $query; } }

投稿2021/01/20 02:01

lc_kn

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問