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

回答編集履歴

2

追記

2018/05/15 07:32

投稿

KazuhiroHatano
KazuhiroHatano

スコア7834

answer CHANGED
@@ -37,4 +37,16 @@
37
37
 
38
38
  フィルタフックの引数に$postも渡されてるので
39
39
  $post->post_typeでフィルタの対象を
40
- 絞り込んだりする様にしといた方がいいでしょうね
40
+ 絞り込んだりする様にしといた方がいいでしょうね
41
+
42
+ ```php
43
+ add_filter('get_prev_post_join',function($join, $in_same_term, $excluded_terms, $taxonomy, $post){
44
+ if($post->post_type==''){
45
+ global $wpdb;
46
+ $join.=" INNER JOIN {$wpdb->postmeta} as m ON (p.ID = m.post_id AND m.meta_key='post_order')";
47
+ }
48
+ return join;
49
+ });
50
+ ```
51
+
52
+ whereのとこは苦労すると思います

1

追記

2018/05/15 07:32

投稿

KazuhiroHatano
KazuhiroHatano

スコア7834

answer CHANGED
@@ -1,9 +1,40 @@
1
- ```get_[prev|next]_post_join``````get_[prev|next]_post_sort``````get_[prev|next]_post_where```
1
+ **get_[prev|next]_post_join****get_[prev|next]_post_sort****get_[prev|next]_post_where**
2
- のフィルタフックで```get_adjacent_post```のSQLを変更するって感じですかね
2
+ のフィルタフックでget_adjacent_postのSQLを変更するって感じですかね
3
3
 
4
4
  joinは追加、whereとsortは置き換えですかね
5
5
 
6
6
  これは検索して調べたり人に聞いたりするよりまず
7
- 直接```wp-includes/link-template.php```のソースをみた方が早いですね、多分
7
+ 直接**wp-includes/link-template.php**のソースをみた方が早いですね、多分
8
8
 
9
- WP_meta_queryクラスは使う必要なさそうかも
9
+ WP_meta_queryクラスは使う必要なさそうかも
10
+
11
+ ---
12
+ とりあえずpostsテーブルはエイリアスpを割り当てられるっぽいよ
13
+
14
+ joinはこんな感じかなぁ
15
+ ```sql
16
+ INNER JOIN {$wpdb->postmeta} as m ON (p.ID = m.post_id AND m.meta_key='post_order')
17
+ ```
18
+ whereは、ウゥン、めんどくさい
19
+
20
+ 要するにpost_statusやtermによる検索はキープしつつ
21
+ post_dateによる検索は消して
22
+ 現在の投稿のpost_orderの値と大小比較する
23
+ meta_valueに置き換えたいんだけど
24
+ これが一番ネックになりそう
25
+ SQL文を検索置換するかなんかしないとね
26
+ 置き換えたいSQLはこんな感じかな
27
+ ```sql
28
+ WHERE m.meta_value >= {$post_order}
29
+ ```
30
+
31
+ orderは
32
+ ```sql
33
+ ORDER BY m.meta_value ASC LIMIT 1
34
+ ```
35
+ でいいかな
36
+
37
+
38
+ フィルタフックの引数に$postも渡されてるので
39
+ $post->post_typeでフィルタの対象を
40
+ 絞り込んだりする様にしといた方がいいでしょうね