web関連

archive.phpで特定の固定ページの情報を取得する方法

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)を通して整形しているみたい。

フィルターを通さないと、文字列がダァーっと改行なしに出力されちゃいますので注意。

参考にしたサイトが「get_page()」使ってたんだけど非推奨(2013年の3.5から)らしいので「get_post()」に変えています。
「apply_filters()」とか「?」だったけど、下記参考サイト見たら少しだけ理解できた。2個目がわかりやすかった。

参考

▼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タグ以外は普通に出力されました。

pタグやbrタグを出力されたくない時に使うって言われてもあまりないなぁーしかも「the_content()」を使ってというのはもっとないなぁー

その他に、管理画面のページ編集画面とかで「ビジュアル」「テキスト」を切り替えていたりすると、wordpressの自動整形機能が動いて意図しない箇所にpタグとかが入ってしまったりするのにも使われているようで自動整形機能を止める方法は以下のコードをfunction.phpに書く

remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

自動で、pタグやbrタグが「ビジュアル」「テキスト」を切り替えても入らなくなる。

後で気づいたけど、固定ページの本文をarchiveに無理に出力しなくてもパンくずの構造を変えれば行けたかも…パン屑のプラグインが入ってたし設定でできたんだろうか…まぁ、今更だが…