gpt4 book ai didi

php - WooCommerce的product_type属性在产品可变时返回简单

转载 作者:行者123 更新时间:2023-12-02 04:33:33 24 4
gpt4 key购买 nike

我在Woocommerce 3.1.2中努力寻找一个循环和一个简单/可变产品类型。所有循环都经过 loop/add-to-cart.php ,这是我的主题中自定义的(不是我自己制作的),其内容如下:

global $product;

echo '<li class="cart_view">';
echo apply_filters( 'woocommerce_loop_add_to_cart_link',
sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="button %s product_type_%s">%s</a>',
esc_url( $product->add_to_cart_url() ),
esc_attr( $product->id ),
esc_attr( $product->get_sku() ),
esc_attr( isset( $quantity ) ? $quantity : 1 ),
$product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
esc_attr( $product->product_type ),
esc_html( $product->add_to_cart_text() )
),
$product );
echo '</li>';

除了 $product->product_type之外,其他所有东西(ID,href等)都可以正常工作(即使正确),即使 has_child()变了,返回的也很简单。

除了一种产品之外,该产品返回变量。我只是不明白为什么,因为它具有与其他人相同的设置。

在单个产品中执行单个/可变条件可以正常工作。

我已经尝试过其他方法,例如 get_type(),它们也失败了。

这里可能出什么问题了?关于从哪里开始的任何想法?

编辑: product_type()而不是 add_to_cart_text()的行为相同。 ojit_code也失败,因此可能是其他原因。

最佳答案

由于无法直接访问WooCommerce 3+ WC_Product属性:

  • $product->id替换为:$product->get_id()
  • $product->product_type替换为$product->get_type()

  • 结论:主题中的WooCommerce模板 已过时
    您可以在WooCommerce设置>状态中检查:在页面的"template"部分的末尾,您将能够看到 哪些模板已过期

    首先,您应该将主题更新为必须与WooCommerce 3.1+兼容的最新版本

    官方文档: Template Structure + Overriding Templates via a Theme

    尝试解决您的问题:

    sprintf() 函数中,当将您拥有的代码与原始WooCommerce模板代码( loop/add-to-cart.php )比较时, ,它们之间的唯一区别是您的代码是从'ajax_add_to_cart'属性中删除class。其他所有东西都一样。

    ,所以有两种方法可以解决(使用最新的woocommerce模板代码):

    1.通过WooCommerce常规设置>产品>显示。

    您需要禁用“在文件上启用AJAX添加到购物车按钮”并保存(如有必要):
    enter image description here

    您只需要在WooCommerce原始模板代码中添加html <li>标签即可:
    if ( ! defined( 'ABSPATH' ) ) {
    exit;
    }

    global $product;

    echo '<li class="cart_view">';

    echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
    esc_url( $product->add_to_cart_url() ),
    esc_attr( isset( $quantity ) ? $quantity : 1 ),
    esc_attr( $product->get_id() ),
    esc_attr( $product->get_sku() ),
    esc_attr( isset( $class ) ? $class : 'button' ),
    esc_html( $product->add_to_cart_text() )
    ),
    $product );

    echo '</li>';

    2.另一种方法通过这种方式使用PHP函数str_replace():

    if ( ! defined( 'ABSPATH' ) ) {
    exit;
    }

    global $product;

    echo '<li class="cart_view">';

    echo apply_filters( 'woocommerce_loop_add_to_cart_link',
    sprintf( '<a rel="nofollow" href="%s" data-quantity="%s" data-product_id="%s" data-product_sku="%s" class="%s">%s</a>',
    esc_url( $product->add_to_cart_url() ),
    esc_attr( isset( $quantity ) ? $quantity : 1 ),
    esc_attr( $product->get_id() ),
    esc_attr( $product->get_sku() ),
    esc_attr( isset( $class ) ? str_replace(' ajax_add_to_cart', '', $class) : 'button' ),
    esc_html( $product->add_to_cart_text() )
    ),
    $product );

    echo '</li>';

    这已在WooCommerce 3.1+版上进行了测试,并且适用于所有产品类型。

    关于php - WooCommerce的product_type属性在产品可变时返回简单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46158357/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com