回答編集履歴

1

自分だったらこうするというコードを書いてみました。

2022/01/03 02:58

投稿

Iya712
Iya712

スコア158

test CHANGED
@@ -61,3 +61,229 @@
61
61
  以上です。
62
62
 
63
63
  参考になれば幸いです。
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+ ##################### 返信に対して #####################
74
+
75
+
76
+
77
+ こちら遅くなってすみません。
78
+
79
+ 自分だったらこうするかな?というのを書いてみました。
80
+
81
+
82
+
83
+ ちょっと上記で言ってることと違う内容になってしまいますが、多分これでイケるのではないかと。
84
+
85
+ 動作確認とか、パラメータの中の値とかしていないので、あくまで参考になれば・・・。
86
+
87
+
88
+
89
+ ```php
90
+
91
+ function add_posts_columns($columns)
92
+
93
+ {
94
+
95
+ // $columns['example'] = '展示会開始日';
96
+
97
+ // return $columns;
98
+
99
+ foreach ($columns as $name => $val) {
100
+
101
+ if ('date' == $name) {
102
+
103
+ //日付の手前に追加する
104
+
105
+ $new_columns['start'] = '展示会開始日';
106
+
107
+ $new_columns['end'] = '終了日';
108
+
109
+ }
110
+
111
+ $new_columns[ $name ] = $val;
112
+
113
+ }
114
+
115
+ return $new_columns;
116
+
117
+ }
118
+
119
+ function custom_posts_column($column_name, $post_id)
120
+
121
+ {
122
+
123
+ if ($column_name == 'start') {
124
+
125
+ $date_start = date_create(get_field('start_day'));
126
+
127
+ $start_day = date_format($date_start, 'Y年m月d日');
128
+
129
+ // $cf_example = get_post_meta( $post_id, 'start_day', true );
130
+
131
+ echo ($start_day) ? $start_day : '-';
132
+
133
+ }
134
+
135
+ if ($column_name == 'end') {
136
+
137
+ $date_end = date_create(get_field('end_day'));
138
+
139
+ $end_day = date_format($date_end, 'Y年m月d日');
140
+
141
+ // $cf_example = get_post_meta( $post_id, 'start_day', true );
142
+
143
+ echo ($end_day) ? $end_day : '-';
144
+
145
+ }
146
+
147
+ }
148
+
149
+ add_filter('manage_event_news_posts_columns', 'add_posts_columns');
150
+
151
+ add_action('manage_event_news_posts_custom_column', 'custom_posts_column', 10, 2);
152
+
153
+
154
+
155
+ //カスタムフィールドで手動ソートを可能にする
156
+
157
+ function posts_sortable_columns($sortable_column)
158
+
159
+ {
160
+
161
+ $sortable_column['start'] = 'start';
162
+
163
+ $sortable_column['end'] = 'end';
164
+
165
+ return $sortable_column;
166
+
167
+ }
168
+
169
+ add_filter('manage_edit-event_news_sortable_columns', 'posts_sortable_columns');
170
+
171
+
172
+
173
+ //カスタムフィールドでソートする際のパラメータ
174
+
175
+ function posts_columns_sort_param($vars)
176
+
177
+ {
178
+
179
+ // if文バラバラに2つだったのを、if-elseif-elseにまとめます。
180
+
181
+ // 最初アクセスした時、$vars['orderby']が存在しない、もしくはstart,end以外の値だと思います。
182
+
183
+ // なので、その時は開始日の降順で設定するようにします。
184
+
185
+ if (isset($vars['orderby']) && 'start' === $vars['orderby']) {
186
+
187
+ $vars = array_merge(
188
+
189
+ $vars,
190
+
191
+ array(
192
+
193
+ 'meta_key' => 'start_day',
194
+
195
+ 'orderby' => 'meta_value', //対象が文字列の場合は「meta_value」を指定
196
+
197
+ )
198
+
199
+ );
200
+
201
+ }elseif (isset($vars['orderby']) && 'end' === $vars['orderby']) {
202
+
203
+ $vars = array_merge(
204
+
205
+ $vars,
206
+
207
+ array(
208
+
209
+ 'meta_key' => 'end_day',
210
+
211
+ 'orderby' => 'meta_value', //対象が文字列の場合は「meta_value」を指定
212
+
213
+ )
214
+
215
+ );
216
+
217
+ } else {
218
+
219
+ // 最初にアクセスした時に動く想定
220
+
221
+ $vars = array_merge(
222
+
223
+ $vars,
224
+
225
+ array(
226
+
227
+ 'meta_key' => 'start_day',
228
+
229
+ 'orderby' => 'DESC', //開始日の降順で固定。
230
+
231
+ )
232
+
233
+ }
234
+
235
+
236
+
237
+
238
+
239
+ return $vars;
240
+
241
+ }
242
+
243
+ add_filter('request', 'posts_columns_sort_param');
244
+
245
+
246
+
247
+ // event情報一覧自動ソート 開始日順
248
+
249
+ function set_post_types_event_admin_order($wp_query)
250
+
251
+ {
252
+
253
+ if (is_admin()) {
254
+
255
+
256
+
257
+ /*
258
+
259
+ posts_columns_sort_param関数を上記のようにすると、この部分の処理はいらなくなるかと思います。
260
+
261
+ コメントアウトしてありますので、この状態で想定通り動くのであれば、このset_post_types_event_admin_order関数ごと削除して大丈夫です。
262
+
263
+ $post_type = $wp_query->query['post_type'];
264
+
265
+ if ($post_type == 'event_news') {
266
+
267
+ $wp_query->set('orderby', 'start_day');
268
+
269
+ $wp_query->set('order', 'DESC');
270
+
271
+ }
272
+
273
+ }
274
+
275
+ */
276
+
277
+
278
+
279
+ }
280
+
281
+
282
+
283
+ add_filter('pre_get_posts', 'set_post_types_event_admin_order');
284
+
285
+ ```
286
+
287
+
288
+
289
+ 以上です。