wordpress WooCommerce -获取产品页面分类

zz2j4svz  于 2022-12-11  发布在  WordPress
关注(0)|答案(6)|浏览(342)

对于我的WC产品页面,我需要在body标签中添加一个类,这样我就可以执行一些自定义样式。

function my_add_woo_cat_class($classes) {

    $wooCatIdForThisProduct = "?????"; //help!

    // add 'class-name' to the $classes array
    $classes[] = 'my-woo-cat-id-' . $wooCatIdForThisProduct;
    // return the $classes array
    return $classes;
}

//If we're showing a WC product page
if (is_product()) {
    // Add specific CSS class by filter
    add_filter('body_class','my_add_woo_cat_class');
}

...但我如何获得WooCommerce猫ID?

i2byvkas

i2byvkas1#

一个WC产品可以不属于任何WC类别,也可以属于一个或多个WC类别。假设您只想获得一个WC类别ID。

global $post;
$terms = get_the_terms( $post->ID, 'product_cat' );
foreach ($terms as $term) {
    $product_cat_id = $term->term_id;
    break;
}

请查看WooCommerce插件的“templates/single-product/”文件夹中的meta.php文件。

<?php echo $product->get_categories( ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', sizeof( get_the_terms( $post->ID, 'product_cat' ) ), 'woocommerce' ) . ' ', '.</span>' ); ?>
nbewdwxp

nbewdwxp2#

$product->get_categories()自3.0版起已过时!请改用wc_get_product_category_list
https://docs.woocommerce.com/wc-apidocs/function-wc_get_product_category_list.html

dz6r00yl

dz6r00yl3#

我从我的主题目录下的woocommerce文件夹中的content-single-popup.php中剥离了这行代码。

global $product; 
echo $product->get_categories( ', ', ' ' . _n( ' ', '  ', $cat_count, 'woocommerce' ) . ' ', ' ' );

由于我的主题,我正在努力已经集成了woocommerce在它,这是我的解决方案。

4jb9z9bj

4jb9z9bj4#

我正在使用MyStile主题,我需要在搜索结果页面中显示产品类别名称。我将此函数添加到了我的子主题functions.php中
希望对其他人有帮助。

/* Post Meta */

if (!function_exists( 'woo_post_meta')) {
    function woo_post_meta( ) {
        global $woo_options;
        global $post;

        $terms = get_the_terms( $post->ID, 'product_cat' );
        foreach ($terms as $term) {
            $product_cat = $term->name;
            break;
        }

?>
<aside class="post-meta">
    <ul>
        <li class="post-category">
            <?php the_category( ', ', $post->ID) ?>
                        <?php echo $product_cat; ?>

        </li>
        <?php the_tags( '<li class="tags">', ', ', '</li>' ); ?>
        <?php if ( isset( $woo_options['woo_post_content'] ) && $woo_options['woo_post_content'] == 'excerpt' ) { ?>
            <li class="comments"><?php comments_popup_link( __( 'Leave a comment', 'woothemes' ), __( '1 Comment', 'woothemes' ), __( '% Comments', 'woothemes' ) ); ?></li>
        <?php } ?>
        <?php edit_post_link( __( 'Edit', 'woothemes' ), '<li class="edit">', '</li>' ); ?>
    </ul>
</aside>
<?php
    }
}

?>
cbeh67ev

cbeh67ev5#

<?php
   $terms = get_the_terms($product->ID, 'product_cat');
      foreach ($terms as $term) {

        $product_cat = $term->name;
           echo $product_cat;
             break;
  }
 ?>
ds97pgxw

ds97pgxw6#

要将自定义类添加到body标记,可以使用body_class挂钩。

要在产品页面上根据特定产品类别添加一个多个类别,您可以使用Wordpress has_term功能 (检查产品是否属于该特定产品类别)

为此,我创建了数组$classes_to_add,其中:

*key:它可以是产品类别id(或slug或名称)。或者是它们的数组。Read the documentation
*value:一个包含要添加到body标签的类的字符串。如果你想添加多个类,请创建一个包含多个值的字符串,用空格分隔(请看下面我的例子)

因此:

// adds a class to the body element based on the product category
add_filter( 'body_class', 'add_body_class_based_on_the_product_category' );
function add_body_class_based_on_the_product_category( $classes ) {

    // only on the product page
    if ( ! is_product() ) {
        return $classes;
    }

    // create an array with the ids (or slugs) of the product categories and the respective class (or classes) to add
    $classes_to_add = array(
        30          => 'class-1',
        'cat_slug'  => 'class-2 class-3',
        32          => 'class-4 class-5',
    );

    // if the product belongs to one of the product categories in the array it adds the respective class (or classes)
    foreach ( $classes_to_add as $product_cat => $new_classes ) {
        if ( has_term( $product_cat, 'product_cat', get_the_ID() ) ) {
             $classes[] = $new_classes;
        }
    }    

    return $classes;
}
  • 该代码已经过测试,可以正常工作。请将其添加到活动主题的functions.php.*

相关问题