固定ページや投稿ページにPHPを埋め込む、プラグインなしの設定方法です。
使用テーマや他プラグインと相性が良くない場合や、プラグインを極力減らしたい場合にご活用ください。
更新の可能性のあるテーマ(自作ではないテーマ)の場合は子テーマを作成して、子テーマから下記に進んでください。
ショートコードを作成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='(拡張子なしの)ファイル名']