archive.phpで特定の固定ページの情報を取得する方法
お客さんであるA氏の横暴…間違えた、要望でカスタム投稿のアーカイブページを編集したいとか言い出したので、特定の固定ページの本文をarchive-カスタム投稿名.phpに出力する方法を調べたのでメモ
アーカイブ(archive.php)に特定の固定ページの本文を出力したい
function.phpに以下のコードを記述する。
<?php
$page_id = ページID;
$page = get_post($page_id);
$page_include = apply_filters( 'the_content',$page->post_content);
echo $page_include;
?>
「apply_filters()」とはフィルターイベントを発火する関数らしいです。
今回は、「the_content」というすでにwordpress側で用意されているフィルターにページIDで指定したページの本文($page->post_content)を通して整形しているみたい。
フィルターを通さないと、文字列がダァーっと改行なしに出力されちゃいますので注意。
参考
▼apply_filters() – フィルターイベントを発火する
https://syncer.jp/Web/WordPress/Reference/Function/apply_filters/
▼WordPressのadd_filterとapply_filtersのまとめ
http://www.koikikukan.com/archives/2015/01/09-011111.php
失敗例
<?php
$page_id = ページID;
$page = get_page($page_id);
echo $page -> post_content;
?>
この書き方だと、整形前のコードを引っ張ってきた。
ショートコードを作ってページID指定したページの記事を引っ張って来ようとしたらショートコードをまんま拾ってきてしばらく「?」状態だった。
フィルターは通さないと駄目なんだなー
参考
▼[WP]特定の固定ページの本文などを取得して表示する方法
https://www.webantena.net/wordpress/content-get-page-page-id-and-echo-content-post-content/
▼[WordPress]特定の固定ページの内容を取得して表示する
https://highfivecreate.com/blog/course/tips/1970.html
おまけ
調べていてちょいちょい「wpautop()」って言葉がでてきたけど、最初に紹介したapply_filters( 'the_content',$page->post_content);
でフィルターを適応させるとwpautop()
関数が実行されてpタグやbrタグが挿入されるらしい。
「<?php the_content(); ?>
使ってpタグやbrタグ入らない本文を出力したいんですぅー」って方は自動挿入されるのを防ぐ例として以下のようなものがある。
<?php remove_filter('the_content', 'wpautop'); ?>
<?php the_content(); ?>
pタグやbrが出力されず、テキストがダァーっと出力されます。
ただ、pタグやbrタグ以外は普通に出力されました。
その他に、管理画面のページ編集画面とかで「ビジュアル」「テキスト」を切り替えていたりすると、wordpressの自動整形機能が動いて意図しない箇所にpタグとかが入ってしまったりするのにも使われているようで自動整形機能を止める方法は以下のコードをfunction.phpに書く
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
自動で、pタグやbrタグが「ビジュアル」「テキスト」を切り替えても入らなくなる。