尝试使用GET_POST_META()获取非对象错误的属性

时间:2013-11-16 作者:Mayeenul Islam

我在中为post\\u meta创建了一个简单的函数functions.php:

// Top Sub Heading (top_sub) FROM CUSTOM FIELD
function topSub( $Trunckvalue = null ) {
    global $post;
    $TopSub = get_post_meta( $post->ID, \'top_sub\', $single=true );
    $shortTopSub = trunck_string( $TopSub, $Trunckvalue, true );
    if ( !$TopSub == NULL  ) { ?>
        <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub -->
    <?php }
    return $shortTopSub;
}

add_action( \'init\', \'topSub\' );
在我的主题中,我是这样使用它的:topSub(300);. 在这里trunck_string() 是另一种表演功能-无需担心。

该功能工作正常。但是有WP_DEBUG true - 显示错误:

Notice: Trying to get property of non-object ... line 88

第88行驻留:

$TopSub = get_post_meta( $post->ID, \'top_sub\', $single=true );
我已经用过很多次了,但这一次,我犯了错误。我的代码怎么了?

有关您的信息:top_sub 是可选的自定义字段。上可以有许多空白的自定义字段top_sub 可以有许多填充的。

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

$post 从不启用init 当我测试这个时--

function topSub( $Trunckvalue = null ) {
    global $post;
    var_dump($post);
}
add_action( \'init\', \'topSub\' );
我能找到的最早的钩子(通过实验,而不是规范的陈述)是wp.

另外,$post 在存档页和“单个”页上设置。在这些归档页面上,它被设置为循环中的第一篇文章。

@MayeenulIslam的自我回答中有一条评论。。。

//check if post is object otherwise you\'re not in singular post
那句话是假的。

出于这两个原因,我不希望代码或自我回答像预期的那样工作。根据我的理解,解决方案应该是:

// Top Sub Heading (top_sub) FROM CUSTOM FIELD
function topSub( $Trunckvalue = null ) {
    if (!is_singular()) return;
    global $post;
    $TopSub = get_post_meta( $post->ID, \'top_sub\', $single=true );
    $shortTopSub = trunck_string( $TopSub, $Trunckvalue, true );
    if ( !$TopSub == NULL  ) { ?>
        <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub -->
    <?php }
    return $shortTopSub;
}

add_action( \'wp\', \'topSub\' ); // or a later hook depending on circumstances
我也对这句话感到困惑:

if ( !$TopSub == NULL  ) { ?>
您正在检查$TopSub 不是NULL 但实际上正在使用$shortTopSub 在条件中。在我看来,这应该重写:

if ( !empty($shortTopSub) ) { ?>
    <h3 class="top-sub"><?php echo $shortTopSub; ?></h3> <!-- .top-sub -->
<?php }

SO网友:Mayeenul Islam

答案来自:
Trying to get property of non-object - themeforest.net:

检查变量$post 是否为对象:

    global $post;

    //check if post is object otherwise you\'re not in singular post
    if( !is_object($post) ) 
        return;

    $TopSub = get_post_meta( $post->ID, \'top_sub\', $single=true );
WordPress中使用的函数:Reference^.is_object^ 在php中。净值is_object — 查找变量是否为对象

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在