• В WordPress post_modified сделать одинаковым post_date?

    Kleindberg
    @Kleindberg
    Full stack
    Чтобы при создании или редактировании записи дата изменения устанавливалась из даты создания можно использовать этот код в файле functions.php вашей темы, он просто обновляет аттрибуты записи:

    function update_modified_date_to_post_date($post_id) {
    	// Получаем дату создания записи
    	$creation_date = get_the_date('Y-m-d H:i:s', $post_id);
    
    	// Обновляем дату изменения записи
    	$update_args = array(
    		'ID' => $post_id,
    		'post_modified' => $creation_date,
    		'post_modified_gmt' => get_gmt_from_date($creation_date),
    	);
    
    	if ( ! wp_is_post_revision( $post_id ) ){
    		// удаляем этот хук, чтобы он не создавал бесконечного цикла
    		remove_action('save_post', 'update_modified_date_to_post_date');
    
    		// обновляем пост, когда снова вызовется хук save_post
    		wp_update_post($update_args);
    
    		// снова вешаем хук
    		add_action('save_post', 'update_modified_date_to_post_date');
    	}
    	
    }
    add_action('save_post', 'update_modified_date_to_post_date');
    Ответ написан
  • Отправка деталей заказа в телеграм 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.
    Ответ написан
    Комментировать
  • Почему набор номера не передается на телефон в браузере chrome?

    Kleindberg
    @Kleindberg
    Full stack
    Содомиты из Google убрали эту возможность...

    45607277-27b440b07797f8200e861bc965c5acf4.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAJSCJQ2NM3XLFPVKA%2F20240125%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240125T101557Z&X-Amz-Expires=28800&X-Amz-SignedHeaders=host&X-Amz-Signature=2bbf3de43346c24d02759067ed6771eb91c9048284cdff42650d503f7b58f21f
    Ответ написан
    Комментировать
  • Интеграция готового редактора статей для php?

    Kleindberg
    @Kleindberg
    Full stack
    Как показал мой опыт (часто пишу статьи) — самый лучший редактор на сайте Medium.com. И вот есть подобное решение, если вы хотите создать свой аналог: How to emulate the Medium editor for content creat... (реализовано на основе TinyMCE, в статье есть полный код).
    Ответ написан
    Комментировать
  • Почему mail() не отправляет сообщение на почту(openserver)?

    Kleindberg
    @Kleindberg
    Full stack
    Последнее время никогда не надеюсь на функцию mail() и всегда использую SMTP библиотеки для отправки почты. Самая лучшая библиотека для работы с почтой - это PHPMailer.
    Ответ написан
    Комментировать
  • Почему сайт медленно грузится?

    Kleindberg
    @Kleindberg
    Full stack
    Помимо выше сказанного, добавлю, что мне очень помог плагин Code Profiler Pro - он делает аудит сайта и показывает, какие плагины на сайте работают медленнее всего и в чём именно ошибки.

    А так советы будут стандартными:
    1. Выбрать хостинг получше. Если сайт заточен под одну страну, то хостинг брать в той же стране. Мы используем псевдо-VPS, а у вас скорее всего обычный shared-хостинг?
    2. Перейти на PHP 8.2 и всегда следить за последними версиями.
    3. Поставить и настроить CloudFlare (хотя если вы из РФ и сайт только для своих, то лучше не надо).
    4. Настроить кэширование на хостинге: Redis Object Cache, WP REST API Cache, WP-Rocket и так далее.
    5. Пересжать все фото (вручную через JPEGMini или TinyPNG либо автоматически с помощью Jetpack или сторонние сервисы CDN).
    Ответ написан
    Комментировать
  • Из-за чего тема может отдавать часть на русском, часть на английском?

    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('В корзине');
    });
    Ответ написан
  • Как добавить onInput в input в contact form 7?

    Kleindberg
    @Kleindberg
    Full stack
    Я бы подобное реализовал просто в отдельном js файле с помощью jQuery.
    А так только переписывать функцию которая отвечает за генерацию формы.
    Ответ написан
    Комментировать
  • Такой кабель годится для подключения iMac к тв?

    Kleindberg
    @Kleindberg
    Full stack
    Да, это то что нужно для старых маков :)
    Ответ написан
    Комментировать
  • Как верифицировать Viber бот?

    Kleindberg
    @Kleindberg
    Full stack
    Попробуйте написать на https://help.viber.com/ru/contact или support@viber.com
    Ответ написан
    Комментировать
  • Проблема с доступом к сайту через cloudflare?

    Kleindberg
    @Kleindberg
    Full stack
    У нас это тоже очень распространённая ошибка - 522 Таймаут. Причём исследование показало, что хостинг не влияет на эту ошибку - проверяли у разных провайдеров на разных сайтах. Это что-то на стороне CloudFlare.
    Ответ написан
    1 комментарий
  • Стоит ли использовать в 2021 году Cloudflare?

    Kleindberg
    @Kleindberg
    Full stack
    Мы последнюю неделю столкнулись со слишком частыми ошибками из-за Cloudflare, например 522 ошибка - таймаут. Поэтому подумываем отказаться от них. Если у вас сайт ориентирован на одну страну, то думаю можно обойтись без Cloudflare.
    Ответ написан
    5 комментариев
  • Как задать новый размер изображение в WordPress?

    Kleindberg
    @Kleindberg
    Full stack
    Попробуйте так (вместо того кода, что вы написали выше):
    add_theme_support( 'post-thumbnails' );
    add_image_size( 'По ширине контента', 600, 400);


    Функция add_image_size принимает следующие параметры:

    add_image_size( string $name, int $width, int $height, bool|array $crop = false )


    имя, ширина, высота, жёсткая обрезка
    Ответ написан
    Комментировать
  • Как написать регулярное выражение для телеграмм никнеймов?

    Kleindberg
    @Kleindberg
    Full stack
    Попробуйте:
    .*\B@(?=\w{5,64}\b)[a-zA-Z0-9]+(?:_[a-zA-Z0-9]+)*.*

    https://regex101.com/r/J97QQu/2
    Ответ написан
    Комментировать
  • Как сформировать SQL запрос many to many?

    Kleindberg
    @Kleindberg Автор вопроса
    Full stack
    Пока что нашел такое решение:
    SELECT
        p.name,
        c.count_product,
        p.price,
        s.sum_sale,
        s.date
    FROM
        product AS p
    INNER JOIN cheque AS c
    ON
        p.id = c.id_product
    INNER JOIN sale AS s
    ON
        s.id = c.id_sale
    Ответ написан
    Комментировать
  • Как пересохранить массово товары Woocommerce?

    Kleindberg
    @Kleindberg
    Full stack
    Попробуйте обновить наличие товаров через массовый редактор товаров, по типу WooCommerce Advanced Bulk Edit (проще интерфейс, но устаревшее решение) или WOOBE (сложнее, но современнее).
    Ответ написан
    Комментировать
  • Как найти место взлома wordpress?

    Kleindberg
    @Kleindberg
    Full stack
    Обычно, вирус находится в nulled плагине или теме, скачанной с пиратского сайта. Вот, пример такого вируса.

    Следовательно, начинать лечение сайта нужно с поиска зараженного плагина или темы (файл functions.php). А то, что вирус на соседние сайты полез, значит, что у вас на сервере в PHP не настроены ограничения open_basedir. Я после таких заражений всюду установил open_basedir: /home/user/site.com/www (огранил видимость в пределах www) - так вирус не сможет просканировать другие папки за пределами одного домена.

    Есть антивирусы по типу AiBolit - они находят вирусы в коде.
    Ответ написан
    4 комментария
  • Как сделать удаленную админку wordpress?

    Kleindberg
    @Kleindberg
    Full stack
    Можно попробовать создать свою админку посредством Wordpress REST API. Я таким образом автоматизировал работу с заказами через WooCommerce (у последнего есть своя API).
    Ответ написан
  • Стоит ли включать DNSSEC?

    Kleindberg
    @Kleindberg
    Full stack
    Хотели подключить на своём сайте, но оказалось, что домен com.ua не поддерживает данную технологию. Также, если верить статьям, у некоторых пользователей (из-за ненадежных провайдеров) могут не отображаться подобные сайты. Поправьте, если не прав.
    Ответ написан
    Комментировать