当产品有多个类别时,获取主要父级产品类别
问题描述:
在我公司最初由其他人设置的Wordpress网站上工作。 Here's a product page在这里你可以看到我所参考的东西...当产品有多个类别时,获取主要父级产品类别
“皮肤状况”,“皮肤类型”和“养生”部分是为我们创建的。我现在试图复制行为来创建“As Seen In”部分。他们通过WooCommerce类别工作 - 在产品页面上我们有很多类别的列表,我们检查那些对应的类别,并显示图标。
最终结果在functions.php和style.css中完成。使用的PHP如下:
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的每个部分调用一个父类别吗?而不是他们都加载和去“display: none;
”?
小的视觉类别,如果有帮助:
谢谢!
答
UPDATE:为避免你必须添加
global $post;
白屏。或者你也可以使用global $product;
和$product->id
(而不是$post->ID
)。
获取父类(主要类别),你必须使用$term->parent
,这种方式:
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文件主题(或主题)或任何插件文件。
此代码已经过测试并可正常工作。
非常感谢您的帮助和及时回复! 我试图实现这一点,但不幸的是,当我尝试清理文件中的所有无关空格时,我的Wordpress正在向我投掷死亡的白色屏幕。 [这是我完整的函数.php](https://codeshare.io/a3y9Mg),但我得到WSOD,尽管没有语法错误,我可以看到。 – Olivia
@Olivia我已经测试并更新了代码......在开头处只有一点遗漏:'global $ post;'。 – LoicTheAztec
再次感谢您的帮助!我现在无法在周末访问服务器。更新了代码,谢天谢地没有白屏,但它仍然没有工作。每个部分都会出现,但图标不会显示,[如您在此处所见](http://topixpharm.com/product/sheer-physical-sunscreen-cream-spf-50/)。 [更新的功能。php文件在这里。](https://codeshare.io/a3y9Mg) – Olivia