首页 > 解决方案 > 如何检查 WooCommerce 产品是否属于特定类别并在特定挂钩处回显图像?

问题描述

我创建了一个do_action('after_product_tabs)钩子,希望以编程方式在特定产品类别下回显图像,但我遇到了一个错误。我可以呼出 adiv作为对动作钩子的测试,但我的条件逻辑被打破了。任何帮助将不胜感激:

这是功能:


function after_product_tabs() {
    do_action('after_product_tabs'); //creates the action hook
};

function display_prewired_image() {
    
    echo '<div class="test" style="clear: both;">'.$home_url.'</div>'; // This prints!
    
    if( has_term( 'strat_pickups', 'product_cat' ) ) {
        echo' <p>DEBUG ME</p>'; // This breaks
    }
}

add_action('after_product_tabs', 'display_prewired_image');

我也试过:

1.) 传入全局变量:

function display_prewired_image() {
    global $product;
    $prod_id = $product->get_id();

    if( has_term( 'strat_pickups', 'product_cat', $prod_id ) ) {
        echo' <p>DEBUG ME</p>';
    }
}

2.)将条件逻辑从产品类别更改为is_single()有效,所以我知道我的问题在以下逻辑范围内strat_pickups

function display_prewired_image() {
    global $product;
    
    if ( is_a( $product, 'WC_Product' ) ) {
        // Get product ID
        $prod_id = $product->get_id();
        
        if( is_single('354') ) {
            echo '<h1 style="red!important; clear: both;">DEBUG ME</h1>';
        }
    } else {
        echo 'No product found!';
    }
}
add_action( 'after_product_tabs', 'display_prewired_image' );

有关更多信息,我正在自定义 Woocommerce 中的 tabs.php 模板。那将无法访问 $product 变量吗?

标签: phpwordpresswoocommerce

解决方案


试试这个,全局$product丢失

function display_prewired_image() {
    global $product;
    
    if ( is_a( $product, 'WC_Product' ) ) {
        // Get product ID
        $prod_id = $product->get_id();
        
        if ( has_term( 'strat_pickups', 'product_cat', $prod_id ) ) {
            echo 'DEBUG ME';
        } else {
            echo 'Category not found!';
        }
    } else {
        echo 'No product found!';
    }
}
//add_action( 'after_product_tabs', 'display_prewired_image' );
add_action( 'woocommerce_before_add_to_cart_form', 'display_prewired_image' );
add_action( 'woocommerce_after_single_product', 'display_prewired_image' );

推荐阅读