Вопрос или проблема
Привет, коллеги по Stack Exchange! У меня, похоже, возникла проблема с использованием плагина YITH Wishlist для добавления функции списка желаемого к моим продуктам в создаваемой мною пользовательской теме. Когда я навожу курсор на иконку сердца на каждом продукте (т.е. иконку списка желаемого), я вижу один и тот же идентификатор продукта (66) для каждого продукта в URL внизу браузера. Вот код, который я использовал для создания этой таблицы:
<table class="specs-table">
<tr class="t-row spec-headings">
<th class="t-header spacer"></th>
<!-- ...Другие заголовки... -->
<th class="t-header"></th>
</tr>
<?php
$connection = mysqli_connect("localhost", "root", "root", "local");
$sql = "
SELECT * FROM wp_posts
WHERE post_status="publish"
AND post_type="product"
";
$result = mysqli_query($connection, $sql);
if(mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_assoc($result)) {
// Извлечение пользовательского поля ACF непосредственно из базы данных
$post_id = $row['ID'];
//Объект продукта WooCommerce
$product = wc_get_product( $post_id );
// Спецификации продукта
$partNumber = get_post_meta( $post_id, 'acf_part_number', true);
/* ...Больше спецификаций... */
?>
<tr class="t-row specs">
<td class="t-value p_thumb"><img class="listing-image"
<!-- ...Больше столбцов таблицы... -->
<td class="t-value pa">
<!-- Добавить в корзину -->
<?php
echo apply_filters( 'woocommerce_loop_add_to_cart_link',
sprintf( '<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button %s product_type_%s">%s</a>',
esc_url( $product->add_to_cart_url() ),
esc_attr( $product->get_id() ),
esc_attr( $product->get_sku() ),
$product->is_purchasable() ? 'add_to_cart_button' : '',
esc_attr( $product->get_type() ),
esc_html( $product->add_to_cart_text() )
),
$product );
?>
<!-- Добавить в список желаемого -->
<div class="wishlist-shortcode">
<?php echo do_shortcode("[yith_wcwl_add_to_wishlist wishlist_url="http://wj-parts.local/my-wishlist/"]");
?>
</div>
</td>
</tr>
<?php
}
} else {
?>
<tr>
<td colspan="3">Данные недоступны</td>
</tr>
<?php
}
?>
</table>
Больше кода доступно здесь.
Я попробовал несколько способов, чтобы исправить эту проблему. Один из них заключался в изучении инженерии плагина, другой – в поисках в Google. Я также попытался использовать эту PHP функцию (которая, конечно, только выводила текст):
<?php
$wishlist = file_get_contents(
"content-single-product.php",
true,
null,
1910,
112
);
echo $wishlist;
?>
Я понимаю, что не использование этого шорткода плагина в цикле продуктов, вероятно, не является стандартным способом его использования. Однако ситуация не оставила мне другого выбора (если, конечно, я не разработаю функцию списка желаемого сам). Любые советы будут очень ценными.
Вот некоторая основная информация о среде:
- Конструктор сайтов: WordPress 6.7.1 + WooCommerce
- Сервер: Nginx (с использованием Local)
- Язык программирования: PHP 8.1.23
- Используемый плагин: YITH Wishlist
- Операционная система: ZorinOS Lite 16.3
Ответ или решение
Проблема дублирования ID продукта в плагине YITH Wishlist
Здравствуйте, уважаемые коллеги!
Вы столкнулись с ситуацией, когда при использовании плагина YITH Wishlist для добавления функции списка желаемого в вашей кастомной теме отображается один и тот же ID продукта (66) для всех товаров. Вместо корректного отображения уникальных идентификаторов для каждого товара, плагин функционирует некорректно. Давайте разберемся, возможные причины данной проблемы и способы её устранения.
Основные моменты
-
Код таблицы товаров: В вашем коде вы используете цикл для отображения товаров. Однако критически важно правильно инициализировать элементы вашего HTML-кода, которые будут работать с плагином YITH Wishlist.
-
Шорткоды: Вы уже заметили, что использование шорткодов в пределах вашего цикла может оказаться неэффективным. Ваша строка:
echo do_shortcode("[yith_wcwl_add_to_wishlist wishlist_url='http://wj-parts.local/my-wishlist/']");
возвращает интерфейс для добавления в список желаемого, но без указания корректного ID продукта.
Решение проблемы
Чтобы каждый товар отображал свой уникальный ID в списке желаемого, вам необходимо изменить подход к вызову шорткода YITH Wishlist. Необходимо передать ID текущего продукта как параметр шорткода. Ваш исправленный код может выглядеть следующим образом:
<div class="wishlist-shortcode">
<?php echo do_shortcode("[yith_wcwl_add_to_wishlist id='$post_id' wishlist_url='http://wj-parts.local/my-wishlist/']"); ?>
</div>
Обратите внимание на то, что мы добавили id='$post_id'
в шорткод. Это позволит каждому товару использовать свой уникальный ID, что должно решить проблему.
Проверка совместимости
Проверьте совместимость вашей темы с текущей версией плагина YITH Wishlist. Иногда обновление плагина или ошибки совместимости могут вызывать подобные проблемы.
Логирование ошибок
Рекомендуется включить режим отладки в WordPress, добавив следующие строки в файл wp-config.php
:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Это поможет вам увидеть возможные ошибки и предупреждения, которые могут указывать на источники проблем.
Заключение
Использование плагина YITH Wishlist требует корректной интеграции с вашими товарами. Убедитесь, что при вызове шорткодов передаются правильные параметры (в данном случае ID товара). Обновите ваш код в соответствии с рекомендациями, приведёнными выше, и ошибка с одинаковым отображением ID продуктов будет устранена. Если проблема не решится, рекомендуется обратиться к документации плагина или технической поддержке разработчиков.
Надеюсь, эта информация окажется вам полезной! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их. Удачи с вашим проектом!