声明第二个数组结果时,WooCommerce函数会中断

问题描述 投票:2回答:1

在我的WooCommerce项目中,在functions.php文件中,我编写了以下函数,该函数在WooCommerce商店页面加载所有产品时运行。我找到了问题的根源,但无法弄清楚它为什么会发生。

不知何故,只有一个可以存在:$prodVars$prodVar$prodPrices。如果所有三个都处于活动状态(取消注释),则商店页面循环会中断并仅显示第一个项目。如果我评论其中两个变量,循环运行完美并显示所有信息。

有什么东西我误解和使用不正确吗?

function get_desc(){
    $prodID = get_the_ID();
    $product = wc_get_product($prodID);
    $product2 = wc_get_product($prodID);
    $prodDesc = $product->get_short_description();
    echo "<div class='prodDetWrap'>";
    echo "<div class='prodVariations'>";

    $prodVars = $product->get_attributes();

    $prodVar = $product->get_variation_attributes();

    $prodPrices = $product2->get_variation_prices();

        $prodPrice = $prodPrices['price'];
    $prod1Price = current($prodPrice);
    $prodCnt = 0;

    echo "</div>";
    if($prodDesc !== "NULL"){
        echo "<p>";
        echo $prodDesc;
        echo "</p>";
    }else{
        ;
    }

    echo "<p class='disclaimer'>Er varen ikke på lager, bestiller vi dem hjem til jer.</p>";
    echo "</div>";
}

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10);
add_action( 'woocommerce_after_shop_loop_item_title', 'get_desc', 12);
php arrays wordpress woocommerce product
1个回答
2
投票

您的代码中存在多个错误,例如:

  • 你使用WC_Product获得wc_get_product()对象的2倍。相反,你应该调用可用的全局WC_Product对象。
  • 变量产品和其他产品类型之间的细分是强制性的,因为WC_Variable_Product方法会在其他产品类型上引发错误,例如: get_variation_attributes()方法, get_variation_prices()方法,
  • 应定义$prodDesc变量,不使用$prodCnt
  • else{ ; }会抛出错误。

您应该在测试代码时启用调试,使用安装的根define( 'WP_DEBUG', true );文件中的wp-config.php

请尝试以下方法:

remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );

add_action( 'woocommerce_after_shop_loop_item_title', 'get_desc', 12 );

function get_desc(){
    global $product;

    if( ! is_a( $product, 'WC_Product') ) {
        $product = wc_get_product(get_the_ID());
    }

    $short_description = $product->get_short_description();

    echo "<div class='prodDetWrap'>
    <div class='prodVariations'>";

    $product_attributes = $product->get_attributes();

    // Only WC_Variable_Product methods (for variable products only)
    if( $product->is_type('variable') ) {
        $variation_attr   = $product->get_variation_attributes();
        $variation_prices = $product->get_variation_prices();

        $variation_price  = reset($variation_prices['price']);
    }

    $prodCnt = 0;

    echo "</div>";

    if ( isset($prodDesc) && $prodDesc !== "NULL") {
        echo "<p>";
        echo $prodDesc;
        echo "</p>";
    } else {
        echo '';
    }

    echo "<p class='disclaimer'>Er varen ikke på lager, bestiller vi dem hjem til jer.</p>
    </div>";
}

代码位于活动子主题(或活动主题)的function.php文件中。经过测试和工作。

© www.soinside.com 2019 - 2024. All rights reserved.