在正文ID中使用$POST->POST_NAME导致错误:尝试获取非对象的属性

时间:2015-02-23 作者:Mark Rummel

在我的debug.log:

PHP Notice:  Trying to get property of non-object in /my-wesbite/wp-content/themes/express/header.php on line 36
这是第36行header.php 在我的主题中:

<body id="page-<?php echo $post->post_name;?>" <?php body_class(); ?> data-site-url="<?php echo site_url(); ?>">
wp_head() 在第36行之前调用。

我已经查看了网站每个页面的输出源$post->post_name, body_class(), 和site_url() 全部的echo 正确地

我的假设是错误与$post->post_name, 因为它是在谈论对象的属性。我需要申报吗global $post 首先还是别的什么?

正在查看debug.log 我不知道这个错误是在每一页上发生,还是只在某些页面上发生。

作为旁注,我计划调整id 也可以解释分类法,但一旦我弄清楚是什么导致了这个错误,我就可以把它整理出来。

感谢您提供的任何帮助。

2 个回复
SO网友:cenk

对于您想要实现的目标,有一个更好的方法,这个答案与您遇到的php错误无关。你需要这些类来设计你的网站,对吗?

在函数中输入以下代码。php

// A better body class
function condensed_body_class($classes) {
    global $post;

    // add a class for the name of the page - later might want to remove the auto generated pageid class which isn\'t very useful
    if( is_page()) {
        $pn = $post->post_name;
        $classes[] = "page_".$pn;
    }

    if( !is_page() ) {          
        $pn = $post->post_name;
        $classes[] = "post_".$pn;
    }

    if ( $post && $post->post_parent ) {
        // add a class for the parent page name
        $post_parent = get_post($post->post_parent);
        $parentSlug = $post_parent->post_name;

        if ( is_page() && $post->post_parent ) {
                $classes[] = "parent_".$parentSlug;
        }

    }

    // add class for the name of the custom template used (if any)
    $temp = get_page_template();
    if ( $temp != null ) {
        $path = pathinfo($temp);
        $tmp = $path[\'filename\'] . "." . $path[\'extension\'];
        $tn= str_replace(".php", "", $tmp);
        $classes[] = "template_".$tn;
    }
    return $classes;
}


/* a better body class */
add_filter( \'body_class\', \'condensed_body_class\' );
在你需要身体类的地方,放上这个:

<body <?php body_class(); ?>>
您将看到,将打印出许多有用的类信息。

祝你好运

SO网友:Tim Malone

请记住,只有当您在一个页面或帖子上时,这才有效,因为当您显示循环的输出时,在开始循环之前,您还没有帖子(或者,您可能有循环中的第一篇帖子,但无论哪种方式,这都不是您想要设置正文ID的内容)。

我建议用两个条件包装此ID:

<?php if(is_single() || is_page()){ ?> id="page-<?php echo $post->post_name;?>" <?php } ?>
你可能会发现这样做很有效。但如果您想绝对确定,可以先尝试设置postdata,可以使用global$post,也可以运行\\u post()。如果不进行测试,我不能完全确定,但我怀疑这些条件可能会解决您的问题,因为错误可能来自那些不会自动发生的页面(即归档页面、搜索结果等)

如果这样可以解决问题,请告诉我!

结束

相关推荐

Loop returning only 1 result

我不知道为什么在运行循环时只返回1个结果。这是我的代码: <?php if ( is_front_page() && twentyfourteen_has_featured_posts() ) { // Include the featured content template. get_template_part( \'featured-content\' ); }