Ответы пользователя по тегу WordPress
  • В 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.
    Ответ написан
    Комментировать
  • Почему сайт медленно грузится?

    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.
    А так только переписывать функцию которая отвечает за генерацию формы.
    Ответ написан
    Комментировать
  • Как задать новый размер изображение в 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 )


    имя, ширина, высота, жёсткая обрезка
    Ответ написан
    Комментировать
  • Как пересохранить массово товары 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).
    Ответ написан
  • Как сделать на домене первого уровня и второго - управление через одну CMS?

    Kleindberg
    @Kleindberg
    Full stack
    Однозначно следует обратить внимание на функцию Мультисайт (wp multisite). Он позволяет работать и с поддоменами.
    Ответ написан
    Комментировать
  • Где сохранить файл, чтобы при обновлении плагина они не удалились на Wordpress?

    Kleindberg
    @Kleindberg
    Full stack
    Если Вы написали собственный плагин, то обновления WordPress и других плагинов никак не должны затронуть папку с Вашим плагином. Можно в папке wp-content/uploads создать свою папку и защитить её с помощью .htaccess от внешнего доступа. Либо хранить файл в корне сайта.

    А по поводу удаления - скорее всего у Вас установлен Wordfence или что-то подобное. Оно и чистит системные папки.
    Ответ написан
  • Как выставить кол-во миниатюр галереи товаров 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
    Ответ написан
    Комментировать
  • Почему не могу настроить скорость pagespeed?

    Kleindberg
    @Kleindberg
    Full stack
    Наверное не до конца или не правильно настроили плагин для кэширования. Попробуйте плагин WP Rocket - на него Google PageSpeed Insights не ругается. Также интересно, что за блок такой, который нужно скрывать от гугла. Не проще его оптимизировать?
    Ответ написан
    Комментировать
  • Как определить какой это шаблон Wordpress?

    Kleindberg
    @Kleindberg
    Full stack
    Определить, какой шаблон используется на WordPress сайте очень легко. Ищите ссылку по типу этой:
    <img src="http://www.forss.ee/wp-content/themes/forss/images/logo.png" alt="" />

    То, есть: /wp-content/themes/{название_темы}.

    Узнав название темы, можно получить информацию о ней в файле style.css (обязательный файл для WordPress). Например, в нашем случае используется тема forss. Информация о разработчиках есть в файле: www.forss.ee/wp-content/themes/forss/style.css

    Возвращаясь к Вашему вопросу - большие порталы зачастую используют индивидуально разработанные шаблоны. Поэтому скачать или купить его в сети не получится.
    Ответ написан
    Комментировать
  • Как разобраться с аргументами функций на примере the_title()?

    Kleindberg
    @Kleindberg
    Full stack
    Без переделывания функции поменять местами вывод аргументов нельзя. Например, функция которая принимает два параметра - название комнаты и цвет и выводит фразу по типу "Ванная окрашена в синий":
    function paint($room, $color) {
        return "{$room} окрашена в {$color}.";
    }

    Если передать первым не название комнаты, а цвет, то и получился фраза по типу "Синий окрашена в ванна". А теперь ближе к Вашему вопросу.

    Существуют обязательные параметры функции и опциональные. В функции <?php the_title( $before, $after, $echo ); ?> получается, что третий аргумент обязателен. Поэтому <?php the_title( null, null, "Заголовок" ); ?> сработает, а <?php the_title( "|", "Заголовок"); ?> вызовет ошибку, ибо не указан третий аргумент.
    Ответ написан
    Комментировать
  • Как разрешить комментарии только на одном языке в WordPress?

    Kleindberg
    @Kleindberg
    Full stack
    Самый легкий способ решения - через jQuery:
    $('#comment').on('keypress', function() {
        var that = this;
        setTimeout(function() {
            var res = /[^а-я ]/g.exec(that.value);
            console.log(res);
            that.value = that.value.replace(res, '');
        }, 0);
    });

    Можно вставить прямо в файл comments.php
    Ответ написан
    Комментировать
  • Как сделать корзину и т.п. на своей теме Wordpress?

    Kleindberg
    @Kleindberg
    Full stack
    Пожалуй, лучшее решение - установить плагин WooCommerce. Создаете свою тему, копируете шаблоны из папки templates в папке с плагином в папку со своей темой, переименовав templates в woocommerce. При желании можно подправить шаблоны.

    Но лучше все же посмотреть, как это сделано в других темах. Например, изучите, как устроена тема Dazzling.
    Ответ написан
    Комментировать