回答編集履歴

3

コードのシンタックスエラー修正

2019/02/02 23:51

投稿

退会済みユーザー
test CHANGED
@@ -86,7 +86,7 @@
86
86
 
87
87
  EOF;
88
88
 
89
-  
89
+
90
90
 
91
91
  return $join;
92
92
 
@@ -102,7 +102,7 @@
102
102
 
103
103
  $where .= " AND tr.term_taxonomy_id =" . $cat;
104
104
 
105
-   
105
+
106
106
 
107
107
  return $where;
108
108
 

2

コードを改良

2019/02/02 23:51

投稿

退会済みユーザー
test CHANGED
@@ -42,8 +42,86 @@
42
42
 
43
43
 
44
44
 
45
- 20190201 追記
45
+ 2019/02/01 追記
46
46
 
47
47
 
48
48
 
49
49
  上記コードを修正。
50
+
51
+
52
+
53
+ ---
54
+
55
+
56
+
57
+ 2019/02/01 追記2
58
+
59
+
60
+
61
+ `getarchives_join`と`getarchives_where`フックの処理を追加し、該当のカテゴリーに所属する投稿がある場合のみ月別アーカイブのリンクが表示されるようにしました。
62
+
63
+ また、カテゴリースラッグではなく、カテゴリーIDでの処理に変更にしました。
64
+
65
+
66
+
67
+ ```PHP
68
+
69
+ add_filter( 'getarchives_join', 'teratail168423_HisaoAndo_1', 10, 2 );
70
+
71
+ add_filter( 'getarchives_where', 'teratail168423_HisaoAndo_2', 10, 2 );
72
+
73
+ add_filter( 'get_archives_link', 'teratail168423_HisaoAndo_3', 10, 6 );
74
+
75
+
76
+
77
+ function teratail168423_HisaoAndo_1( $join, $r ) {
78
+
79
+ global $wpdb;
80
+
81
+
82
+
83
+ $join .= <<< EOF
84
+
85
+ LEFT JOIN $wpdb->term_relationships AS tr ON ( $wpdb->posts.ID = tr.object_id )
86
+
87
+ EOF;
88
+
89
+  
90
+
91
+ return $join;
92
+
93
+ }
94
+
95
+
96
+
97
+ function teratail168423_HisaoAndo_2( $where, $r ) {
98
+
99
+ $cat = get_query_var('cat');
100
+
101
+
102
+
103
+ $where .= " AND tr.term_taxonomy_id =" . $cat;
104
+
105
+   
106
+
107
+ return $where;
108
+
109
+ }
110
+
111
+
112
+
113
+ function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) {
114
+
115
+ $cat = get_query_var('cat');
116
+
117
+
118
+
119
+ $link_html = preg_replace('/href=["\'](.*?)["\']/','href="$1?cat=' . $cat .'"', $link_html);
120
+
121
+
122
+
123
+ return $link_html;
124
+
125
+ }
126
+
127
+ ```

1

質問文の追記を受けて、コードを修正

2019/02/01 08:31

投稿

退会済みユーザー
test CHANGED
@@ -16,7 +16,11 @@
16
16
 
17
17
  function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) {
18
18
 
19
- $category_name = "item";
19
+ //$category_name = "item"; // 20190201 修正
20
+
21
+  $category_name = get_query_var('category_name'); // 20190201 修正
22
+
23
+
20
24
 
21
25
  $link_html = preg_replace('/href=["\'](.*?)["\']/','href="$1?category_name=' . $category_name .'"', $link_html);
22
26
 
@@ -31,3 +35,15 @@
31
35
 
32
36
 
33
37
  ただし、該当するカテゴリーの月別アーカイブが存在しない場合に404エラーになってしまうので、もう少し丁寧にやるなら、`getarchives_join`と`getarchives_where`フックを使用する必要があります。
38
+
39
+
40
+
41
+ ---
42
+
43
+
44
+
45
+ 20190201 追記
46
+
47
+
48
+
49
+ 上記コードを修正。