プラグインなしでPHP埋め込み

固定ページや投稿ページにPHPを埋め込む、プラグインなしの設定方法です。
使用テーマや他プラグインと相性が良くない場合や、プラグインを極力減らしたい場合にご活用ください。
更新の可能性のあるテーマ(自作ではないテーマ)の場合は子テーマを作成して、子テーマから下記に進んでください。

  1. ショートコードを作成STEP1
  2. ショートコードを作成STEP2
  3. ショートコードを呼び出し(表示)

ショートコードを作成STEP1

表示させたいphpのみを記述したファイルを作成します。
例えば、itemというカスタム投稿の一覧をカテゴリーごとに分けて表示たい場合が以下。
ファイル名はitem-list.phpとしました。


<ul class="list-cat flex">
    <?php
            $terms = get_terms('cat_item');
            foreach ($terms as $term) {
                echo '<li class="list_item"><a style="font-size: 115%;" href="#' . esc_html($term->slug) . '">' . esc_html($term->name) . '</a></li>';
            }
            ?>
</ul>
<?php
        // タクソノミ取得
        $catargs = array(
            'taxonomy' => 'cat_item',
            'order' => 'DESC'
        );
        $catlists = get_categories($catargs);
        foreach ($catlists as $cat) : // 取得したカテゴリの配列でループを回す
            ?>
<div>
    <h2 class="item-title" id="<?php echo $cat->slug; ?>"><?php echo $cat->name; ?></h2>
    <ul class="list-item flex">
        <?php
                $args = array(
                    'post_type' => 'item',
                    'cat_item' => $cat->slug,
                    'posts_per_page' => -1,
                );
                $my_posts = get_posts($args);
                if ($my_posts) { // 該当する投稿があったら
                    foreach ($my_posts as $post) :
                        setup_postdata($post);
                        ?>

        <li class="list_item flex_child">
            <?php
                // アイキャッチ画像を取得
                $thumbnail_id = get_post_thumbnail_id($post->ID);
                $thumb_url = wp_get_attachment_image_src($thumbnail_id, 'medium');
                if (get_post_thumbnail_id($post->ID)) {
                  echo '<img src="' . $thumb_url[0] . '" alt="">';
                } else {
                  // アイキャッチ画像が登録されていなかったときの画像
                  echo '<img class="thumb" src="' . get_home_url() . '/wp-content/uploads/no-image.jpg" alt="">';
                }
            ?>
            <div class="text-area">
                <p>
                    <span style="font-weight: 600;"><?php echo get_the_title($post->ID); ?></span><br>
                    <?php the_content(); ?>
                </p>
            </div>
        </li>
        <?php
                    endforeach;
                } else {
                    echo 'アイテムはありません';
                }
                wp_reset_postdata();
                ?>
    </ul>
</div>
<?php endforeach; ?>
   

ショートコードを作成STEP2

下記をfunction.phpにコピペで追加します。


       function my_php_Include($params = array()) {
              extract(shortcode_atts(array('file' => 'default'), $params));
              ob_start();
              include(STYLESHEETPATH . "/$file.php");
              return ob_get_clean();
              }
       add_shortcode('call_php', 'my_php_Include');
   

ショートコードを表示

PHPを表示させたいところに以下をコピペして、ショートコードを呼び出します。
(拡張子なしの)ファイル名 は 1.ショートコードを作成STEP1 で作成したファイルに合わせます。
例えば、埋め込みたいphpがitem-list.phpなら [call_php file=’item-list’]


       [call_php file='(拡張子なしの)ファイル名']