質問編集履歴
4
タイトルをシンプルに変えました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【wordpress】検索
|
1
|
+
【wordpress】検索キーワードが該当する投稿を優先して並べ替えたい
|
body
CHANGED
File without changes
|
3
functions.phpの小さな修正と追記を行いました。
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
タイトルにミスがあり修正しました。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
【wordpress】検索結果を、特定のカスタムフィールドに検索キーワードが該当する投稿を優先して並べ替えたい
|
1
|
+
【wordpress】検索結果を、特定のカスタム投稿タイプの特定のカスタムフィールドに検索キーワードが該当する投稿を優先して並べ替えたい
|
body
CHANGED
File without changes
|
1
確認してみると少し見づらかったので修正しました。
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;
|