Ответы пользователя по тегу WooСommerce
  • Отправка деталей заказа в телеграм WP Woocommerce (Хук woocommerce_new_order)?

    Kleindberg
    @Kleindberg
    Full stack
    Позвольте и свою лепту внести, вот обновлённый код для последних версий WooCommerce:

    add_action( 'woocommerce_new_order', 'send_order_data', 10, 2);
    function send_order_data( $order_id, $order ) {
    	
    	// Products array
    	$order_items = array();
    	foreach ( $order->get_items() as $item_id => $item ) {
    		if( $item->is_type( 'line_item' ) ) {
    			$product = $item->get_product();
    			$order_items[] = array(
    				'id' => $item->get_product_id(),
    				'name' => $item->get_name(),
    				'url' => get_permalink($product->get_id()),
    				'image' => get_the_post_thumbnail_url($item->get_product_id()),
    				'price' => $product->get_price(),
    				'quantity' => $item->get_quantity(),
    				'total' => $item->get_total(),
    			);	
    		}
    	}
    
    	// Order data
    	$data = array(
    		'id' => $order_id,
    		'first_name' => $order->get_billing_first_name(),
    		'last_name' => $order->get_billing_last_name(),
    		'company' => $order->get_billing_company(),
    		'address_1' => $order->get_billing_address_1(),
    		'address_2' => $order->get_billing_address_2(),
    		'city' => $order->get_billing_city(),
    		'state' => $order->get_billing_state(),
    		'postcode' => $order->get_billing_postcode(),
    		'country' => $order->get_billing_country(),
    		'email' => $order->get_billing_email(),
    		'phone' => $order->get_billing_phone(),
    		'items' => $order_items,
    		'shipping_method' => $order->get_shipping_method(),
    		'payment_method' => $order->get_payment_method_title(),
    		'ttn' => $order->get_transaction_id(),
    		'notes' => $order->get_customer_note(),
    		'cutomer_id' => $order->get_customer_id() ?: $order->get_user_id(),
    		'ip' => $order->get_customer_ip_address(),
    		'agent' => $order->get_customer_user_agent(),
    		'source' => $_SERVER['SERVER_NAME'],
    		'date_created' => date("Y-m-d H:i:s", strtotime($order->get_date_created())),
    		'date_modified' => date("Y-m-d H:i:s", strtotime($order->get_date_modified())),
    		'date_completed' => $order->get_date_completed() ? date("Y-m-d H:i:s", strtotime($order->get_date_completed())) : null,
    		'date_paid' => $order->get_date_paid() ? date("Y-m-d H:i:s", strtotime($order->get_date_paid())) : null,
    	);
    
    	$json = json_encode($data);
    	
    	// Путь к папке uploads
    	$uploads_dir = wp_upload_dir();
    
    	// Создаем путь к файлу (название файла может быть любым)
    	$file_path = $uploads_dir['basedir'] . '/order_'.$order_id.'.json';
    
    	// Записываем информацию в файл
    	file_put_contents($file_path, $json, FILE_APPEND | LOCK_EX);
    
    }


    Функция woocommerce_new_order теперь принимает два аргумента - номер заказа и сам объект заказ, а это очень упрощает работу с заказом. Приведённый код сохраняет информацию о заказе в json файл в папку uploads, но вы можете переписать его и сделать, например, POST отправку через wp_remote_post() или сохранять данные в базу данных с помощью wpdb.
    Ответ написан
    Комментировать
  • Из-за чего тема может отдавать часть на русском, часть на английском?

    Kleindberg
    @Kleindberg
    Full stack
    Добрый день!

    Хороший вопрос, вот мои подозрения, в чём может быть дело:
    1. Текст может быть жёстко прописан в самой теме или плагине (в файле PHP), поэтому его не видит Loco;
    2. Могут не совпадать текстовые домены (_e( 'Post', 'text-domain' );) из-за чего вы переводите не те плагины/темы или текст вообще отсутсвует/находится в другом шаблоне для перевода (pot файле). Бывает, что тема содержит встроенные плагины у которых отдельные файлы для перевода;
    3. Текст может генерироваться динамически, например JavaScript'ом или по API.
    4. В последних версиях WordPress переводы сначала берутся из папки /wp-content/languages, потом из папки с темой или плагином. А если установлен плагин Loco, то вообще в первую очередь переводы берутся из папки /wp-content/languages/loco, поэтому наверное есть смысл удалять/отключать плагин Loco после того, как вы завершите перевод, а все свои наработки хранить в папке /wp-content/languages/plugins или /wp-content/languages/themes в зависимости от того, что вы переводите


    Что можно попробовать:
    1. В меню Loco выберите нужную тему, далее кнопка Редактировать шаблон и кнопка Синхронизировать (чтобы обновить шаблон и строки для перевода). Если эта функция сделает только хуже и наоборот удалит все строки - просто не сохраняйте изменения.
    2. Проверить ещё раз файлы и понять как именно выводится та или инная фраза: через перевод или жёстко прописана в коде. Возможно, вы переводите тему, а текст выводит какой-то плагин.
    3. Очистить кэш если установлены плагины типа WP-Rocket, Redis и так далее.
    4. Перевести плагин или тему через PoEdit и импортировать свои переводы на сайт translate.wordpress.org


    Иногда Loco справляется хуже, тогда на помощь придёт приложение PoEdit - оно более умное и умеет сканировать строки для перевода.
    Ответ написан
    Комментировать
  • Как изменить надпись "В корзину" на "В корзине" на лету в woocommerce?

    Kleindberg
    @Kleindberg
    Full stack
    Чтобы тексты менялись на лету это уже нужно использовать JavaScript. Что-то типа такого:

    $( ".add_to_cart_button" ).click(function() {
      $(this).text('В корзине');
    });
    Ответ написан
  • Как выставить кол-во миниатюр галереи товаров woocommerce?

    Kleindberg
    @Kleindberg
    Full stack
    В файле стилей, например этом vodoleyplay.ru/wp-content/themes/theme49284/style.css вставить такой код:
    .woocommerce div.product .woocommerce-product-gallery--columns-4 .flex-control-thumbs li:nth-child(4n+1) {
        clear: none !important;
    }
    Ответ написан
    Комментировать
  • Как изменить кнопку «Добавить в корзину» в woocommerce?

    Kleindberg
    @Kleindberg
    Full stack
    Попробуйте через jQuery:
    $('.add_to_cart_button').hover(function() {
        $(this).text("Название товара");
    }

    jsfiddle.net/nikhilmangal/fcyL7Lfu
    Ответ написан
    Комментировать