こんにちは。新潟ホームページ制作【マザーシップ】です。

以前のショートコード自作の記事を応用して、Wordpressの特定の固定ページ・投稿ページおよびカスタム投稿の内容を任意の位置に呼び出すショートコードをつくりました。

こんな時に便利です

1)直接ソースコードを触ることなく、気軽にフッタの文言やトップページの挨拶文などの記事以外の文言を変更したいときに

2)そういうときに使いたいウィジェットは「管理者」権限のユーザーしかアクセスできないと気づいたときに

3)1記事だけ呼び出すためにquery_post とか WP_Query とか書いていて、もしかしてこれは面倒くさいと気づいたときに

ステップ1:functions.php

テンプレートファイルのfunctions.phpに下記のコードを追加し、アップロードします。

//固定ページをショートコードで呼び出す
function page_func($atts) {
extract(shortcode_atts(array(
'name' => 'defalt',
'post_type' => 'post',
'class' => 'defalt',
'show' => 'content',
), $atts));
$args = array(
'name' => $name,
'post_type' => $post_type,
);
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
if($show == 'title'){ //titleだったら「投稿タイトル」を表示させる
$content = get_the_title();
}else{//それ以外(デフォルト)だったら「投稿本文」を表示させる
$content = get_the_content();
}
//$content = preg_replace("/\n/","<br />",$content);
endwhile;
wp_reset_postdata();return '<div class="'. $class.'">' . $content . '</div>';
}add_shortcode( 'page_echo', 'page_func', true );

ステップ2:テンプレートの任意の場所にショートコードを記載します。

下記をテンプレート(テーマ)phpの表示させたい場所に記載します。
name以外のパラメータは後述します。

<?php echo do_shortcode('[page_echo name=hoge]'); ?>

ステップ3:出力内容

<div>スラッグ「hoge」の投稿本文</div>

本ショートコードのパラメータ

本ショートコードのパラメータの種類は下記のとおりです。その他のパラメータも「WP_Query」がわかる方なら簡単にカスタマイズできると思います。

【必須】name : ページスラッグ 例)name=hoge

【任意】post_type : 固定ページから呼び出す場合は「post_type=page」と記入。カスタム投稿も対応可「post_type=ポストタイプ名」。
【任意】class : クラス名 例)class=defalt →付けたいときに
【任意】show : 表示内容 タイトルを表示させる場合「show=title」と記入。それ以外は本文が表示されます。

メモ

本ショートコードだと、WP_Queryのパラメータ「postname」が効かないようです;
「name=固定ページのスラッグ post_type=page」で呼び出すことが可能でした。

参考記事

1) 関数リファレンス/WP Query

2) ショートコード API

3) PHP: preg_replace – Manual

この記事をシェア