目次
はじめに
最近、仕事で有料のテーマを購入してカスタマイズする機会がありました。
有料のテーマは、デザイン性が高くてお手軽に機能を追加できる反面、あと一歩痒いところに届かない事がたびたびあります。
今回は、なぜか固定ページの親子関係でパンくずナビが切り替わってくれなかったので、自作することにしました。
検証環境
| wordpress | 5.3.2 |
導入
理想図

ソース
<ul>・<li>を使ったパンくずナビを実装します。
Microdata はただのおまけです。
使用しないなら削除しても問題ありません。
<ul>
<?php
$list = array();
$parent_id = $post->post_parent;
while ($parent_id !== 0){
$parent_post = get_post($parent_id);
$parent_id = $parent_post->post_parent;
array_unshift($list,
sprintf('<li class="p-breadcrumb__item c-breadcrumb__item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
<a href="%s" itemscope itemtype="http://schema.org/Thing" itemprop="item">
<span itemprop="name">%s</span>
</a>
<meta itemprop="position" content="%s" />
</li>',
esc_url( get_permalink($parent_post->ID) ),
esc_html($parent_post->post_title),
$breadcrumb_position++
)
);
}
echo join('', $list);
?>
<li class="p-breadcrumb__item c-breadcrumb__item">
<span itemprop="name"><?php echo strip_tags( get_the_title( $post->ID ) ); ?></span>
<meta itemprop="position" content="<?php echo $breadcrumb_position++; ?>" />
</li>
</ul>
解説
まず現在の固定ページに親が居るかを $post->post_parent を使って判別します。
親が存在しない場合は、0を値として持っています。
親を持っていない場合は、 while() は動作しません。
親を持っている場合は、get_post($parent_id) で親の固定ページを取得します。
そして直後に取得した固定ページに親のIDを設定します。
これで再起的に while() を回して、親の固定ページを取得し続けます。
肝心の取得した親の固定ページをリストにする方法ですが、 array_unshift() を使って、取得する毎に配列の先頭に新しいリストを追加していきます。
最後に配列を join() で文字列に変換して出力してやれば完了です。
さいごに
WordPressの固定ページの親子関係のパンくずナビを出力する方法でした。
ほとんど備忘録的な記事です。
意外とデキが良くて、気に入っているので思わず記事にしてしまいました。
今日はこの辺でー