Как подстраница может наследовать стиль родителя в Wordpress? - PullRequest
1 голос
/ 08 января 2012

Я создаю тему, где каждая страница имеет свой цвет текста, фона и других элементов.Я был в состоянии стилизовать каждую страницу (и связанную с категорией поста) с помощью:

 <?php if ( is_home() || is_search() || is_archive ()) 
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/home.css" type="text/css" media="screen" />
    <?php } elseif( is_category( 'Turismo a Bra' ) || is_page('Turismo a Bra')) 
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/turismo-a-bra.css" type="text/css" media="screen" />      
    <?php } elseif ( is_category ('Eventi') || is_page('Eventi'))
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/eventi.css" type="text/css" media="screen" />
    <?php } elseif ( is_category ('Arte e Cultura') || is_page('Arte e Cultura'))
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/arte-e-cultura.css" type="text/css" media="screen" />
    <?php } elseif ( is_category ('Enogastronomia')|| is_page('Enogastronomia'))
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/enogastronomia.css" type="text/css" media="screen" />
<?php } elseif ( is_category ('Natura')|| is_page('Natura'))
    {
    ?>
    <link rel="stylesheet" href="<?php bloginfo('template_url')?>/css/natura.css" type="text/css" media="screen" />
    <?php } else {  ?>

    <?php } ?>

Проблема возникает, когда у меня есть (и у меня много) подстраниц.Я хочу, чтобы они назывались их родителями.Я думал, что у WP есть is_sub_page (#), но не повезло.

Знаете ли вы, что я должен добавить в условие, чтобы заголовок понимал, когда он имеет дело с подстраницей, и, в этом случае, получилИдентификатор родителя и на основе этого стиля страницы.

Я новичок в php и wordpress, это имеет смысл в моей голове, но я не знаю, как это сформулировать.

Большое спасибо, пример здесь (подстраницы находятся в правом верхнем углу.

1 Ответ

1 голос
/ 08 января 2012

Чтобы проверить, происходит ли сообщение со страницы с определенной категорией или заголовком страницы, вы можете получить его родителя и проверить, например:

in_category( 'Turismo a Bra', $post->post_parent )

Поскольку у вас уже есть много кода и вы делаете это несколько раз, лучше всего инкапсулировать всю проверку в функцию:

function needs_style( $style, $the_post ){
    $needs_style = false;
    //check details of this post first
    if( $the_post->post_title == $style ){        //does the same as in_page()
        $needs_style = true;
    } 
    elseif( in_category( $style, $the_post ) ){
        $needs_style = true;
    }
    //otherwise check parent if post has one - this is done recursively 
    elseif( $the_post->post_parent ){
        $the_parent = get_post( $the_post->post_parent );
        $needs_style = needs_style( $style, $the_parent );
    }
    return $needs_style; 
}

Итак, ваш код будет выглядеть примерно так:

if ( is_home() || is_search() || is_archive ()) { 
    //set stylesheet
}
elseif( needs_style( 'Turismo a Bra', $post ) ) {
    //set stylesheet
}
elseif( needs_style( 'Eventi', $post ) ) {
    //set stylesheet
}
...