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

时间:2019-04-05 21:01:23

标签: php arrays wordpress woocommerce product

在我的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);

1 个答案:

答案 0 :(得分: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文件中。经过测试,可以正常工作。