WordPressには、PHPコードを簡単に挿入出来る仕組みがあります。たまたま、特定のカテゴリの投稿のみを一覧表示したくてショートコードを追加した際に、コメント欄が非表示にならなくて困りました。とりあえず暫定的な対応をした時のメモ。

最初に、ショートコードを引っ掛けるためのコードを function.phpに追加しました(このあたりは他の記事を参考にしてください)、追加したコードは以下の通りです。

<div class="card border-primary">
<div class="card-header border-primary">Material</div>
<div class="card-body">
  <div class="row">
    <?php $posts = get_posts('numberposts=10&category=1'); global $post; ?>
    <?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
    <div class="card mr-auto ml-auto mb-4" style="width: 22rem;">
      <div class="card-header"><?php the_title();?></div>
        <div class="card-body">
          <div align="center"><?php the_post_thumbnail(array(286, 180)); ?></div
>
          <h5 class="card-title"></h5>
          <p class="card-text"><?php the_excerpt();?></p>
          <a href="#" class="btn btn-primary">Download</a>
        </div>
    </div>
    <?php endforeach; endif; ?>
  </div>
</div>
</div>

list.php

最後に、このショートコード [myphp file=”list.php”] をページに貼り付けリロードしてみると、あれ?コメント欄がなぜか表示されるようになっている。なんでだろう?コメント欄は Edit pageの編集画面にある Discussionの “Allow comments”のチェックを外しているから表示されない筈だが。

結論からいうと、ショートコードの処理が邪魔して 本来参照すべき $postを上書きしてしまっていたのが原因、暫定的に一旦 $postを保存して、処理の最後に復元したらコメント欄は非表示となりました。

<?php $save = $post;?>
<div class="card border-primary">
<div class="card-header border-primary">Material</div>
<div class="card-body">
  <div class="row">
    <?php $posts = get_posts('numberposts=10&category=1'); global $post; ?>
    <?php if($posts): foreach($posts as $post): setup_postdata($post); ?>
    <div class="card mr-auto ml-auto mb-4" style="width: 22rem;">
      <div class="card-header"><?php the_title();?></div>
        <div class="card-body">
          <div align="center"><?php the_post_thumbnail(array(286, 180)); ?></div>
          <h5 class="card-title"></h5>
          <p class="card-text"><?php the_excerpt();?></p>
          <a href="#" class="btn btn-primary">Download</a>
        </div>
    </div>
    <?php endforeach; endif; ?>
  </div>
</div>
</div>
<?php $post = $save;?>

ご参考までに(って、誰もハマらないか、こんなところで) 😗