Свойство WooCommere product_type возвращается просто, когда оно является переменным

Я борюсь с циклом и простыми / переменными типами товаров в 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>';

Все (идентификаторы, href и т. Д.) Работает (правильно?), Кроме $product->product_type, который возвращается просто даже когда это переменная.

За исключением одного продукта, который возвращает переменную. Я просто не могу понять почему, так как он имеет те же настройки, что и остальные.

Выполнение условия одного / переменного в одном продукте работает нормально.

Я уже пробовал другие методы, такие как has_child() и они тоже терпят неудачу.

Что здесь может пойти не так? Есть идеи, с чего начать?


РЕДАКТИРОВАТЬ: get_type() вместо product_type() ведет себя так же. add_to_cart_text() также терпит неудачу, так что это может быть что-то еще.

1

Решение

Поскольку свойства WooCommerce 3+ WC_Product не могут быть доступны напрямую:

  • $product->id заменяется на: $product->get_id()
  • $product->product_type заменяется $product->get_type()

Заключение: Шаблоны WooCommerce в твоей теме устарели.
Вы можете проверить это в Настройках WooCommerce> Статус: в конце страницы в разделе «Шаблоны» вы сможете увидеть какие шаблоны устарели

Во-первых, вы должны обновить вашу тему до последней версии, которая должна быть совместима с WooCommerce 3.1+

Официальная документация: Структура шаблона + переопределение шаблонов через тему


Попытка решить вашу проблему:

в sprintf() функция, при сравнении кода что у вас есть с оригинальным кодом шаблона WooCommerce (loop/add-to-cart.php), единственная разница между ними заключается в том, что ваш код удаляется 'ajax_add_to_cart' от class атрибут.
Все остальные вещи одинаковы.

Так что есть 2 способа это решить (используя последний актуальный код шаблона woocommerce):

1. По общим настройкам WooCommerce > Продукты> Дисплей.

Вам нужно запрещать «Включить AJAX добавить в корзину кнопки на архивах» и сохранить (если необходимо):
введите описание изображения здесь

И вам просто нужно добавить в исходный код шаблона 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+ и работает для всех типов продуктов.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector