横幅出现在页面上,但不出现在帖子上;称之为条件性混乱

时间:2015-02-19 作者:Chris

我有一个横幅图像,出现在我想要的页面上。然而,我也有一个指定为博客的页面,它不会出现在那里。有没有办法将此横幅显示在使用博客模板的页面上?尝试添加is_home()is_page( $id ) 要在下面编写代码,但我正在抓救命稻草,请欣赏您的想法

//* Add Header Images on Posts/Pages
add_image_size( \'header-img\', 1600);
add_action(\'after_header\', \'site_banner\', 0);
function site_banner(){
    if( !is_singular( \'page\' ) )
        return;

    if( has_post_thumbnail() && is_page() ) :
        $ftbanner = wp_get_attachment_image_src( get_post_thumbnail_id( get_the_ID() ), \'header-img\' );
        $banner = $ftbanner[0];
        echo \'<div id="site-banner" class="site-banner">\' . "\\n";
        echo \'<img src="\' . $banner . \'">\' . "\\n";
        echo \'</div>\' . "\\n";
    endif;
}

1 个回复
最合适的回答,由SO网友:Howdy_McGee 整理而成

因为你已经指定了一个特定的页面作为你的日志存档(博客),它不再是一个标准页面;意思is_page() 很可能会失败。由于您的博客页面现在更像是一个归档文件,因此由于您的第一个条件,它会自动返回。

  • is_singular() - 退货true 查看单个页面、帖子或帖子类型时IF 我们是NOT 查看Singular Page 然后返回。既然博客不再是一个单一的页面,那么我们可以这样说:

    if( ! is_page() && ! is_home() )
        return;
    
    接下来,由于此博客页面是一个存档,我们现在无法在global $post 为我们提供博客页面的正确IDget_the_ID() 将失败。我们需要做的是使用以下内容获取博客ID:

    $blog_id = get_option( \'page_for_posts\' );
    
    我在下面对你的函数做了一些修改,但应该是一样的。

    //* Add Header Images on Posts/Pages
    add_image_size( \'header-img\', 1600 );
    add_action( \'after_header\', \'site_banner\', 0 );
    function site_banner() {
        if( ( is_page() || is_home() ) ) {
            $post_id = ( is_home() ? get_option( \'page_for_posts\' ) : get_the_ID() );
    
            if( has_post_thumbnail( $post_id ) ) {
                $ftbanner = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), \'header-img\' );
                $banner = $ftbanner[0];
                echo \'<div id="site-banner" class="site-banner">\' . "\\n";
                echo \'<img src="\' . $banner . \'">\' . "\\n";
                echo \'</div>\' . "\\n";
            }
        }
    }
    
    我在这里所做的不同之处在于,我确保我们正在查看页面或博客页面,如果是,请设置$post_id 然后验证该页面是否具有特征图像集。如果有一组,则显示横幅图像。

结束