WooCommerce 3.7へアップデート後に、商品にclassが付与されていない件の対応

Pocket

WooCommerceで商品一覧を出すときに、li の各productにcssクラスを付与していた(post_class hookを利用)のに、WooCommerceをアップデート後、使えなくなっていた。

このclassを使ってfilterしていたので、これが消えるとまずい。

原因

調査したところ、WooCommerceプラグインのこの部分の変更が原因でした(最下部):

wp-plugin-api.com バージョン間ファイル比較

改修前:

add_filter( 'post_class', 'tbs_product_class', 10, 3 );
function tbs_product_class( $classes, $class, $post_id ){
    if( in_array( 'product', $classes ) ){
        $concerns = get_the_terms( $post_id, 'product_concerns' );
        if( $concerns ){
            foreach( $concerns as $concern ){
                $classes[] = 'product_concern_' . $concern->term_id;
            }
        }
    }
    return $classes;
}

改修後 (WooCommerce 3.7対応):

add_filter( 'woocommerce_post_class', 'tbs_product_class', 30, 2 );
function tbs_product_class( $classes, $product ){

    // product post id: $product->get_id()
    if( in_array( 'product', $classes ) ){
        $concerns = get_the_terms( $product->get_id(), 'product_concerns' );
        if( $concerns ){
            foreach( $concerns as $concern ){
                $classes[] = 'product_concern_' . $concern->term_id;
            }
        }
    }
    return $classes;
}

 

たしかに、post_class が使われているプラグイン一覧に、WooCommerce 3.7.* が入っていない。

この記事を書いた人