teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

タイトルをシンプルに変えました。

2020/11/05 21:42

投稿

kaoru-drosera
kaoru-drosera

スコア23

title CHANGED
@@ -1,1 +1,1 @@
1
- 【wordpress】検索結果を、特定のカスタム投稿タイプの特定のカスタムフィールドに検索キーワードが該当する投稿を優先して並べ替えたい
1
+ 【wordpress】検索キーワードが該当する投稿を優先して並べ替えたい
body CHANGED
File without changes

3

functions.phpの小さな修正と追記を行いました。

2020/11/05 21:42

投稿

kaoru-drosera
kaoru-drosera

スコア23

title CHANGED
File without changes
body CHANGED
@@ -101,15 +101,6 @@
101
101
  WHERE {$wpdb->postmeta}.meta_key IN ('recipe_name','material', 'how_to_make') AND meta_value LIKE '{$search_word}'
102
102
  )
103
103
  ) ";
104
- if ( $wp_query->get( 'custom_orderby' ) ) {
105
- $orderby = " {$wpdb->posts}.post_content LIKE '{$search_word}'
106
- OR {$wpdb->posts}.ID IN (
107
- SELECT distinct post_id
108
- FROM {$wpdb->postmeta}
109
- WHERE {$wpdb->postmeta}.meta_key IN 'recipe_name' AND meta_value LIKE '{$search_word}' = '' DESC, {$wpdb->posts}.post_date DESC ";
110
- }
111
- return $orderby;
112
-
113
104
  }
114
105
  }
115
106
  }
@@ -119,6 +110,8 @@
119
110
  // https://kazunori-miura.tumblr.com/post/189502558056/wordpress%E3%81%AE%E6%A4%9C%E7%B4%A2%E5%AF%BE%E8%B1%A1%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E5%80%A4%E3%81%AB%E9%99%90%E5%AE%9A%E3%81%99%E3%82%8B
120
111
  ```
121
112
 
113
+ このコードだけ見るなら、「$search .= 」からのSQLコードで「特定のカスタム投稿タイプ内のカスタムフィールド」を取得しているようです。
114
+
122
115
  ### 試したこと
123
116
 
124
117
  調べてみると、「『本文(the_content)』に値がある投稿を優先して並べ替える」方法を見つけました。

2

タイトルにミスがあり修正しました。

2020/11/04 23:40

投稿

kaoru-drosera
kaoru-drosera

スコア23

title CHANGED
@@ -1,1 +1,1 @@
1
- 【wordpress】検索結果を、特定のカスタムフィールドに検索キーワードが該当する投稿を優先して並べ替えたい
1
+ 【wordpress】検索結果を、特定のカスタム投稿タイプの特定のカスタムフィールドに検索キーワードが該当する投稿を優先して並べ替えたい
body CHANGED
File without changes

1

確認してみると少し見づらかったので修正しました。

2020/11/04 11:06

投稿

kaoru-drosera
kaoru-drosera

スコア23

title CHANGED
File without changes
body CHANGED
@@ -16,14 +16,14 @@
16
16
 
17
17
  レシピを投稿すると、
18
18
  カスタムフィールド『article』に、それぞれ
19
- 『レシピ名(recipe_name)』
19
+ **『レシピ名(recipe_name)』**
20
- 『材料(material)』
20
+ **『材料(material)』**
21
- 『作り方(how_to_make)』
21
+ **『作り方(how_to_make)』**
22
- 『コツ・注意点(notice_and_teck)』
22
+ **『コツ・注意点(notice_and_teck)』**
23
- 『きっかけ(trigger)』
23
+ **『きっかけ(trigger)』**
24
24
  のカスタムフィールドに値が入る仕組みです。
25
25
 
26
- 検索を行うと、『レシピ名』『材料』『作り方』からキーワードが存在する投稿をloop式で表示します。ちなみに投稿順です。
26
+ 検索を行うと、**『レシピ名』『材料』『作り方』**からキーワードが存在する投稿をloop式で表示します。ちなみに投稿順です。
27
27
  しかし、『レシピ名』にキーワードがない投稿が上にきてしまうため少し見づらくなっています。
28
28
 
29
29
  ### 実現したいこと
@@ -46,7 +46,7 @@
46
46
  ### コード
47
47
 
48
48
  検索結果画面のコードです。
49
- search.php
49
+ **search.php**
50
50
  ```php
51
51
  <div class="container">
52
52
  <p>「<?php the_search_query(); ?>」の検索結果</p>
@@ -77,7 +77,7 @@
77
77
  ```
78
78
  functions.phpの以下コードを使い、「検索対象をカスタム投稿タイプ『article』のカスタムフィールド『recipe_name』『material』『how_to_make』に限定する」処理をしています。
79
79
 
80
- functions.php
80
+ **functions.php**
81
81
  ```php
82
82
  /* search.phpで検索する範囲を「特定のカスタムフィールド」に限定する */
83
83
  function custom_search($search, $wp_query) {
@@ -124,13 +124,13 @@
124
124
  調べてみると、「『本文(the_content)』に値がある投稿を優先して並べ替える」方法を見つけました。
125
125
  このコードがヒントになると考えたのですが、応用ができないので挫折している最中です。
126
126
 
127
- search.php?
127
+ **search.php?**
128
128
  ```php
129
129
  $the_query = new WP_Query( array(
130
130
  'custom_orderby' => true, // <-追加
131
131
  ) );
132
132
  ```
133
- functions.php
133
+ **functions.php**
134
134
  ```php
135
135
  function my_posts_orderby( $orderby, $query ) {
136
136
  global $wpdb;