注意:未定义变量:缩略图

时间:2019-12-15 作者:Kimberly Lightfoot

我在公文包页面上有一个网格设置,无论出于何种原因,我总是会遇到以下两个错误:

注意:未定义的变量:缩略图in/home/hometo10/public\\u html/wp-content/themes/swank/archive-portfolio。php第22行

注意:尝试在/home/hometo10/public\\u html/wp content/themes/swank/archive公文包中获取非对象的属性。php第22行

这是我的档案资料袋。PHP代码

<?php
//* The custom portfolio post type archive template


//* Add the portfolio blurb section
add_action( \'genesis_before_content\', \'swank_portfolioblurb_before_content\' );
function swank_portfolioblurb_before_content() {

    genesis_widget_area( \'portfolioblurb\', array(
    \'before\' => \'<div class="portfolioblurb">\',
    ) );

}

//* Add the featured image after post title
add_action( \'genesis_entry_header\', \'swank_portfolio_grid\' );
function swank_portfolio_grid() {

    if ( has_post_thumbnail() ){
        echo \'<div class="portfolio-featured-image">\';
        echo \'<a href="\' . get_permalink() .\'" title="\' . the_title_attribute( \'echo=0\' ) . \'">\';
        echo get_the_post_thumbnail($thumbnail->ID, \'portfolio-featured\');
        echo \'</a>\';
        echo \'</div>\';
    }

}

//* Remove the ad widget
remove_action( \'genesis_before_loop\', \'adspace_before_loop\' );

//* Remove author box
remove_action( \'genesis_after_entry\', \'genesis_do_author_box_single\', 8 );

//* Remove the post meta function
remove_action( \'genesis_entry_footer\', \'genesis_post_meta\' );

//* Remove the post info function
remove_action( \'genesis_entry_header\', \'genesis_post_info\', 12 );

//* Force full width content layout
add_filter( \'genesis_pre_get_option_site_layout\', \'__genesis_return_full_width_content\' );

//* Remove the post content
remove_action( \'genesis_entry_content\', \'genesis_do_post_content\' );

//* Remove the footer widgets
remove_action( \'genesis_before_footer\', \'genesis_footer_widget_areas\' );

genesis();

3 个回复
SO网友:Tom J Nowell

它在抱怨$thumbnail 是未定义的,因为它是未定义的,未知的,它是从稀薄的空气中拉出的。

echo get_the_post_thumbnail($thumbnail->ID, \'portfolio-featured\');
这是第一次$thumbnail 提到,它是从哪里来的?\'\'\\_(ツ)_/“我不知道,PHP也不知道,因此发出了警告。您可以将其更改为$thai_chicken_curry->ID 它将以相同的方式运行,并生成相同的警告。

您可以通过协调代码轻松解决此问题

注意,comungulatianing这个词并不存在,所以你可能想知道我指的是什么。PHP在看到未定义的变量时也是这样做的。

当PHP遇到此类问题时,它会用null-ish/FALSY值,因此该函数可能会检索当前帖子的ID(如WP文档中所定义)

So how do you fix it? 您有多种选择:

找出从何处获取缩略图,并将该附件帖子分配给一个名为$thumbnail 因此,它现在已定义/已知

  • 将该行替换为您想要的内容,也就是用大小显示缩略图portfolio-featured, 你可以通过the_post_thumbnail( \'postfolio-featured\') https://developer.wordpress.org/reference/functions/the_post_thumbnail/
  • SO网友:butlerblog

    如果你没有读过Tom\'s answer to your question, 先读一读。他给出了一个很好的解释(一如既往!)当然,为什么会出现错误。这是在进行WP开发时需要了解的重要信息,他对此进行了很好的解释,所以我在此不再重复。

    我确实有一个建议可以解决您的问题,即未定义的$thumbnail 价值

    在如何使用它的上下文中,似乎原始作者(我假设你是从其他地方得到的)希望这是一个对象(因此->). 我试图找到它的来源,因为有很多“重复使用”和“重新散列”的代码片段,几乎所有与WP相关的东西都有,有好的,也有坏的。

    它似乎来了from here. 不幸的是,这并不能提供解决方案。如果他是原作者,错误就来自那里,而且没有足够的上下文来确定他打算去哪里$thumbnail 来自。

    因此,严格查看所涉及的WP函数,我们可能会做出“最佳猜测”,即作者打算将其作为当前$post 对象(这是我的猜测)。

    WP功能get_the_post_thumbnail() 要求第一个参数为post ID (see documentation here). ID包含在对象中($post->ID).

    在本例中,原始代码段作者表示$post->ID 具有$thumbnail->ID 如果$thumbnail 之前定义为$post 对象,但它不是。

    所以要解决这个问题,或者至少尝试解决这个问题,我们需要定义要传递的对象。我们假设电流$post 是必需的对象,并且可以作为全局对象使用。以下是对该部分的更改,您可以尝试:

    if ( has_post_thumbnail() ){
    
        global $post;
    
        echo \'<div class="portfolio-featured-image">\';
        echo \'<a href="\' . get_permalink() .\'" title="\' . the_title_attribute( \'echo=0\' ) . \'">\';
        echo get_the_post_thumbnail($post->ID, \'portfolio-featured\');
        echo \'</a>\';
        echo \'</div>\';
    }
    
    写这个答案比在网上查找这些东西要花更长的时间(总共大约2分钟)。所以我的建议是学习其中的一些东西,它们是如何组合在一起的,以及它们是如何使用的。知道汤姆和我的解释,你就能相对较快地自己弄明白这一点。最重要的部分是学习如何将WP的文档用于其功能(请注意,我在哪里引用了上述文档)。您可以使用它来了解函数的期望值,并从那里向后工作。

    Update

    另一种可能的方法是使用WPget_the_ID() 获取帖子ID的函数(see docs here). 因此,与其使用global $post, 您将使用get_the_ID() 获取当前帖子的ID以便您可以传入get_the_post_thumbnail().

    if ( has_post_thumbnail() ){
    
        $post_id = get_the_ID();
    
        echo \'<div class="portfolio-featured-image">\';
        echo \'<a href="\' . get_permalink() .\'" title="\' . the_title_attribute( \'echo=0\' ) . \'">\';
        echo get_the_post_thumbnail($post_id, \'portfolio-featured\');
        echo \'</a>\';
        echo \'</div>\';
    }
    

    SO网友:Kimberly Lightfoot

    这些都是非常有用的信息。我从自己解决这个问题中学到了很多关于Wordpress功能的知识,但你们两个都把“人类”的理解融入其中并解决了我的问题。谢谢你们,保存了我的网站和理智!

    相关推荐