[wp]特定ページ、特定親ページをもつページの指定・除外について

覚えてしまえば大したことない範囲だけど、ちょっと注意が必要。

前提的な話

色々案件を触ってると、ページ指定をするときはIDよりもスラッグで指定することが多い。
URLに全角が使えるってなってもメリット薄い気がするし、スラッグとURLが同一のほうがわかりよいし、いいんじゃないのって思う。

基本形

/* 特定ページを指定 */
<?php if(is_page('aaa')): ?><?php endif; ?>
/* 特定ページを除外 */
<?php if(!is_page('aaa')): ?><?php endif; ?>
/* 特定ページを複数指定 */
<?php if(is_page(array('aaa','bbb','ccc','ddd','eee'))): ?><?php endif; ?>

複数指定する場合はarray()で囲う必要がある、要するに配列として書く必要がある。

複数条件で指定

/* 条件を複数指定 */
<?php if(is_home() || is_front_page()) : ?>
	<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/css/index.css">
<?php endif; ?>
/* 除外する場合 */
<?php if(!is_home() && !is_front_page()) : ?>
	<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_url'); ?>/css/index.css">
<?php endif; ?>

除外する場合は「!」だけじゃなくて、「||」だったら「&&」にする。

「○○または✕✕を指定」「○○と✕✕は除外」の考え方か。

親ページの指定

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('form') || is_parent_slug() === 'form'): ?>
    <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/form.css">
<?php endif; ?>

子ページだけよりも親込みになるケースが多いからこの形で覚えておけばいいと思う。

特定の親ページを持つページを除外する場合はこう。

<?php if(!(is_parent_slug() === 'form')): ?>
<?php endif; ?>

そのまま!をつけるんじゃなくて、()で囲む必要がある。

コメント

タイトルとURLをコピーしました