在Woocommerce

时间:2017-10-15 07:51:34

标签: php wordpress function woocommerce

我目前有一个使用wp_insert_post()成功将产品添加到Woocommerce的功能。

我现在正尝试根据产品标签将产品分配到相关类别。例如,如果产品添加了产品标签' ring'或者'项链'然后它被自动分配给珠宝'珠宝。类别。

使用以下功能,我可以在帖子上实现正确的功能,但是在尝试使用woocommerce中使用的产品类型工作时没有运气。

适用于帖子:

function auto_add_category ($post_id = 0) {
 if (!$post_id) return;
 $tag_categories = array (
   'ring' => 'Jewellery',
   'necklace' => 'Jewellery',
   'dress' => 'Clothing',
 );
 $post_tags = get_the_tags($post_id);
 foreach ($post_tags as $tag) {
   if ($tag_categories[$tag->name] ) {
     $cat_id = get_cat_ID($tag_categories[$tag->name]);
     if ($cat_id) {
       $result =  wp_set_post_terms( $post_id, $tags = $cat_id, $taxonomy = 'category', $append = true );
     }
   }
   }
 }
 add_action('publish_post','auto_add_category');

我已尝试将代码重新用于产品,如下所示:

function auto_add_category ($product_id = 0) {
    if (!$product_id) return;
 $tag_categories = array (
    'ring' => 'Jewellery'
    'necklace' => 'Jewellery',
    'dress' => 'Clothing',
 );
 $product_tags = get_terms( array( 'taxonomy' => 'product_tag') );
 foreach ($product_tags as $tag) {
    if ($tag_categories[$tag->name] ) {
        $cat = get_term_by( 'name', $tag_categories[$tag->name], 'product_cat' );
        $cat_id = $cat->term_id;
        if ($cat_id) {
            $result =  wp_set_post_terms( $product_id, $tags = $cat_id, $taxonomy = 'product_cat', $append = true );
        }
    }
 }
}
add_action('publish_product','auto_add_category');


但是,它不会在产品创建时分配相关类别。任何帮助都会受到这位新手编写者通过wordpress捣乱的感激之情!

1 个答案:

答案 0 :(得分:0)

试试这段代码:

function auto_add_category ($product_id = 0) {

    if (!$product_id) return;

    // because we use save_post action, let's check post type here
    $post_type = get_post_type($post_id);
    if ( "product" != $post_type ) return;

    $tag_categories = array (
        'ring' => 'Jewellery'
        'necklace' => 'Jewellery',
        'dress' => 'Clothing',
    );

    // get_terms returns ALL terms, so we have to add object_ids param to get terms to a specific product
    $product_tags = get_terms( array( 'taxonomy' => 'product_tag', 'object_ids' => $product_id ) );
    foreach ($product_tags as $term) {
        if ($tag_categories[$term->slug] ) {
            $cat = get_term_by( 'name', $tag_categories[$term->slug], 'product_cat' );
            $cat_id = $cat->term_id;
            if ($cat_id) {
                $result =  wp_set_post_terms( $product_id, $cat_id, 'product_cat', true );
            }
        }
    }
}
add_action('save_post','auto_add_category');