function my_woocommerce_placeholder_img_handler( $image_html, $size, $dimensions ){
$image_html = ... Тут Ваш код который сформирует разметку ;
return $image_html; //обязательно нужно вернуть значение.
}
add_filter( 'woocommerce_placeholder_img', 'my_woocommerce_placeholder_img_handler', 10, 3 );
woocommerce_placeholder_img
и сформируйта заново Ваш вывод как Вам требуется вызывая в нужном месте productPicture SelectionChange
. Оно происходит в аккурат как изменится значение ячейки и передает объект Range измененной ячейки. далее можно работать на Ваше усмотрение.Application.EnableEvents = False
. Помните, что в конце функции обработчика надо сключить события обратно.SelectionChange
. woocommerce_order_item_meta_end
есть пример использования, тык /**
* Crop and correct size of image and save it in temp file
*
* @since 1.0.0
* @param string $file_name The file name that need to corrected.
*/
private function crop_image( $file_name ){
// load image
$orig_img = $this->image_create_from_any($file_name);
if ( !$orig_img ) { return; }
// crop white color arround image data
$cropped_img = imagecropauto($orig_img , IMG_CROP_THRESHOLD, null, 16777215);
//Get image width / height
$crp_w = ImageSX($cropped_img);
$crp_h = ImageSY($cropped_img);
//calculate target ratio
$crp_ratio = $crp_h / $crp_w;
//calculate new sizes
if ( $crp_ratio < $this->options_general['ratio'] ) {
$new_h = $crp_w * $this->options_general['ratio'];
$new_w = $crp_w;
$dst_x = 0;
$dst_y = ($new_h - $crp_h) / 2;
} else {
$new_h = $crp_h;
$new_w = $crp_h / $this->options_general['ratio'];
$dst_x = ($new_w - $crp_w) / 2;
$dst_y = 0;
}
// create canvas and fill it with white color
$canvas = imagecreatetruecolor($new_w, $new_h);
$white = imagecolorallocate($canvas, 255, 255, 255);
imagefilledrectangle($canvas, 0, 0, $new_w, $new_h, $white);
// сливаем картинки (по высоте убираем 1 пиксель т.к. функция обрезки imagecropauto оставляет черную полосу в 1 пиксель снизу)
imagecopyresampled($canvas, $cropped_img, $dst_x, $dst_y, 0, 0, $crp_w, $crp_h-1, $crp_w, $crp_h-1);
if ( $this->options_general['crop-large'] ) {
$new_h2 = $this->options_general['height'];
$new_w2 = $this->options_general['width'];
$canvas2 = imagecreatetruecolor($new_w2, $new_h2);
imagecopyresampled($canvas2, $canvas, 0, 0, 0, 0, $new_w2, $new_h2, $new_w, $new_h);
imagedestroy($canvas);
} else {
$canvas2 = $canvas;
}
$pi = pathinfo($file_name);
$tmp_path = $pi['dirname'] . '/last_cropped_img.jpg';
imagejpeg($canvas2, $tmp_path);
imagedestroy($cropped_img);
imagedestroy($orig_img);
imagedestroy($canvas2);
return array('name' => $pi['basename'], 'path' => $tmp_path);
}
/**
* Create a virtual image from image file.
*
* @param string $filepath
* @return descriptor of image
*/
private function image_create_from_any($filepath) {
$type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize()
$allowedTypes = array(
1, // [] gif
2, // [] jpg
3, // [] png
6 // [] bmp
);
if (!in_array($type, $allowedTypes)) {
return false;
}
switch ($type) {
case 1 :
$im = imagecreatefromgif($filepath);
break;
case 2 :
$im = imagecreatefromjpeg($filepath);
break;
case 3 :
$im = imagecreatefrompng($filepath);
break;
case 6 :
$im = imagecreatefrombmp($filepath);
break;
}
return $im;
}
но вот в карточке товара вообще вариации пропали
Как можно пофиксить?
Можно, конечно.
Собственно у Вас уже все есть,
Вам нужно получить количество всех товаров в корзине поделить нацело на 3 получите количество групп (т.е. количество бесплатных товаров)
Далее в цикле выбираете самые дещевые товары в количестве бесплатных, и соммируете их цены. получаете размер скидки , которую и применяете.
Это все можно написать в этой же функции.
там есть еще привязка к категориям, но Вам похоже она не нужна , можете удалить.
Успехов