質問編集履歴

1

変更したコードを追記しました。

2020/12/04 06:04

投稿

kii.32
kii.32

スコア67

test CHANGED
File without changes
test CHANGED
@@ -290,6 +290,198 @@
290
290
 
291
291
 
292
292
 
293
+ ### 追記12.4
294
+
295
+ 回答にて出力バッファをご教授いただき、下記サイトを参考に実装をしてみました。
296
+
297
+ [wordpress投稿記事でPHPを使う方法](https://webmemo.tokyo/articles/make-wp-shortcode/#pos4-1)
298
+
299
+
300
+
301
+ すると、出力自体はできているのですが、
302
+
303
+ ループ中のカスタムフィールド 部分の出力がされず、
304
+
305
+ どこが悪いのでしょうか。。。
306
+
307
+
308
+
309
+
310
+
311
+ 出力ショートコード↓
312
+
313
+ ```出力ショートコード
314
+
315
+ [get_tag_query result_meta_key=hogehoge meta_value=hoge result_post_type=news result_post_num=8]
316
+
317
+ ```
318
+
319
+
320
+
321
+ functions.php↓
322
+
323
+ ```functions.php
324
+
325
+ // Include ShortCode
326
+
327
+ require(dirname(__FILE__) . '/template-parts/shortcode.php');
328
+
329
+ ```
330
+
331
+
332
+
333
+ shotcode.php↓
334
+
335
+ ```shotcode.php
336
+
337
+ <?php
338
+
339
+ function get_tag_query_func($atts)
340
+
341
+ {
342
+
343
+ // 引数処理
344
+
345
+ extract(shortcode_atts(array(
346
+
347
+ 'result_post_type' => '',
348
+
349
+ 'result_post_num' => '-1',
350
+
351
+ 'result_meta_key' => '',
352
+
353
+ 'result_meta_value' => '',
354
+
355
+ ), $atts, 'get_tag_query'));
356
+
357
+
358
+
359
+
360
+
361
+ ob_start();
362
+
363
+ // 投稿取得処理
364
+
365
+ $args = array(
366
+
367
+ 'post_type' => $result_post_type,
368
+
369
+ 'posts_per_page' => $result_post_num,
370
+
371
+ 'meta_key' => $result_meta_key, //カスタムフィールドのキー
372
+
373
+ 'meta_value' => $result_meta_value, //カスタムフィールドの値
374
+
375
+ 'meta_compare' => 'LIKE', //'meta_value'のテスト演算子
376
+
377
+ );
378
+
379
+ $tagPosts = get_posts($args);
380
+
381
+ ?>
382
+
383
+ <?php if ($tagPosts) : foreach ($tagPosts as $post) : setup_postdata($post); ?>
384
+
385
+
386
+
387
+ <a class="post_item" href="<?php the_permalink(); ?>">
388
+
389
+ <?php if (post_custom('news_pic')) : // 入力がある場合
390
+
391
+ ?>
392
+
393
+ <figure class="news_pic">
394
+
395
+ <img src="<?php the_field('news_pic'); ?>" alt="">
396
+
397
+ </figure>
398
+
399
+ <?php else : // 入力がない場合
400
+
401
+ ?>
402
+
403
+ <figure class="news_pic">
404
+
405
+ <img src="<?php echo get_template_directory_uri(); ?>/assets/img/common/noimage.png" alt="">
406
+
407
+ </figure>
408
+
409
+
410
+
411
+ <?php endif; ?>
412
+
413
+ <div class="news_info">
414
+
415
+ <h3 class="news_title">
416
+
417
+ <?php
418
+
419
+ if (mb_strlen($post->post_title, 'UTF-8') > 21) {
420
+
421
+ $title = mb_substr($post->post_title, 0, 21, 'UTF-8');
422
+
423
+ echo $title . '……';
424
+
425
+ } else {
426
+
427
+ echo $post->post_title;
428
+
429
+ }
430
+
431
+ ?>
432
+
433
+ </h3>
434
+
435
+ <p class="news_area"><?php the_field('news_area'); ?></p>
436
+
437
+ <ul class="news_cat">
438
+
439
+ <?php
440
+
441
+ $obj = get_field_object('news_cat');
442
+
443
+ $news_cat = $obj['value'];
444
+
445
+ foreach ($news_cat as $news_cat_name) {
446
+
447
+ echo '<li>', $news_cat_name, '</li>';
448
+
449
+ }
450
+
451
+ ?>
452
+
453
+ </ul>
454
+
455
+ </div>
456
+
457
+ </a>
458
+
459
+ <?php endforeach;
460
+
461
+ endif; ?>
462
+
463
+ <?php wp_reset_postdata(); ?>
464
+
465
+ <?php
466
+
467
+
468
+
469
+ $output = ob_get_clean();
470
+
471
+ return $output;
472
+
473
+ }
474
+
475
+
476
+
477
+ add_shortcode('get_tag_query', 'get_tag_query_func');
478
+
479
+
480
+
481
+ ?>
482
+
483
+ ```
484
+
293
485
 
294
486
 
295
487
  phpの初学者でして、