2017-03-17 4 views
1

私の会社のWordpressサイトで働いていますが、元々誰かによって設定されています。 Here's a product pageあなたが私が参照しているものを見ることができます...商品に複数のカテゴリがある場合の主要な親商品カテゴリを取得

「スキンコンディション」、「スキンタイプ」、および「レジメン」セクションが作成されました。私は今、 "見られるように"セクションを作成する動作を複製しようとしています。それらはWooCommerceカテゴリを介して動作します - 商品ページにはカテゴリの大きなリストがあり、対応するものをチェックし、アイコンが表示されます。

最終結果はfunctions.phpとstyle.cssで実現します。

add_action('woocommerce_product_meta_end', 'skin_condition'); 

function skin_condition() { 

    echo '<div class="skin-icons">'; 
    echo '<div class="skin-condition-title"><h4>Skin Condition</h4></div>'; 

    if (is_product()){ 

     $terms = get_the_terms($post->ID, 'product_cat'); 

     foreach ($terms as $term){ 

      $category_name = $term->name; 
      $category_thumbnail = get_woocommerce_term_meta($term->term_id, 'thumbnail_id', true); 
      $image = wp_get_attachment_url($category_thumbnail); 

      echo '<div class="skin-condition">'; 
      echo '<img class="'.$term->slug.'" title="'.$category_name.'" src="'.$image.'">'; 
      echo '</div>'; 
     } 
    } 
    echo '</div>'; 
} 

これで、製品に適用されているすべてのカテゴリのサムネイルが取得されます。そして、CSSは、我々は、各セクションにはしたくないものを隠すために使用されます。

.skin-condition img.glycolic, .skin-condition img.citrix, .skin-condition img.replenix, 
.skin-condition img.glycolix, .skin-condition img.srs, .skin-condition img.solvere, 
.skin-condition img.resurfix, .skin-condition img.rebrightalyze, .skin-condition img.benzaderm, 
.skin-condition img.acne-regimen, .skin-condition img.cleansetone, .skin-condition img.hydrate, 
.skin-condition img.prevent, .skin-condition img.protect, .skin-condition img.repair, 
.skin-condition img.antioxidants, .skin-condition img.body-care, .skin-condition img.cleansers, 
.skin-condition img.exfoliators, .skin-condition img.eye, .skin-condition img.glycolic, 
.skin-condition img.kits-systems, .skin-condition img.masques-peels, .skin-condition img.masques-peels-specialty, 
.skin-condition img.moisturizers, .skin-condition img.retinols, .skin-condition img.sunscreens, 
.skin-condition img.toners, .skin-condition img.new, .skin-condition img.dry, 
.skin-condition img.normal, .skin-condition img.oily, .skin-condition img.sensitive, 
.skin-condition img.dermatopix, .skin-condition .gly-sal, .skin-condition .elite, 
.skin-condition .peels-specialty, .skin-condition .glycolix-elite, .skin-condition .best-sellers, 
.skin-condition .replenix-acne-solutions, .skin-condition .press-mentions { 
    display: none; 
} 

だから私はそのCSSを避ける​​ために、これを行う方法がなければならない把握します。
PHPの各セクションで親カテゴリを1つだけ呼び出すことはできますか?それらのすべての代わりに読み込まれ、 "display: none;"に行く?

リトルカテゴリを視覚的にそれは場合に役立ちます:

Little visual of the categories if it helps.

ありがとうございます!

答えて

0

UPDATE:あなたがglobal $post;を追加する必要が白い画面を避けるために。別の方法としては、(代わりに$post->IDの)global $product;$product->idを使用することができます。

add_action('woocommerce_product_meta_end', 'skin_condition'); 
function skin_condition() { 

    global $post; // or global $product; and $product->id in get_the_terms() function 

    if (is_product()){ 

     echo '<div class="skin-icons">'; 
     echo '<div class="skin-condition-title"><h4>Skin Condition</h4></div>'; 

     $terms = get_the_terms($post->ID, 'product_cat'); 

     // First loop 
     foreach ($terms as $term){ 

      // We target the child categories to get the parent ones (based on your screen shot) 
      if($term->parent != 0){ 
       // Storing the parent term objects 
       $parent_terms_ids[] = $term->parent; 
      } 
     } 

     // Second loop 
     foreach ($parent_terms_ids as $term_id){ 

      // get the object term 
      $parent_term = get_term($term_id, 'product_cat'); 

      // Only Main parent terms 
      if($parent_term->parent == 0){ 

       $category_thumbnail = get_woocommerce_term_meta($term_id, 'thumbnail_id', true); 
       $term_image = wp_get_attachment_url($category_thumbnail); 

       echo '<div class="skin-condition">'; 
       echo '<img class="'.$parent_term->slug.'" title="'.$parent_term->name.'" src="'.$term_image.'">'; 
       echo '</div>'; 
      } 
     } 
     echo '</div>'; 
    } 
} 

コードは、あなたのアクティブな子のfunction.phpファイルに行く:

親カテゴリ(メインカテゴリ)を取得するには、$term->parent、この方法を使用する必要がありますテーマ(またはテーマ)、または任意のプラグインファイルでも使用できます。

このコードはテスト済みであり、動作します。

+0

お手数をおかけしていただきありがとうございます。 私はこれを今実装しようとしていますが、残念なことに、ファイル内の無関係な空白をすべて取り除こうとすると、私のWordpressで死の白い画面が表示されてしまいます。 [これは私の完全なfunctions.phpです](https://codeshare.io/a3y9Mg)をクリーンアップしようとしたが、私は見ることのできる構文エラーがなくてもWSODを取得します。 – Olivia

+0

@Olivia私はコードをテストして更新しました...ちょっとしたことが冒頭にありませんでした: 'global $ post;'。 – LoicTheAztec

+0

もう一度お手伝いしてくれてありがとう!週末にサーバーにアクセスできず、今すぐ戻ってきました。コードを更新し、ありがたいことに白い画面は表示されませんが、まだまだ機能していません。各セクションは表示されますが、アイコンは表示されません(ここでは分かります)(http://topixpharm.com/product/sheer-physical-sunscreen-cream-spf-50/)。 [更新された機能。php file here](https://codeshare.io/a3y9Mg) – Olivia

関連する問題