从 WooCommerce 中的最后一个产品类别术语中获取 'thumbnail ID'

Getting the 'thumbnail ID' from last product category term in WooCommerce

当我在 WooCommerce 中添加新类别时,我正在尝试务实地添加新的投资组合。

我的代码是:

function programmatically_create_post() {

$author_id = 1;
$taxonomy     = 'product_cat';
$orderby      = 'id';
$show_count   = 0;      // 1 for yes, 0 for no
$pad_counts   = 0;      // 1 for yes, 0 for no
$hierarchical = 1;      // 1 for yes, 0 for no
$title        = '';
$empty        = 0;

$args = array(
    'taxonomy'     => $taxonomy,
    'orderby'      => $orderby,
    'show_count'   => $show_count,
    'pad_counts'   => $pad_counts,
    'hierarchical' => $hierarchical,
    'title_li'     => $title,
    'hide_empty'   => $empty
);
$all_categories = get_categories( $args );
$lastCategory=end($all_categories);
$slug =$lastCategory->slug;
$title=$lastCategory->name;
$thumbnail_id= get_post_thumbnail_id($lastCategory->id );

// If the page doesn't already exist, then create it

if( null == get_page_by_title( $title ) ) {

// Set the post ID so that we know the post was created successfully

    $post_id = wp_insert_post(

        array(

            'post_author'   => $author_id,
            'post_name'   => $slug,
            'post_title'    => $title,
            'post_status'   => 'publish',
            'post_type'   => 'us_portfolio',
            'post_parent' =>11,
            'page_template' =>'custumcat.php',
            'post_slug'=> $slug

        )

    );


    update_post_meta($post_id, '_wp_page_template', 'custumcat.php' );
    update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

// Otherwise, we'll stop

} else {

    // Arbitrarily use -2 to indicate that the page with the title already exists

    $post_id = -2;

} // end if
} // end programmatically_create_post


add_action('create_product_cat', 'programmatically_create_post', 10,2);

我想从类别缩略图中设置作品集缩略图,并且 我使用 $thumbnail_id= get_post_thumbnail_id($lastCategory->id ); 获取类别缩略图。

之后我使用 update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id ); 设置投资组合的缩略图。

但它没有设置任何东西。

我该如何解决?

更新 2.1

我一直在测试下面的代码,我得到了正确的 $thumbnail_id 没有错误:

$categories = get_categories( array(
    'taxonomy'     => 'product_cat',
    'orderby'      => 'id',
    'show_count'   => 0,
    'pad_counts'   => 0,
    'hierarchical' => 1,
    'title_li'     => '',
    'hide_empty'   => 0
) );

$last_cat = end($categories); // last category

$last_cat_term_id = $last_cat->term_id; // Value is

$thumbnail_id = get_woocommerce_term_meta( $last_cat_term_id, 'thumbnail_id', true );
echo 'Term ID is: ' . $last_cat_term_id . '<br>';
echo 'Thumbnail ID is: ' . $thumbnail_id;

它显示最后一个类别(此数据与我的产品类别设置相关):

Term ID is: 48
Thumbnail ID is: 443

这里是数据库的相应屏幕截图 table "wp_termmeta":

So this is tested and works.

This time, update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id ); will set correctly a value.


更新 1:

产品类别是使用 WP_terms

的 WordPress 自定义分类法

这不起作用,因为 $lastCategory->id 不存在(并输出空值):

$thumbnail_id= get_post_thumbnail_id($lastCategory->id );

相反,您需要使用 $lastCategory->term_id,它将与 WP_Term 对象和 这样:

$thumbnail_id= get_woocommerce_term_meta( $lastCategory->term_id, 'thumbnail_id', true );

WP_Term 对象属性是:

term_id 
name
slug
term_group
term_taxonomy_id
taxonomy
description 
parent
count

与产品类别术语相关:

首先,WooCommerce 产品类别是 taxonomy,而不是 post,因此您不能在其上使用函数 get_post_thumbnail_id()。 相反,你可以使用这样的东西:

$thumbnail_id = get_woocommerce_term_meta( $term_id, 'thumbnail_id', true );

其次,由于您的 programmatically_create_post 函数是 create_product_cat 的挂钩,因此在调用时它会收到 2 个参数:$term_id 和 $term_taxonomy_id。 无需通过所有这些行查找刚刚创建的产品类别(get_categories() 甚至不应该工作,因为您在这里使用产品类别,而不是常规的 post 类别):

$all_categories = get_categories( $args );
$lastCategory=end($all_categories);

当你可以简单地声明你的函数时

function programmatically_create_post($term_id, $tt_id) {...}

然后简单地使用$term_id参数:

$lastCategory = get_term($term_id, 'product_cat');

确保您也使用 $term_id 而不是 $lastCategory->id

get_woocommerce_term_meta 自 3.6 版起已弃用 `改为使用 get_term_meta。

get_term_meta( int $term_id, string $key = '', bool $single = false )

食典reference documentation