get_the_terms error

时间:2016-09-07 作者:TKEz

我正在使用CPT-onomies plugin 使CPT成为分类法。我有一个英雄图像CPT(使用CPT onomies创建),英雄图像帖子类型附加到页面帖子类型。这允许我选择一个英雄形象帖子,这将是一个页面帖子的术语。所有这些都很好。当我访问以英雄图像作为分类的页面时,英雄图像会按需要显示。

我试图做到的是,如果我在一个页面上,其祖先附加了一个英雄图像,我希望该页面显示附加到父级的英雄图像。下面是我的代码。我得到一个祖先数组并遍历该数组。图像按需要显示,但在图像上方出现此错误:

Notice: Undefined property: stdClass::$data 在里面.../wp-includes/category-template.php 第1176行

//Get the current Post ID
$current_post_id = get_the_id();

//Get the current Post\'s ancestor\'s ID\'s
$current_post_parents = get_ancestors($current_post_id, \'page\');


foreach ( $current_post_parents as $post_parent ) {

      //If a hero image ID is associated with the current post being viewed (or a parent post of the current post) assign that hero image ID value to $hero_image_id
      $hero_image_id = isset( $post_parent ) && ( $assigned_hero_images = get_the_terms( $post_parent, \'hero_images\' ) ) && is_array( $assigned_hero_images ) && ( $hero_image = array_shift( $assigned_hero_images ) ) && isset( $hero_image->term_id ) ? $hero_image->term_id : NULL;

      if ($hero_image_id)
         break;

} //Code follows that displays the image based on the $hero_image_id
这是get_the_terms() 引发错误的函数。第1176行category-template.php 文件为$to_cache[ $key ] = $term->data;

要清楚的是,只有当我访问其祖先附带英雄图像的子页面时,才会出现此通知。如果我正在访问附加英雄图像的页面,或访问未附加英雄图像的页面或任何祖先页面,则不会出现错误。

2 个回复
SO网友:TKEz

我最终使用了wp_get_object_terms() 函数而不是get_the_terms(). 这个get_the_terms() 函数尝试缓存术语,其中wp_get_object_terms() 没有。

获取英雄图像CPT ID的固定代码为:

$hero_image_id = ( $assigned_hero_images = wp_get_object_terms( $post_parent, \'hero_images\' ) ) && ( $hero_image = array_shift( $assigned_hero_images ) ) && isset( $hero_image->term_id ) ? $hero_image->term_id : NULL;

SO网友:Jeremy Ross

我认为问题在于这一行:

$hero_image_id = isset( $post_parent ) && ( $assigned_hero_images = get_the_terms( $post_parent, \'hero_images\' ) ) && is_array( $assigned_hero_images ) && ( $hero_image = array_shift( $assigned_hero_images ) ) && isset( $hero_image->term_id ) ? $hero_image->term_id : NULL;

我想我明白你的意图,但PHP并没有按照你认为的顺序处理它。

让我试着分解一下:

isset( $post_parent ) // This isn\'t necessary since it couldn\'t not exist and still get into this code block.

$assigned_hero_images = get_the_terms( $post_parent, \'hero_images\' )

is_array( $assigned_hero_images ) // again, you just created it, so you don\'t need to check here.

$hero_image = array_shift( $assigned_hero_images )  // You\'re trying to access the contents of the first element of the array, but this isn\'t the best approach.

$hero_image->term_id
完成上述操作的清理版本如下所示:

$hero_image_id = get_the_terms( $post_parent, \'hero_images\')[0]->$term_id;
The[0] 获取对第一个数组元素的访问权限->$term_id 从对象获取该属性。您可以通过php中的一个名为array dereferencing.

这是没有测试,所以我可能错过了一些东西,但希望它让你在球场上足够的解决它从这里。

相关推荐

ACF Taxonomy in Loop

你好吗我的问题是,我在头版上显示了一些卡片,例如名称和描述,这些信息来自我的分类法event,因为我用ACF创建了一些字段,我想在卡片中打印它们,但我不知道怎么做。下面是我如何打印卡片的代码 <?php if(is_front_page()): $terms = get_terms( [ \'taxonomy\' => \'evento\', \'hide_empty\' =>