お知らせ/ブログ
条件分岐を親だけではなく、その配下の子にも適応させたいという案件があって、
色々調べたのでメモ。
通常だと親を分岐させても子まで反映されないんですよね。
WordPressの関数を使用しました。
固定ページの親と子の条件分岐
functions.php
function is_parent_slug() {
global $post;
if ($post->post_parent) {
$post_data = get_post($post->post_parent);
return $post_data->post_name;
}
}
条件分岐をしたい箇所
<?php if (is_page('親ページのスラッグorID') || is_parent_slug() === '親ページのスラッグorID') : ?>
//出力内容
<?php else : ?>
//出力内容
<?php endif; ?>
「is_parent_slug」というWordPressの関数をfunctions.phpに記述。
その後、分岐したい箇所にPHPのif文を挿入。
これを逆にするとエラーが出て更新できませんでした。
functions.phpの記述追加からする必要がありそうです。
数が少なければ個別に指定しても良さそうですが
今後、子ページが増えていきそうな場合は追加するのを忘れそうなので
この記述を挿入した方がいいかなと思います。
カテゴリーページの親と子の条件分岐
functions.php
if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
function post_is_in_descendant_category( $cats, $_post = null ) {
foreach ( (array) $cats as $cat ) {
$descendants = get_term_children( (int) $cat, 'category' );
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
}
条件分岐をしたい箇所
<?php if (in_category('親ページのスラッグorID') || post_is_in_descendant_category('親ページのスラッグorID')) : ?>
//出力内容
<?php else: ?>
//出力内容
<?php endif; ?>
「post_is_in_descendant_category」という関数をfunctions.phpに記述。
その後、分岐したい箇所にPHPのif文を挿入。
記述内容を「is_category」にすると
子の分岐が反映されないので「in_category」で記述しました。
上手くいかないなぁと思っていたらこれが原因でした。
結構悩んだので忘れないようにメモ。