Здравствуйте! Вопрос решен?
Здравствуйте. Вопрос не решен. На одном из форумов посоветовали обратиться к специалистам на платной основе.
что-то вроде этого хотели? Пример
-
Ответ изменён 7 лет, 1 месяц назад пользователем
alashgrand.
Хотели вывести цвета, но чтобы каждый из них вел на страницу «связанного» товара (другой URL). А вот как связать все это автоматически — вопрос.
Попробуйте вставить в function дочерней темы
<?php
/**
* @version 1.0
*/
/*
Plugin Name: Hummel Color Upsells
Description: Плагин для отображения товаров других расцветок товара.
Author: Alashgrand
Version: 1.0
Author URI:
*/
class Hummel_Color_Upsells_Plugin {
private static $notices = array();
public static function init() {
register_activation_hook( __FILE__, array( __CLASS__, 'activate' ) );
register_deactivation_hook( __FILE__, array( __CLASS__, 'deactivate' ) );
register_uninstall_hook( __FILE__, array( __CLASS__, 'uninstall' ) );
add_action( 'init', array( __CLASS__, 'wp_init' ) );
add_action( 'admin_notices', array( __CLASS__, 'admin_notices' ) );
}
public static function wp_init() {
$active_plugins = get_option( 'active_plugins', array() );
$woocommerce_is_active = in_array( 'woocommerce/woocommerce.php', $active_plugins );
if ( !$woocommerce_is_active ) {
self::$notices[] = '<div class="error"><p><strong>Hummel Orders Exporter Plugin</strong> требуется наличие активнокго плагина Woocommerce.</p></div>';
} else {
// добавляем обработчик
add_action( 'woocommerce_before_add_to_cart_form', array( __CLASS__, 'display_color_upsells' ), 10 );
}
}
/**
* Выводит на фронт миниатюру этого же товар в другой расцветке
*/
public static function display_color_upsells() {
global $woocommere, $product;
//error_log(__METHOD__ . PHP_EOL , 3, WP_PLUGIN_DIR . '/hummel-color-upsells/log.log');
$sku = trim($product->get_sku());
// исключаем наборы и товары без артикулов
if ( !$sku || 'bndl' == substr( $sku, 0, 4 ) ) { return; }
$article = substr( $sku, 0, 7 );
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'numberposts' => -1,
'meta_query' => array(
array(
'key' => '_sku',
'value' => $article,
'compare' => 'LIKE'
))
) ;
$clrposts = get_posts($args);
if ( $clrposts ){
echo '<p style="margin: 0px;"><strong>Цветовая палитра</strong></p>';
echo '<div class="color-upsells" style="display:flex; display:-ms-flexbox;">';
foreach( $clrposts as $clrpost ){
$prd = wc_get_product( $clrpost );
$color = substr($prd->get_sku(), 8, 4);
$imgcss = 'border: 0px solid black;';
if ( $sku == $prd->get_sku() ) { $imgcss = 'border: 1px solid black;'; }
$imgcss = $imgcss . ' margin: 2px; padding: 2px;';
$html = '<a href="' . get_permalink( $clrpost ) .
'" title="' . $color .
'" alt="' . esc_attr( get_the_title( $clrpost ) ) .
'">' . get_the_post_thumbnail($clrpost, array(45,45), array('style' => $imgcss) ) .
'</a>';
echo $html;
}
echo '</div>';
}
}
/**
* Plugin display notices.
*
*/
public static function admin_notices() {
if ( !empty( self::$notices ) ) {
foreach ( self::$notices as $notice ) {
echo $notice;
}
}
}
/**
* Plugin activation work.
*
*/
public static function activate() {
}
/**
* Plugin deactivation.
*
*/
public static function deactivate() {
}
/**
* Plugin uninstall.
*
*/
public static function uninstall() {
}
}
Hummel_Color_Upsells_Plugin::init();
К сожалению, попробую этот код только вечером. Спасибо большое за помощь!
Скажите, а как у вас определяются товары одной модели?
По моей схеме сравнивается одинаковые значения в атрибуте (название), потом выводятся разные значения цветов из другого атрибута.
Попробовал. Я так понял, он выводит список товаров, имеющий схожий артикул (SKU). Так как дублировать их нельзя, то не совсем корректно работает плагин. Может я не так его использую.
Назначаем одному товару артикул «Bu-66», второму «Bu-66-2». Первый в цветовой палитре выводит 2 значения, другой одно (свое же).
Подскажите, что можно сделать в данном случае?
Попробуй
1. вставь в function дочерней темы:
remove_action(‘woocommerce_after_single_product_summary’, ‘woocommerce_upsell_display’, 15);
add_action(‘woocommerce_single_product_summary’, ‘woocommerce_upsell_display’, 15);
2. в пользовательский CSS:
.upsells .products .item-image img {
border: 1px solid #e8e8e8;
}
.upsells .products .product .item-info {
position: relative;
display: none;
}