質問編集履歴

2

言葉つついか

2021/09/13 06:55

投稿

takumi1113
takumi1113

スコア7

test CHANGED
@@ -1 +1 @@
1
- wordpress タクソノミー絞り込み検索
1
+ wordpress 記事に付随するタームから search.phpへの絞り込み検索
test CHANGED
File without changes

1

コードの編集

2021/09/13 06:54

投稿

takumi1113
takumi1113

スコア7

test CHANGED
File without changes
test CHANGED
@@ -18,6 +18,8 @@
18
18
 
19
19
  説明が下手で申し訳ございません。
20
20
 
21
+ 下記が現状のコードになります。
22
+
21
23
 
22
24
 
23
25
  ```ここに言語を入力
@@ -160,6 +162,382 @@
160
162
 
161
163
  ```
162
164
 
165
+
166
+
167
+ ```ここに言語を入力
168
+
169
+ search.php
170
+
171
+
172
+
173
+ <main>
174
+
175
+ <section class="section section-project">
176
+
177
+ <h2 class="section-title section-title__project">project</h2>
178
+
179
+ <div class="s-btn">
180
+
181
+ <span>
182
+
183
+ search
184
+
185
+ </span>
186
+
187
+ </div>
188
+
189
+ <?php get_search_form(); ?>
190
+
191
+ <div class="project-wrapper">
192
+
193
+ <ul class="project-list">
194
+
195
+ <?php
196
+
197
+ $service_terms_pros = get_terms('service',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=>'0' )); //親タームを取得
198
+
199
+ foreach($service_terms_pros as $service_term_pros){
200
+
201
+ $service_terms[] = $service_term_pros;
202
+
203
+ $service_terms_elems = get_terms('service',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=> $service_term_pros->term_id )); //子タームを取得
204
+
205
+
206
+
207
+ foreach ($service_terms_elems as $service_terms_elem){
208
+
209
+ $service_terms[] = $service_terms_elem;
210
+
211
+ }
212
+
213
+ }
214
+
215
+
216
+
217
+ $service = array();
218
+
219
+ $services = array();
220
+
221
+ $service_selected = array();
222
+
223
+ $services = isset($_GET['service']) ? ($_GET['service']) : null;
224
+
225
+ if($services){
226
+
227
+ foreach($services as $value){ //get値がある場合は該当項目をセット
228
+
229
+ $service[]=htmlspecialchars($value);
230
+
231
+ $service_selected[]=htmlspecialchars($value);
232
+
233
+ }
234
+
235
+ }else{
236
+
237
+ foreach($service_terms as $service_term){ //get値がない場合は全項目をセット
238
+
239
+ $service[] = $service_term->slug;
240
+
241
+ }
242
+
243
+ }
244
+
245
+
246
+
247
+
248
+
249
+ $category_terms_pros = get_terms('categorytag',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=>'0' )); //親タームを取得
250
+
251
+ foreach($category_terms_pros as $category_term_pros){
252
+
253
+ $category_terms[] = $category_term_pros;
254
+
255
+ $category_terms_elems = get_terms('categorytag',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=> $category_term_pros->term_id )); //子タームを取得
256
+
257
+
258
+
259
+ foreach ($category_terms_elems as $category_terms_elem){
260
+
261
+ $category_terms[] = $category_terms_elem;
262
+
263
+ }
264
+
265
+ }
266
+
267
+
268
+
269
+ $category = array();
270
+
271
+ $categories = array();
272
+
273
+ $category_selected = array();
274
+
275
+ $categories = isset($_GET['category']) ? ($_GET['category']) : null;
276
+
277
+ if($categories){
278
+
279
+ foreach($categories as $value02){ //get値がある場合は該当項目をセット
280
+
281
+ $category[]=htmlspecialchars($value02);
282
+
283
+ $category_selected[]=htmlspecialchars($value02);
284
+
285
+ }
286
+
287
+ }else{
288
+
289
+ foreach($category_terms as $category_term){ //get値がない場合は全項目をセット
290
+
291
+ $category[] = $category_term->slug;
292
+
293
+ }
294
+
295
+ }
296
+
297
+
298
+
299
+
300
+
301
+ $people_terms_pros = get_terms('people',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=>'0' )); //親タームを取得
302
+
303
+ foreach($people_terms_pros as $people_term_pros){
304
+
305
+ $people_terms[] = $people_term_pros;
306
+
307
+ $people_terms_elems = get_terms('people',array( 'orderby' => 'term_order','order' => 'ASC', 'parent'=> $people_term_pros->term_id )); //子タームを取得
308
+
309
+
310
+
311
+ foreach ($people_terms_elems as $people_terms_elem){
312
+
313
+ $people_terms[] = $people_terms_elem;
314
+
315
+ }
316
+
317
+ }
318
+
319
+
320
+
321
+ $people = array();
322
+
323
+ $peoples = array();
324
+
325
+ $people_selected = array();
326
+
327
+ $peoples = isset($_GET['people']) ? ($_GET['people']) : null;
328
+
329
+ if($peoples){
330
+
331
+ foreach($peoples as $value03){ //get値がある場合は該当項目をセット
332
+
333
+ $people[]=htmlspecialchars($value03);
334
+
335
+ $people_selected[]=htmlspecialchars($value03);
336
+
337
+ }
338
+
339
+ }else{
340
+
341
+ foreach($people_terms as $people_term){ //get値がない場合は全項目をセット
342
+
343
+ $people[] = $people_term->slug;
344
+
345
+ }
346
+
347
+ }
348
+
349
+
350
+
351
+
352
+
353
+ $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
354
+
355
+ $the_query = new WP_Query( array(
356
+
357
+ 'post_status' => 'publish',
358
+
359
+ 'post_type' => 'works',
360
+
361
+ 'tax_query' => array(
362
+
363
+ 'relation' => 'AND',
364
+
365
+ array(
366
+
367
+ 'taxonomy' => 'service',
368
+
369
+ 'field' => 'slug',
370
+
371
+ 'terms' => $service,
372
+
373
+ ),
374
+
375
+ array(
376
+
377
+ 'taxonomy' => 'categorytag',
378
+
379
+ 'field' => 'slug',
380
+
381
+ 'terms' => $category,
382
+
383
+ ),
384
+
385
+ array(
386
+
387
+ 'taxonomy' => 'people',
388
+
389
+ 'field' => 'slug',
390
+
391
+ 'terms' => $people,
392
+
393
+ ),
394
+
395
+
396
+
397
+ ),
398
+
399
+ 'paged' => $paged,
400
+
401
+ 'posts_per_page' => -1, // 表示件数
402
+
403
+ 'orderby' => 'date',
404
+
405
+ 'order' => 'DESC',
406
+
407
+ ) );
408
+
409
+
410
+
411
+ if ($the_query->have_posts()) :
412
+
413
+
414
+
415
+ while ($the_query->have_posts()) : $the_query->the_post();
416
+
417
+
418
+
419
+ $service_label = get_taxonomy( 'service' )->label;
420
+
421
+ $service_arr = wp_get_object_terms($post->ID, 'service',array( 'orderby' => 'term_order' ));
422
+
423
+
424
+
425
+ $category_label = get_taxonomy( 'categorytag' )->label;
426
+
427
+ $category_arr = wp_get_object_terms($post->ID, 'categorytag',array( 'orderby' => 'term_order' ));
428
+
429
+
430
+
431
+ $people_label = get_taxonomy( 'people' )->label;
432
+
433
+ $people_arr = wp_get_object_terms($post->ID, 'people',array( 'orderby' => 'term_order' ));
434
+
435
+
436
+
437
+ ?>
438
+
439
+ <li class="project-listItem">
440
+
441
+ <a href="<?php the_permalink(); ?>">
442
+
443
+ <div class="project-img">
444
+
445
+ <div style="background-image:url('<?php
446
+
447
+ $image = get_field('kv');
448
+
449
+ if( !empty($image) ){
450
+
451
+ echo $image['sizes'][ "medium" ];
452
+
453
+ }
454
+
455
+ ?>')"></div>
456
+
457
+ </div>
458
+
459
+ <p class="project-meta">
460
+
461
+ <?php the_time('Y.m.d'); ?>
462
+
463
+ </p>
464
+
465
+ <h3 class="project-title">
466
+
467
+ <span><?php the_title(); ?></span>
468
+
469
+ </h3>
470
+
471
+ </a>
472
+
473
+ <ul class="meta-list meta-list__project">
474
+
475
+ <?php
476
+
477
+ $works_url = get_post_type_archive_link('works');
478
+
479
+ foreach(['service', 'categorytag', 'people'] as $tax){
480
+
481
+ $terms = get_the_terms($post->ID, $tax);
482
+
483
+ foreach( $terms as $term ) {
484
+
485
+ echo '<li><a href="'.$works_url.'?s='.urlencode($tax.','.$term->slug).'">'.$term->name.'</a></li>';
486
+
487
+ }
488
+
489
+ }
490
+
491
+ ?>
492
+
493
+ </ul>
494
+
495
+ <a href="<?php the_permalink(); ?>" class="btn btn-project btn-more">
496
+
497
+ <span>more</span>
498
+
499
+ </a>
500
+
501
+ </li>
502
+
503
+ <?php endwhile;
504
+
505
+
506
+
507
+ else :?>
508
+
509
+ <li>
510
+
511
+ <p>
512
+
513
+ 条件に合致する記事はありません
514
+
515
+ </p>
516
+
517
+ </li>
518
+
519
+
520
+
521
+ <?php endif;?>
522
+
523
+
524
+
525
+ </ul>
526
+
527
+ </div>
528
+
529
+ </section>
530
+
531
+
532
+
533
+
534
+
535
+ </main>
536
+
537
+ ```
538
+
539
+
540
+
163
541
  topページのworks部分]
164
542
 
165
543
  写真の下のスラッグをクリックした際にsearch.phpに遷移。