てっきんの具。

「てっきん」と呼ばれて40年のおっさんが書くブログ

WordPressにて 特定ページの本文をトップページに表示する方法

[2013.7.3追記]
ベータ版での情報ですがWordPress 3.6から、テンプレートタグ the_content(), get_the_content() に任意の記事IDの本文を取得できるオプションが追加されるようです。詳しくは記事の後半にて。

[2013.10.4追記]
……と思ったら3.6正式版では上記のオプションが実装されませんでした 🙁 残念。


ちょっとわかりづらいタイトルでスミマセン。

今とりかかっているショップサイトの案件で

  • トップページのテンプレート(home.php)が存在している
  • ショップ紹介の静的ページが存在している(テンプレートは page.php )

という状況下で「ショップ紹介の本文をトップページにも表示したい」というリクエストがありました。

手っ取り早いのは home.php にショップ紹介の本文をコピペしてしまうことですが、本文が更新される可能性を考えるとあまり賢い方法とはいえません。そこで検索したところ……

WordPressな日々 » TIPS – トップページにウェルカムメッセージを表示
http://www.junyx.net/wordpress/2007/192

という参考サイトが見つかりました。

……なのですが、今回、同様のサイトを三つ作る必要があり(テンプレは共通ですが)サイトごとにショップ紹介ページのIDが変わってしまうおそれがあったので、参考サイトが採用している get_page 関数ではなく get_page_by_title 関数を使うことにしました。「しました」と、いかにも知っていたかのような書き方をしているものの、関数リファレンスを眺めていて偶然発見した関数だったりして。

例によって「ご利用は計画的に」のコードですが、参考までに記しておきます。

$post = get_page_by_title ( 'ショップ紹介' );
echo $post -> post_content;
?>

 post_content );
?>

ショップ紹介が1行こっきりならよいのですが、複数行にわたる場合は $post -> post_content で取り出した本文に適宜 nl2br などの関数をかませて
を挿入する加工が必要かと思います。

ついでに「ショップ紹介」のページに作ったカスタムフィールド「address」(=所在地を格納するために作成)を get_page_by_title 関数で取り出すコードも。

$post = get_page_by_title( 'ショップ紹介' );
echo get_post_meta( $post -> ID, 'address', true );
?>

 ID, 'address', true );
?>

関数リファレンス – WordPress Codex 日本語版
http://wpdocs.sourceforge.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9

[2009.2.23追記]

ショップ紹介が1行こっきりならよいのですが、複数行にわたる場合は $post -> post_content で取り出した本文に適宜 nl2br などの関数をかませて
を挿入する加工が必要かと思います。

と書きましたが

echo $post -> post_content;

の部分を

echo apply_filters( 'the_content', $post -> post_content );

と置き換えれば nl2br など使わずとも解決ですね。記事本文に対して何らかの加工を加えるプラグインを追加しているなら、なおのこと。

[2010.8.26追記]
セキュリティを高める観点からも

echo apply_filters( 'the_content', $post -> post_content );

を使うのがよいです。

[2010.8.27追記]
「ご利用は計画的に」とは書いたものの、できるだけ精度の高いtipsにしたいと思いコードを追記しました。

[2013.6.21追記]
変数 $post はグローバル変数なのでヘタにさわらないほうがいいですね。
$post の代わりに $my_post とかにした方がベターです。

[2013.7.3追記]
ベータ版での情報ですがWordPress 3.6から、テンプレートタグ the_content(), get_the_content() に任意の記事IDの本文を取得できるオプションが追加されるようです。開発中のソースを見るとこんな感じで書かれてますね。

function get_the_content( $more_link_text = null, $strip_teaser = false, $id = 0 ) {
	global $page, $more, $preview;

	$post = get_post( $id );
	// Avoid parsing again if the post is the same one parsed by setup_postdata().
	// The extract() will set up $pages and $multipage.
	if ( $post->ID != get_post()->ID )
		extract( wp_parse_post_content( $post, false ) );
	else
		global $pages, $multipage;

カテゴリー:

タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください