在循环外的404页上显示自定义域

时间:2017-03-24 作者:Sam

我正在使用ACF显示<header> 标签此代码位于标题中。php。“自定义”字段显示在WP admin中的所有页面模板中。以下是它在前端的工作原理:

<header 
    class="site-header 
    <?php
        $header = get_field( \'header\',$post->ID );
        if ($header) { 
            echo esc_attr( $header ); 
        } 
        else { 
            echo \'white\';
        }
    ?>" 
>
这在除了404之外的所有页面上都能完美地工作。我在开发工具中收到以下消息:

<header class="site-header <br /> <b>Notice</b>: Trying to get property of non-object in <b>/Applications/MAMP/htdocs/theme/wp-content/themes/theme/header.php</b> on line <b>28</b><br /> white">
</header>
之所以会发生这种情况,是因为404是一个静态页面/帖子,没有与之关联的ID。

WordPress中是否有一个功能可用于正确显示自定义字段?

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

不应在模板文件中隐藏功能。模板是哑的,您通常不会对它们运行单元测试。

我建议将逻辑移到functions.php:

function header_class( $default= \'white\' )
{
    $post = get_post();

    // 404 pages, empty archives (user, taxonomy, date)
    if ( empty( $post ) )
        return $default;

    $header = get_field( \'header\', $post->ID );

    if ( empty( $header ) || ! is_scalar( $header ) )
        return $default;

    return esc_attr( $header );
}
现在,您可以在模板中调用以下函数:

<header id="masthead" class="site-header <?= header_class() ?>" role="banner">

SO网友:Sam

您可以使用is 404 函数来解决此问题。以下几点对我有用:

<header id="masthead" class="site-header 

    <?php

        if ( is_404() ) {
            echo \'white\';
        }

        else {

            $header = get_field( \'header\',$post->ID );

            if ( $header ) { 
                echo esc_attr( $header ); 

            } 

            else { 
                echo \'white\';
            }
        }

    ?>"

role="banner">

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请