2017-10-15 10 views
1

現在、wp_insert_post()を使用して商品をうまくコマースに追加する機能があります。woocommerceの商品タグに基づいてカテゴリに商品を自動的に割り当てます

私は現在、商品タグに基づいて関連するカテゴリに商品を割り当てようとしています。たとえば、商品に「製品」の「リング」または「ネックレス」が追加されている場合、その商品は「ジュエリー」カテゴリーに自動的に割り当てられます。

以下の機能を使用して、投稿で正しい機能を達成できましたが、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を通じて彼の方法を混乱この初心者のコーダーによって評価されるだろう!

答えて

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'); 
+0

ありがとうございました!これは、管理バックエンドを介して製品を追加するときには完全に機能しますが、私がやっているようにプログラムをプログラムで追加するときは起動しません。私は、オブジェクトの用語(製品タグ)が投稿が保存された後に追加されているため、これは推測していますか?私は 'save_post'の代わりに 'set_object_terms'アクションを使用しようとしましたが、これはうまくいくようですが、最初のタグに関連するカテゴリーだけが追加されます。何か案は? –

+0

お待ちください、あなたはプログラムでそれをやっていると言いました。その場合、フィルタをまったく使用する必要はありません。 wp_insert_post()の使用の後にコードを追加してください。 –

+0

もちろん、今言ったことは完璧です。なぜ私は最初にそれをやっていると考えていなかったのか分かりません!ああ、あなたのお手伝いをしてくれてありがとう! –

関連する問題