回答編集履歴

2

追記

2018/05/15 07:32

投稿

KazuhiroHatano
KazuhiroHatano

スコア7804

test CHANGED
@@ -77,3 +77,27 @@
77
77
  $post->post_typeでフィルタの対象を
78
78
 
79
79
  絞り込んだりする様にしといた方がいいでしょうね
80
+
81
+
82
+
83
+ ```php
84
+
85
+ add_filter('get_prev_post_join',function($join, $in_same_term, $excluded_terms, $taxonomy, $post){
86
+
87
+ if($post->post_type==''){
88
+
89
+ global $wpdb;
90
+
91
+ $join.=" INNER JOIN {$wpdb->postmeta} as m ON (p.ID = m.post_id AND m.meta_key='post_order')";
92
+
93
+ }
94
+
95
+ return join;
96
+
97
+ });
98
+
99
+ ```
100
+
101
+
102
+
103
+ whereのとこは苦労すると思います

1

追記

2018/05/15 07:32

投稿

KazuhiroHatano
KazuhiroHatano

スコア7804

test CHANGED
@@ -1,6 +1,6 @@
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
2
 
3
- のフィルタフックで```get_adjacent_post```のSQLを変更するって感じですかね
3
+ のフィルタフックでget_adjacent_postのSQLを変更するって感じですかね
4
4
 
5
5
 
6
6
 
@@ -10,8 +10,70 @@
10
10
 
11
11
  これは検索して調べたり人に聞いたりするよりまず
12
12
 
13
- 直接```wp-includes/link-template.php```のソースをみた方が早いですね、多分
13
+ 直接**wp-includes/link-template.php**のソースをみた方が早いですね、多分
14
14
 
15
15
 
16
16
 
17
17
  WP_meta_queryクラスは使う必要なさそうかも
18
+
19
+
20
+
21
+ ---
22
+
23
+ とりあえずpostsテーブルはエイリアスpを割り当てられるっぽいよ
24
+
25
+
26
+
27
+ joinはこんな感じかなぁ
28
+
29
+ ```sql
30
+
31
+ INNER JOIN {$wpdb->postmeta} as m ON (p.ID = m.post_id AND m.meta_key='post_order')
32
+
33
+ ```
34
+
35
+ whereは、ウゥン、めんどくさい
36
+
37
+
38
+
39
+ 要するにpost_statusやtermによる検索はキープしつつ
40
+
41
+ post_dateによる検索は消して
42
+
43
+ 現在の投稿のpost_orderの値と大小比較する
44
+
45
+ meta_valueに置き換えたいんだけど
46
+
47
+ これが一番ネックになりそう
48
+
49
+ SQL文を検索置換するかなんかしないとね
50
+
51
+ 置き換えたいSQLはこんな感じかな
52
+
53
+ ```sql
54
+
55
+ WHERE m.meta_value >= {$post_order}
56
+
57
+ ```
58
+
59
+
60
+
61
+ orderは
62
+
63
+ ```sql
64
+
65
+ ORDER BY m.meta_value ASC LIMIT 1
66
+
67
+ ```
68
+
69
+ でいいかな
70
+
71
+
72
+
73
+
74
+
75
+ フィルタフックの引数に$postも渡されてるので
76
+
77
+ $post->post_typeでフィルタの対象を
78
+
79
+ 絞り込んだりする様にしといた方がいいでしょうね