WordPressのカスタマイズのお仕事が最近ほんとに増えてきてまして、ここのところ「他のサイトで作ったものをWordPressに移行したいんだ~」というお話が多いです。
で、まだまだやったことがない技術を求められることが、とてもよくありますね・・・日々勉強だな~、と感じています。
ところでWordPressで以下のような事をしたいと思ったことはありませんでしょうか。
- このページや記事の内容を、あのページのあの箇所にも表示させたいな~
- トップページとかに、表示できないのかな~
私個人的には、よくお客さんに「これできないの?」って聞かれますので、この際メモっておこうと思います。似たような事をされたい方は、ご参考ください。
まずは前提を決めます
例えばトップページに「特定のページや記事の内容を表示したい」とします。ですので、WordPressのテーマファイル「index.php」または「home.php」などをテキストエディターなどを使って編集することになります。
これからご紹介するコードを、追加することになります。
固定ページの内容をトップページに読み込んで表示
「index.php」内の、任意の場所に下のPHPコードを書きます。
2013/07/25 追記
get_pageの使用は非推奨のようです。将来的になくなるかもってやつですかね(参考リンク「Function Reference/get page」)。「get_post」を利用するように促されてますので、修正しました。
あと、get_postの第3引数の値についてもう少し理解が必要なことがわかりました。こちらも随時理解したら追記していきます。(ちなみにデフォルトの値は’raw’です。特別な事をしない限り’raw’でいいみたいです)
<?php $page_id = 29;//数字はページのIDを入れてください $page = get_post($page_id, 'OBJECT', 'raw'); //指定したページのIDの情報を取得 $page_include = apply_filters( 'the_content',$page->post_content); //ページの本文をフィルターフックで整形してます echo $page_include; //出力します ?>
これでできます。次は、特定の記事を読み込んで表示する場合。
記事の内容をトップページに読み込んで表示
「index.php」内の、任意の場所に下のPHPコードを書きます。
<?php $post_id = 319; //数字は記事のIDを入れてください $post = get_post($post_id, 'OBJECT', 'raw'); //指定した記事のIDの情報を取得 $post_include = apply_filters( 'the_content',$post->post_content); //記事の本文をフィルターフックで整形してます echo $post_include; //出力します ?>
という感じでできます。と、ここで「apply_filters」にご注目下さい。
「apply_filters」が実はとても大事
読み込みから出力の際に、「apply_filters」を使って、フィルターフック名「the_content」をフックさせています。「get_page」または、「get_post」で読み込んだ本文を、「the_content」の形に整形しているイメージでしょうかね。
画像で見てもらえますと、なんとなくピンとくるかもしれない。ちなみに、「apply_filters」が「ある」と「ない」とでは、具体的にはこう違います。
apply_filtersが「ない」場合
画像にキャプションをつけたんですが、いらない文字というか設定した値などがそのまんま表示されていますね。かっこ悪いですね。
apply_filtersが「ある」場合
ちゃんと画像の下部にきている。すっきり。
表示させるからには、しっかりと本来の形で表示させましょう。
まとめ
この方法は、特にトップページなどで使う場面が私は多いです。WordPressで特定のページや記事を任意の場所に表示させたい場合に重宝します。
例えば表示させていたとしても「apply_filters」の記述がないパターンで、キャプションなどが崩れて表示されてしまって困った!という方に、ぜひとも参考いただければ幸いです。
ちなみに、本文以外のデータも取得・表示できます。
追記:
古いAndroidのバージョン(2.1)などでこの方法を試すと、imgタグがそのまま出力されていることを教えて頂きまして、私もその現象を確認しました。対処方法を今まとめていますので、また追記しますね。
ひとまずの参考となるのはこちらです。
@s56bouya とりあえず $page_array = query_posts('page_id=★');$page = array_shift($page_array);
echo $page->post_content; なら大丈夫でした。— Kurudrive (@kurudrive) February 28, 2013
なにかと交流させていただいております石川さんから教えて頂きました。とても助かります。ただ、このコードはやりたいことによっては、もうちょっと工夫しないといけないので、それこそ技術力必要ですね。
丸一日検索しながら苦戦していたトップページのカスタマイズが一発でうまくいきました!
プラグインでは、固定ページにしか表示できなかったり、トップページにネット情報通りに書くと真っ白になったり……
ありがとうございます。助かりました。
2013/02/11 23:55:15
ツイート
シェア
コメントありがとうございます!
プラグインも便利ですけども、もっと柔軟にWordPressをカスタマイズしたい場合には、
この方法はとても便利だと思っています。
無事解決できて、よかったです!!
2013/02/12 09:19:11
ツイート
シェア
初めまして。
上記のようにコードを貼ってみたんですが、全く変更されません(^^ゞ
post idも何度も確認したんですが、、、
当サイトは、以下になります。
新着記事一覧の上に固定ページを表示させたいのですが。もしおわかりでしたらご教授していただけると幸いです。
http://smapho.kadennka.com/wp/
2013/03/24 21:45:39
ツイート
シェア
初めまして、じゃなくて、二度目まして。
以前もこちらで参考にさせて頂き上手く解決したことがあるものです。
こちらのサイトを参考にして、
トップページに以下のように記述したところ
post_content);
echo $post_include;
?>
以下のように表示されるのみでした。
$post_id = 24541;
$post = get_post($post_id, 'OBJECT' , 'raw');
$post_include = apply_filters( 'the_content',$post->post_content);
echo $post_include;
?>
何が問題なのでしょうか?
2015/01/05 22:03:30
ツイート
シェア
どうもです~。
"以下のように表示されるのみでした。"
というのは「コードがそのまま表示されてしまった」という意味でしょうか。もし他の意味があるようでしたら、可能な限り詳細を教えて頂けますと何かご提案できるかもしれません。
2015/01/05 22:37:21
ツイート
シェア
返信ありがとうございます。
すいません。今見ると、何故か一部の文字が消えていて、分かりづらくなっています。
おっしゃる通り、「コードがそのまま表示されてしまった」のです。ただし、冒頭1行目の'<?php'の部分だけは表示されてません。2行目以降がそのまま表示されました。
2015/01/05 22:41:33
ツイート
シェア
Improved Include Page というプラグインを入れたら、あっさり「固定ページに固定ページの内容を読み込む」という目的が達成できてしまいました。。。Imamura様に質問しておきながら、、、、申し訳ございません。ただ、それとは別に質問させて頂きました件につきまして、ご好意にてお答えを頂けますのでございましたら、幸いの限りにございます。
2015/01/06 00:21:15
ツイート
シェア
トップページに特定の記事本文を全て表示させたくて。朝からネット探しまわっていました。
とうとう辿りつけないと思っていた夕方4時頃、こちらのサイトを見つけました。
おかげさまで解決の道が開けました。ありがとうございます。これで1日をパーにしなくて済みそうです。感謝です。
またおじゃまさせて頂きます。まずは御礼までm(_ _)m
2015/02/28 16:27:30
ツイート
シェア
よかったです。こちらこそご参考頂きまして、ありがとうございました。
他にもいくつか記事を書いていますので、また遊びに来てください!
2015/02/28 18:27:18
ツイート
シェア