1

当我在 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 );设置投资组合的缩略图。

但它没有设置任何东西。

我该如何解决?

4

3 回答 3

1

更新 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

这里是数据库表“wp_termmeta”的相应截图:

// 显示 443(正确的 'thumbnail_id' 设置在 DB 表中

所以这是经过测试并且有效的。

这一次,update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );将正确设置一个值。

…</p>


更新1:

产品类别是一个 WordPress 自定义分类法,它使用WP_terms……</p>

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

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

相反,您需要使用$lastCategory->term_id它将与WP_Term对象一起使用,并且get_woocommerce_term_meta()这样:

$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 获取属性缩略图 - 变体色板和照片插件

于 2017-07-24T16:01:14.493 回答
0

首先,WooCommerce 产品类别是 a taxonomy,而不是 a 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() 甚至不应该工作,因为您在这里使用产品类别,而不是常规的帖子类别):

$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.

于 2017-07-24T16:13:11.213 回答
0

get_woocommerce_term_meta自 3.6 版起已弃用`使用 get_term_meta 代替。

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

食典参考文件

于 2019-06-21T04:24:17.033 回答