Как отследить, сохранить все электронные письма, отправленные с сайта на WordPress? 

Если по каким то причинам вы не получаете письма с сайта WordPress на свой электронный ящик, или просто желаете подстраховаться — чтобы не пропустить отправленные важные E-mail оповещения такими плагинами, как WooCommerce, задействуйте плагин WP Mail Logging.

После установки, плагин достаточно только активировать и он незамедлительно приступит к работе и встанет на стражу e-mail транспорта.

раздел плагина в меню

Какая информация регистрируется?

Все электронные письма, отправленные с вашего сайта WordPress теперь, после активации плагина, будут протоколироваться.

А вот информация, которая сохраняется:

  • Тема письма
  • Содержимое электронной почты (HTML или текст)
  • Вложения электронной почты
  • Заголовки электронной почты (кому, от кого, кому ответить, копия, скрытая копия)
  • Сообщение об ошибке (в случае, если при попытке отправить электронное письмо произошла ошибка)
  • IP-адрес исходного сервера (нужно включить в настройках)
  • Дата и время письма
  • Получатель (адрес электронной почты)

Сейчас мы оформим заказ в магазине WooCommerce и посмотрим что отловит наш плагин для сохранения

Заказ в интернет-машазине

Теперь в разделе журнала плагина мы можем наблюдать фиксацию данного события. Оформление заказа вызвало три события отправления электронных писем:

Вот панель для действий над письмами. Мы можем заново вызвать отправку выборочного письма, удалить или же жмакнуть на «глазик» и посмотреть тело письма которое получаем мы, как администратор сайта и какое получает клиент. Иногда это очень полезно 🙂

Image 00000126 - Как отследить, сохранить все электронные письма, отправленные с сайта на WordPress? 

Письмо менеджерам интернет-магазина:

Письмо менеджерам интернет-магазина:

А вот такое письмо получают клиенты интернет-магазина:

Image 00000125 - Как отследить, сохранить все электронные письма, отправленные с сайта на WordPress? 

Помимо прямого назначения, плагин также очень удобно использовать непосредственно для настройки, вёрстке электронных писем, например, при разработке сайта на localhost.

Дополнительные настройки

В настройках плагина можно включить

  • Хост — Отображение IP-адреса хоста, на котором работает WordPress. Это полезно при запуске WP Mail Logging на нескольких серверах одновременно.
  • Отображение вложений (файлов) — Отображение вложений в таблице журнала.
настройки плагина

Учтите, что этот плагин сохраняет только путь к файлу вложений, а не сам файл вложений. Если путь к файлу вложения не существует или файл был удален, он не будет отображаться в журналах.

А после включения хоста, в нижней части превью письма вы можете увидеть «айпишник» с которого было отправление:

хост отправителя

Не приходят оповещения о Новых заказах от WooCommerce

При создании нового заказа (покупки) на сайте интернет-магазина под управлением WordPress+WooCommerce, должны приходить E-mail оповещения, как клиенту (тот кто заказал), так и администратору сайта.

Заказы, которые правильно переходят в обработку, тоже должны генерировать электронное письмо. Если этого не происходит и вы не получаете письма, то первым делом стоит проверить папку СПАМ вашей почты, вполне возможно эти письма там 🙂

Ещё наиболее частой причиной того, почему от WooCommerce не приходят должные оповещения при новом заказе от клиента может служить неправильная настройка E-mail оповещений. 

Как указать E-mail адресатов на события о новых заказах?

Зайдите в панель управления сайтом WordPress и перейдите по следующему пути:

WooСommerce → Настройки → Email’ы

Здесь мы увидим таблицу событий при которых отправляются письма-уведомления от Woo.

Большинство из этих уведомлений предназначено для клиента, а для нас есть три важных события:

  • Новый заказ
  • Отменённый заказ
  • Неудавшийся заказ

Email-уведомления отправленные из WooCommerce перечислены ниже. Кликните по Email’у, чтобы настроить его.

Настройка оповещений по почте

Обращу ваше внимание на то, что можно указывать несколько получателей. Для этого достаточно просто перечислить адреса электронных почт через запятую, как в примере ниже:

получатели е-мэйл

Иногда может встречаться ещё одна проблема, которая заключается в адресе почты отправителя. 

Woocommerce → Настройки → Email’ы , далее следует «прокрутить» вниз страницы и проверить какой адрес почты указан в качестве Отправителя. Он должен совпадать с доменом Вашего сайта ?

адрес отправителя

Чтобы не пропускать письма и фиксировать их внутри сайта рекомендуется воспользоваться этим решением.

Удачи!

Что такое Akismet или как быстро защитить сайт на WordPress от СПАМа?

Akismet — это служба, которая фильтрует спам в комментариях, обратных ссылках и сообщениях контактной формы на сайтах под управлением WordPress.

Данный плагин это одно из самых надежных решений для защиты от спама для WordPress и WooCommerce.

Akismet проверяет ваши комментарии и отправленные контактные формы по нашей глобальной базе данных спама, чтобы предотвратить публикацию вредоносного контента на вашем сайте. Вы можете просмотреть спам в комментариях, который он улавливает, на экране администратора вашего блога «Комментарии».

Плагин доступен сразу после установки WordPress. Чтобы его задействовать нужно его активировать и пройти регистрацию на официальном сайте, после которой вам будет выдан ключ, который нужно активировать в настройках плагина.

Основные функции Akismet:

  • Автоматически проверяет все комментарии и блокирует те, что похожи на спам.
  • Каждый комментарий имеет свою историю статусов, благодаря которой можно легко проверить, какие комментарии были заблокированы или одобрены Akismet, а какие были помечены как спам или не спам модератором.
  • Адреса ссылок отображаются прямо в теле комментария, чтобы выявить скрытые или вводящие в заблуждение ссылки.
  • Модераторы могут посмотреть количество одобренных комментариев для каждого пользователя.
  • Функция сброса, которая блокирует наихудшие спам комментарии, поможет вам сохранить ваше место на диске и ускорить работу сайта.
Image 00000101 - Что такое Akismet или как быстро защитить сайт на WordPress от СПАМа?

После активации вам будет предложено получить ключ API Akismet.com, чтобы использовать его. Ключи бесплатны для личных блогов; платные подписки доступны для предприятий и коммерческих сайтов.

Официальный сайт сервиса

Тут нам необходимо выбрать бесплатную подписку (если вы желаете получить продукт бесплатно)

получить продукт бесплатно

Далее огорчим смайлик, суммой со значением «0» и примем условия для использования сервиса

Image 00000103 - Что такое Akismet или как быстро защитить сайт на WordPress от СПАМа?

И наш ключ получен!

ключ акисмет

Теперь вернемся на наш сайт и задействуем полученный ключ. После его активации служба Akismet активна и готова бороться со спамом. Статистика спама на вашем сайте будет отображаться на специальной странице настроек.

Статистика спама на вашем сайте будет отображаться здесь.

Теперь формы комментариев на сайте защищены сервисом Akismet

Akismet

В настройках плагина можно отключить вывод этого уведомления. Мы его вывели для проверки.

Если вы используете конструктор форм Contact Form 7 , то рекомендую ознакомиться с информацией, о том, как защитить формы этого плагина при помощи Akismet.

Прочие плагины

Как проверить и убедиться, что Akismet работает?

Если Akismet правильно настроен (включая регистрацию, указание API ключа), вы можете использовать служебные слова, для того чтобы убедиться в работе сервиса и в защите ваших форм комментариев и форм обратной связи от спама:

  • Имя: akismet-guaranteed-spam
  • Электронная почта: akismet-guaranteed-spam@example.com
  • Тело комментария: akismet‑guaranteed‑spam

В поле для комментариев указывайте исключительно akismet-guaranteed-spam и ничего более! Вот пример:

пример заполнения формы

Если всё настроено у вас верно, то после отправления формы со строго указанными, как в примере данными в разделе СПАМ ждите гостей 🙂

СПАМ

Вот он, голубчик. Попался!

попался спам

Как в WooCommerce отобразить SKU вариаций в панели управления (админке)?

Чтобы в ячейке для SKU, в панели администрирования WordPress, отображать все артикулы вариаций у вариативных товаров достаточно добавить данный сниппет:

/**
 * @snippet       Display Variation SKUs @ WooCommerce Product Admin
 * @author        Code==Poetry
 */
  
add_filter( 'woocommerce_product_get_sku', 'poet_variable_product_skus_admin', 9999, 2 );
 
function poet_variable_product_skus_admin( $sku, $product ) {
   if ( ! is_admin() ) return $sku;
   global $post_type, $pagenow;
   if ( 'edit.php' === $pagenow && 'product' === $post_type ) {
      if ( $product->is_type('variable') ) {
         $sku = ''; // $sku = $product->get_sku();
         foreach ( $product->get_children() as $child_id ) {
            $variation = wc_get_product( $child_id ); 
            if ( $variation && $variation->exists() ) $sku .= '(' . $variation->get_sku() . ')';
         }
      }
   }
   return $sku;
}

Как включить регистрацию на сайте и назначить роль пользователю в WordPress по умолчанию?

В WordPress существует встроенный механизм самостоятельной регистрации пользователей на сайте, который по умолчанию отключен и на странице форма «входа на сайт» его не обнаружите.

Image 00000095 1 - Как включить регистрацию на сайте и назначить роль пользователю в WordPress по умолчанию?Image 00000094 - Как включить регистрацию на сайте и назначить роль пользователю в WordPress по умолчанию?
Регистрация на сайте ВКЛ/ВЫКЛ

Как включить регистрацию на сайте в WordPress?

Для этого пройдите в раздел Настройки > Общие и отметьте нужный чекбокс

После этого при входе на сайт, под формой появится одноимённая ссылка Регистрация

Регистрация аключена

Роли пользователей в WordPress

В WordPress заложены несколько видов ролей, которые различаются между собой по назначенным на них возможностям.

То есть — это система управления доступом, которая позволяет определить, какие действия могут выполнять пользователи на вашем сайте WordPress,а какие не могут. Каждая роль имеет свои особенности и ограничения, которые помогают обеспечить безопасность и эффективность при совместной работе на сайте.

Стандартная установка WordPress включает несколько предопределенных ролей:

  1. Администратор (administrator): это основная роль, которая имеет полный доступ ко всем функциям и настройкам сайта. Администратор может управлять другими пользователями, устанавливать и настраивать плагины и темы, редактировать контент и т.д.
  2. Редактор (editor): редакторы могут создавать, редактировать и публиковать контент на сайте. Они также имеют возможность управлять контентом, созданным другими пользователями, но не могут изменять настройки сайта или устанавливать плагины.
  3. Автор (author): авторы могут создавать и редактировать свой собственный контент, но не имеют доступа к контенту других авторов или возможности управлять настройками сайта.
  4. Участник (contributor): участники могут оставлять комментарии на сайте, но не имеют возможности создавать или редактировать контент.
  5. Подписчик (subscriber): подписчики могут только просматривать контент и подписываться на обновления.

После установки WordPress автоматически создается учетная запись администратора.

Как установить роль при регистрации новых пользователей?

Роль по умолчанию для новых пользователей назначается с минимальными возможностями, по сути их даже нет. Эта роль называется — Подписчик и может быть изменена в разделе Настройки > Общие

Изменение роли при регистрации нового пользователя

Внимание! Будьте внимательны при включении Регистрации. Убедитесь какая роль будет присваиваться при регистрации нового пользователя. Неверно указанная роль может обернуться катастрофой на вашем сайте.

Подробнее о возможностях и ролях можно узнать тут или тут.

Как сделать копирование артикула товара по клику в WooCommerce?

Задача: для удобства сотрудников сделать копирование артикула по клику.

Реализовывать мы будем это на стороне клиента (браузера) при помощи JavaScript используя нужные нам методы при работе с DOM.

Давайте рассуждать. У нас есть артикул, значение которого выводится в строчном элементе <span>, благодаря атрибуту class мы можем «зацепиться за него» — это, условно говоря, его имя.

sku

Так как нам нужно только его значение, отметим для себя элемент span с классом «sku»

Нам нужно его выдернуть из DOM (Объектная Модель Документа) и в этом нам поможет метод querySelector()

Согласитесь, что нашего элемента может на странице и не существовать, поэтому нужно проверить его существование. Если совпадений не будет найдено, то наш метод вернёт значение null.

Давайте реализуем эту логику в виде кода.

const sku = document.querySelector(".sku");

if(sku !== null){
    console.log(sku);
}

Если вы всё сделали правильно, то непременно увидите в консоли этот выбранный элемент:

Image 00000089 - Как сделать копирование артикула товара по клику в WooCommerce?

Следующим логическим шагом нам нужно будет отследить событие клика по этому элементу. В этом нам поможет метод

addEventListener() который будет обрабатывать событие клика по этому элементу

const sku = document.querySelector(".sku");

if (sku !== null) {
    sku.addEventListener("click", (e) => {

    });
}

Итак, событие клика мы отслеживаем и теперь настало время вызвать в момент клика нашу функцию, которая и будет осуществлять копирование содержимого.

Функцию назовём copyWooSKU()

Что должно находиться в функции? Очевидно, что нам нужно получить (зачитать) значение артикула, а затем его каким то чудесным образом скопировать в буфер обмена пользователя. Реализовывать мы это будем через современный API Async Clipboard (на замену синхронного метода document.execCommand())

Clipboard API предоставляет возможность реагировать на команды буфера обмена (вырезать, копировать и вставить), а также выполнять асинхронные чтение/запись в системный буфер обмена.

https://developer.mozilla.org/en-US/docs/Web/API/Clipboard_API

Итак, нам понадобится:

  1. Объект Navigator
  2. Свойство этого объекта .clipboard — которое используется для чтения и записи содержимого буфера обмена
  3. И метод writeText() — для записи текста в буфер обмена
async function copyWooSKU(txt) {
    try {
        await navigator.clipboard.writeText(txt);
    } catch (error) {
        console.error("Ошибочка вышла: ", error);
    }
}

const sku = document.querySelector(".sku");

if (sku !== null) {
    sku.addEventListener("click", (e) => {
        copyWooSKU(e.target.innerText);
    });
}

Ну вот и всё! Это должно работать 🙂

Обращу внимание, что стрелочные функции не имеют собственного контекста this. То есть в стрелочных функциях

e.currentTarget != this

Комментарий к коду:

  • async перед функцией, потому что в теле функции есть await и вернётся промис
  • try / catch для обработки исключения
  • e.target.innerText — это извлечение значения свойства (текста в нашем случае) элемента по которому кликаем

Как и многие новые API, API буфера обмена поддерживается только для страниц, обслуживаемых по протоколу HTTPS. Чтобы предотвратить злоупотребления, доступ к буферу обмена разрешен только тогда, когда страница является активной вкладкой. Страницы на активных вкладках могут записывать в буфер обмена без запроса разрешения, но чтение из буфера обмена всегда требует разрешения.

Учтите, что метод writeText() ожидает безопасного контекста HTTPS и если ваше соединение осуществляется по схеме протокола HTTP то может вылететь как раз таки ошибочка 🙂

Рекомендуется для чтения:

Разблокирование доступа к буферу обмена

Как добавить уведомление?

Очевидно, что в момент клика непонятно, произошло копирование или нет. Если улучшать наш код для пользователя, то по доброму необходимо сделать уведомление, чтобы клиенту было понятно, что копирование осуществилось.

Давайте рассуждать. Нам нужно методами JavaScript создать элемент в котором будет содержаться текст нашего уведомления. После вызова функции необходимо отобразить это уведомление и спустя пару секунд скрыть. Весь наш код теперь выглядит следующим образом:



async function copyWooSKU(txt) {
    try {
        await navigator.clipboard.writeText(txt);
    } catch (error) {
        console.error("Ошибочка вышла: ", error);
    }
}

const sku = document.querySelector(".sku");

if (sku !== null) {
    sku.addEventListener("click", (e) => {

        e.preventDefault();
        copyWooSKU(e.target.innerText);

        const myNotice = document.createElement("span");
        myNotice.style.color = "red";
        myNotice.innerText = "Скопировано";

        // селектор родителя
        if (sku.parentElement) {
          const parentElement = sku.parentElement;
          parentElement.appendChild(myNotice);

          window.setTimeout(function () {
            parentElement.removeChild(myNotice);
          }, 2000);
        } // TODO else 

    });
}

В этом коде использован следующий JavaScript:

  • Метод preventDefault () — добавил на всякий случай для отмены обработки клика (до нашего обработчика)
  • document.createElement() — метод для создания элемента
  • style.color — присваиваем CSS-свойство для изменения цвета шрифта
  • Свойство .innerText — позволяет задавать текст нашему созданному элементу
  • Метод .appendChild() добавляет узел в конец списка дочерних элементов указанного родительского узла. Будьте внимательны! Селектор родительского элемента у вас может отличаться.
  • Функция .setTimeout() — для задержки выполнения
  • Метод .removeChild() удаляет дочерний элемент из DOM.
  • parentElement это родительский элемент текущего узла.

Возможно некоторые свойства, такие как : target, innerText станут понятнее, если мы на них взглянем. Для этого в этом отрезке кода, где мы отслеживаем действие по клику, можно вывести в консоль это событие клика мышкой:


if (sku !== null) {
    sku.addEventListener("click", (e) => 

        console.log(e);

    });
}

Мы увидим объект, и именно в нём и находятся наши свойства:

свойство таргет

А вот свойство со значением артикула, к которому мы обращаемся

Image 00000143 - Как сделать копирование артикула товара по клику в WooCommerce?

Поиграть с рабочим кодом можно тут

Как отобразить вместо пустой цены или «нуля» слово «БЕСПЛАТНО» в WooCommerce?

Задача: Когда цена товара не указана или её значение равно 0 (нулю), то в этом случае выводить слово «БЕСПЛАТНО».

Товар с ценой 0Image 00000081 - Как отобразить вместо пустой цены или «нуля» слово «БЕСПЛАТНО» в WooCommerce?
Было/Стало

Начнём наше решение мы как всегда с исследования. Проинспектируем наш элемент в котором выводится значение цены

Далее, поиском по файлам по директории плагина WooCommerce нам необходимо отыскать «темплэйт» который отвечает за вывод цены. Я его нашёл — price.php

Нас интересует метод (функция) get_price_html(), и следующим шагом мы отыщем её также по директории плагина. Вот так она выглядит:

Нас интересуют два её хука. Это хук-фильтр ‘woocommerce_empty_price_html’ и хук-фильтр ‘woocommerce_get_price_html’. Сама функция возвращает тип данных — строка, это важно отметить.

Как мы видим, первый фильтр нам поможет изменить возвращаемое значение в том случае если цена у товара не указана и оформить нашу функцию можно следующим образом:

add_filter('woocommerce_empty_price_html', function ($string) {

    $string = '<span>Бесплатно</span>';

    return $string;

}, 100, 1);

Если обратить внимание на исходный код метода get_price_html() класса WC_Product, то можно заметить, что строгая проверка там уже стоит на пустую строку. Поэтому в фильтр мы передаём один аргумент, я его назвал $string и присвоил ему новое значение и тут же вернул (это важно! При использовании хуков-фильтров всегда возвращать, то что передали). Цифры после анонимной функции говоря об очерёдности выполнения (так как на этот фильтр может ещё кто-то, например, разработчики стороннего плагина, прикрепить свои функции) и вторая цифра — это число аргументов для передачи. В следующем примере их будет уже два 🙂

Теперь в случае, если цена не указана, будет выводиться слово — Бесплатно

Image 00000081 1 - Как отобразить вместо пустой цены или «нуля» слово «БЕСПЛАТНО» в WooCommerce?

Теперь рассмотрим второй хук, который поможет нам решить задачу во втором случае — когда цена указана значением равным нулю.

Если взглянуть исходный код метода, то можно обнаружить вот такую запись возврата функцией (методом) данных

return apply_filters( 'woocommerce_get_price_html', $price, $this );

Итоговый код будет выглядеть вот так. Сейчас я поясню. С первым аргументом $price думаю всё понятно — это возвращаемая строка цены, а вот второй $this — это объект товара — экземпляр класса которому принадлежит метод, соответственно мне нужно указать его в виде $product — объект товара, который доступен в глобальной зоне видимости (global $product). Немного может показаться это сложным для понимания, но со временем и практикой ясность придёт.

Вобщем, передав вторым аргументом $product, наш фильтр будет обладать данными из этого объекта, а соответственно нам будет доступен метод получения цены. Если взглянуть на исходный код метода, то можно встретить в нём ещё один нужный нам метод получения цены $this->get_price()

Вот итоговый код. Единственное, я понизил строгость проверки 0 == $product->get_price(), так как возвращается строка, а мы сравниваем с типом число и это уже не будет удовлетворять условию и указал последней цифрой после функции передаваемое число аргументов — 2. Так как второй аргумент (объект $product) нам нужен для проверки значения цены равное нулю.

add_filter('woocommerce_get_price_html', function ($price, $product) {

    if (0 == $product->get_price()) { // return string!
        $price = '<span>Бесплатно</span>';
    }

    return $price;
}, 100, 2);

Теперь, если значение цены указано, как ноль, то получим вывод слова «бесплатно»:

Image 00000084 - Как отобразить вместо пустой цены или «нуля» слово «БЕСПЛАТНО» в WooCommerce?

Учтите, это справедливо и для случая если в качестве акционной цены проставлен «ноль»

Image 00000085 - Как отобразить вместо пустой цены или «нуля» слово «БЕСПЛАТНО» в WooCommerce?

Мы так же получим вывод слова «бесплатно».

Обратите внимание, что я возвращаю наше слово в тегах для строчного элемента <span> А это значит, что указав тегу атрибут класса, мы можем менять через CSS стиль отображения данного слова.

Как изменить цвет текста в редакторе Гутенберг в WordPress?

Чтобы выборочно изменить текст, например, некоторых слов, необходимо выделить нужное их количество и в разделе дополнительных возможностей, доступ к которым мы получаем по клику на эту стрелку (действие на рисунке №2) выбрать Выделение, а затем указать цвет из заготовок или произвольно

меняем цвет слов
меняем цвет слов

В результате получаем:

выделение цветом слова

Чтобы изменить текст всего абзаца, необходимо выделить нужный блок и справа перейти к его настройкам, где аналогично выбрать цвет для всего блока абзаца. Учтите, что окрашенные ранее в другой цвет слова останутся по прежнему красными.

Image 00000074 - Как изменить цвет текста в редакторе Гутенберг в WordPress?

Помимо заготовок цветов, которые могут поставляться с шаблоном оформления, мы можем указать и произвольный цвет при помощи цветового круга или точного значения в шестнадцатеричной системе

шестнадцатеричной системе

Основные команды при работе с СУБД MySQL или MariaDB

Чтобы начать знакомство с СУБД в командной строке достаточно освоить самые начальные команды, при помощи которых, вы будете выполнять подавляющее число операций.

Сперва, давайте осуществим подключение к серверу MySQL или MariaDB указав специальные параметры в командной строке. В этом примере мы подключаемся по протоколу SSH от пользователя root к нашему серверу, где находится (установлена) наша СУБД

ssh root@5.35.80.180

Если вы увидите в консоли подобную картинку, то это хороший знак 🙂 Мы успешно прошли авторизацию как пользователь root

консоль

Теперь необходимо ввести название вашей СУБД:

mysql

или соответственно для MariaDB

mariadb

Если всё прошло успешно, то вы должны увидеть в консоле схожую картинку, где СУБД готова выполнять наши команды

Успешная авторизация в СУБД

Иногда, в тех случаях если вы авторизовались на сервере под другой учётной записью, нужно дописать sudo

sudo mariadb

Основы при работе с базами данных

Чтобы внести изменения в базу данных или получить данные, вам нужно будет ввести оператор SQL. SQL расшифровывается как Язык Структурированных Запросов. Оператор SQL, который запрашивает данные, называется запросом. Базы данных хранят информацию в таблицах. Они похожи на электронные таблицы, но гораздо более эффективны в управлении данными.

https://mariadb.com/kb/ru/a-mariadb-primer/

Создание базы данных

Давайте создадим нашу первую базу для хранения данных. Для создания можно было ограничится оператором CREATE, но для эстетичности, давайте добавим условие на проверку существования имени базы данных IF NOT EXISTS .

CREATE DATABASE IF NOT EXISTS poetry;

Запрос выполнен успешно.

Запрос выполнен.

Посмотреть все базы данных

Теперь при помощи оператора SHOW мы можем посмотреть все доступные нам на текущем сервере СУБД базы данных:

SHOW DATABASES;
базы данных

Всё прошло успешно и мы видим созданную нами базу данных poetry. Прочие базы данных — это служебные базы самой СУБД и удалять их не нужно!

Выбор базы данных

Теперь, для дальнейшей работы, мы можем выбрать с помощью оператора USE нужную нам базу данных:

USE poetry;

База данных выбрана:

База данных выбрана

Похожей командой SHOW давайте посмотрим её таблицы:

SHOW TABLES;

Но мы будем немного разочарованы ответом: Empty set (0.001 sec)

Empty set (0.001 sec)

Это говорит, о том, что в нашей базе данных нет ещё таблиц. Так давайте же скорее их создадим!

Создание таблиц в базе данных

Давайте осуществим инструкцию для нашей СУБД — CREATE TABLE, которая создаст в базе таблицу. Мы будем создавать таблицу для хранение данных, о поэтах. Следовательно, мы неизбежно затрагиваем понятия типы данных. Углубляться мы сейчас в тонкости не будем, что лучше и для чего подходит и сколько оптимально выделять памяти для этих данных и т.п. В этот космос мы не полезем, а разберём простой пример. Нам нужны минимум два поля:

  1. ID (poet_id) — уникальный идентификатор для поэта. Это как паспорт — у каждого свой, у каждого уникальный. Повтора быть не может.
  2. Строка для хранения ФИО (poet_name) поэта

Отмечу, что создать таблицу можно просто при помощи инструкции (команды) CREATE TABLE, но мы добавим для эстетичности проверочку:

CREATE TABLE IF NOT EXISTS poets 
(poet_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
poet_name VARCHAR(100) NOT NULL);

В этом примере мы создали два поля для хранения данных:

  • INT — числовое, тип данных целое число
  • NOT NULL — не может быть не заполнено, своего рода предписание обязательно к заполнению
  • PRIMARY KEY — первичный ключ, понадобится нам для связей, но углубляться сейчас в этот термин не будем. Для каждой таблицы может быть не более одного первичного ключа.
  • AUTO_INCREMENT — автоматическое присвоение номере (айдишника поэта) путём увеличения значения. Важно понимать что после удаления значения, вновь созданному повторно эта цифра не присвоится
  • VARCHAR -для хранения текстовых данных переменной длины. В нашем случае ограничили сотней символов, как мне показалась для ФИО поэта это более, чем достаточно

Результат данного запроса при повторном отображении (SHOW TABLES) уже отобразит нашу строку Поэтов:

Image 00000061 - Основные команды при работе с СУБД MySQL или MariaDB

Давайте при помощи инструкции DESCRIBE (можно указать сокращённо DESC) посмотрим информацию о нашей табличке поэтов:

DESCRIBE poets;

Результат в виде табличного представления можно посмотреть на этом рисунке. Думаю комментарии уже излишне, что здесь к чему.

Данные таблицы поэтов

Во второй таблице нам нужно хранить произведения этих авторов (поэтов). Попробуйте самостоятельно создать таблицу для данных. Вот техническое задание:

  • Название таблицы poems
  • Айдишник стихотворения poem_id
  • Название стихотворения poem_title
CREATE TABLE IF NOT EXISTS poems 
(poem_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
poem_name VARCHAR(150) NOT NULL);

Поздравляю! Теперь у нас уже две таблички для хранения данных. Самое время их наполнить!

Image 00000064 - Основные команды при работе с СУБД MySQL или MariaDB

Наполнение таблиц БД данными

Инструкция (команда) INSERT INTO. Тут важно сопоставить названия наших столбцов со значениями которые мы им будем присваивать. В примере я заполняю таблицу поэтов их именами. Обратите внимание на то, что ID будет присваиваться автоматически. Тут важно уловить суть в синтаксисе, что где и как разделяется запятыми. А значение, которые строго соответствуют схеме в INSERT INTO должны тоже разделяться запятыми, но для простоты примера я ограничился одним значением — именем поэта.

INSERT INTO poets (poet_name) 
VALUES('Александр Сергеевич Пушкин'), 
      ('Михаил Юрьевич Лермонтов'),
      ('Сергей Александрович Есенин'),  
      ('Анна Андреевна Ахматова'),
      ('Борис Леонидович Пастернак'), 
      ('Николай Алексеевич Некрасов'),
      ('Владимир Владимирович Маяковский');

Вот пример выполнения данного SQL запроса. Важно инструкцию для СУБД закрывать точкой с запятой, а то что пробелы и переносы строк у нас получились лишние — это ничего страшного, СУБД принимает их к исполнению, главное не забывайте объявлять конец инструкции. Получим:

Image 00000065 - Основные команды при работе с СУБД MySQL или MariaDB

Запрос данных. Оператор SELECT

Ну вот и пришла пора познакомиться нам с оператором «Селект», при помощи которого мы можем делать выборку наших данных.

Мы знаем, что у нас уже есть данные в табличке poets, так давайте их запросим!

Данный пример, благодаря «звёздочке» запрашивает все столбцы данных из (FROM) таблицы poets

SELECT * FROM poets;

результат выборки

Всё верно, не правда-ли?

Если бы нас интересовали данные исключительно из столбца с ФИО поэта, то запись запроса выглядела бы следующим образом:

SELECT poet_name FROM poets;

Удаление данных из таблиц

Давайте проведём небольшой эксперимент. Мы удалим данные из таблицы поэтов и снова повторно создадим, чтобы посмотреть какой идентификатор будет присвоен нашему новому поэту.

Чтобы удалить все данные нужно воспользоваться оператором DELETE вот в такой конструкции:

DELETE FROM poets;

Это удалит все данные из нашей таблицы поэтов. Нам это не нужно. Тогда нашу запись нужно дополнить условием WHERE

DELETE FROM poets WHERE poet_id = 7;

В этом примере мы строго удаляем поэта с номером 7. В итоге получаем следующее:

Image 00000067 - Основные команды при работе с СУБД MySQL или MariaDB

Теперь при создании нового поэта ему будет присвоен следующий порядковый номер (но не 7!). Здесь отрабатывает заданный параметр AUTO_INCREMENT, при помощи которого ведётся, так сказать, история данной таблицы и учёт созданных уникальных значений идентификаторов. P.S. конечно есть решения и для сброса истории AUTO_INCREMENT — инструкция TRUNCATE TABLE, которая делает полный сброс, но об этом точно не в этой публикации 🙂

Мы научились добавлять данные при помощи оператора INSERT, задавая значения VALUES. Но вдруг, случилось так, что нам необходимо обновить данные в какой то из строк. Для этих целей существует оператор UPDATE.

Нам нужно за что то зацепиться и этим что то будет являться первичный ключ — «айди» нужной нам строки, именно по ней мы будем ее уникально идентифицировать. Запрос будет выглядеть так:

UPDATE poets 
SET poet_name= "Анна Ахматова" 
WHERE poet_id = 4;

Попробуйте выполнить этот запрос и посмотреть в консоле как изменились ваши данные.

Изменение структуры таблицы

Однажды, нам может понадобиться дополнить нашу таблицу данными или изменить текущие. Представим, что цифровой век застал бы этих поэтов и им пришлось бы обзавестись почтой, например, на сервисе gmail.

Давайте дополним таблицу новым столбиком poet_email при помощи инструкции ALTER TABLE

ALTER TABLE poets
ADD poet_email VARCHAR(50);

Готово!

Image 00000069 - Основные команды при работе с СУБД MySQL или MariaDB

Итак, давайте дополним данные наших поэтов. Не сочтите за фамильярность, но е-мэйлы буду создавать просто по имени поэта, для того чтобы не было совпадений с реальными адресами, так как в Google в их сервисе разрешено создавать ящик минимум от 6-ти символов.

Обновим данные при помощи UPDATE

UPDATE poets
SET poet_email= "sasha@gmail.com" 
WHERE poet_id = 1;

В примере выше мы обновили данные в одно строке, а в следующем примере мы добавим нового поэта, но уже с указанием второго столбца — его почты

INSERT INTO poets (poet_name, poet_email) 
VALUES('Игорь Владимирович Тальков', 'igor@gmail.com');

Image 00000070 - Основные команды при работе с СУБД MySQL или MariaDB

Ну вот и всё! Надеюсь, основы основ взаимодействия с СУБД , будут вам полезны и не показались через чур сложными.

Как изменить размер шрифта в консоли (терминале) PhpStorm?

PhpStorm — инструмент для разработки PHP- и веб-проектов. Он идеально подходит для работы с Laravel, Symfony, Drupal, WordPress и другими фреймворками.

Пользователю часто приходится работать во встроенном терминале этого редактора и для того чтобы увеличить шрифт или изменить его цвет первым делом нужно открыть настройки нашей IDE. Сделать это можно комбинацией клавиш или через раздел меню: File > Settings

настройки

Далее найти нужный раздел:

Editor > Color Scheme > Console Font и внести нужные настройки. В моём случае я осуществил увеличение шрифта до 18px

File > Settings > Editor > Color Scheme > Console Font

Рекомендация: нужные настройки удобно помогает отыскать строка поиска, в которой нужно задать осознанный поисковый запрос, например, console, тем самым осуществив фильтрацию и исключив ненужные пункты меню

фильтр в меню

Как добавить категорию товаров WooCommerce в меню сайта?

Начинающие пользователи могут быть озадачены добавлением ссылок в меню на созданные ими категории товаров в магазине под управлением WooCommerce и это неспроста. Да, есть некоторые особенности и сейчас мы с вами их рассмотрим.

Первые сложности могут появиться, если вы используете классическую тему оформления сайта. Наверняка, вы можете и не знать какой шаблон темы у вас используется, поэтому рассмотрим оба варианта.

Классический шаблон сайта

Находясь на сайте с правами администратора, вы должны видеть в разделе с названием сайта в выпадающем меню ссылку Меню

В выпадающем меню ссылку Меню

А если вы находитесь непосредственно в панели управления, то этот раздел должен находиться во Внешний вид

Внешний вид

Если вы не видите этого раздела, то вероятнее всего у вас установлена «блочная тема» оформления дизайна сайта и вам следует перейти к этому разделу.

Далее, на этой странице настроек меню вы можете увидеть текущие меню сайта или подобную пустую область для меню, которая говорит о том, что на вашем сайте отсутствует меню и его необходимо создать

меню отсутствует

В этом случае:

  1. дайте название вашему меню
  2. Отметьте область отображения на сайте (в разных темах эти области разные)
  3. Создайте меню
  4. Наполните его ссылками из раздела Элементов меню

И первая неприятность нас подстерегает вот в чём. По умолчанию добавления ссылок категорий товаров скрыты и вы их можете не увидеть в блоке элементов меню.

Нам необходимо их включить. Для этого откроем раздел в верхней правой части экрана Настройки экрана и отметим чекбокс Категории товаров, тем самым включив его в раздел элементов меню

Image 00000044 - Как добавить категорию товаров WooCommerce в меню сайта?

Теперь категории товаров будут доступны нам в разделе конструктора элементов меню

Категории товаров в меню

Теперь отмечаем нужные категории и добавляем в наше меню. Сделаю примечание, что если вам нужно сделать вложенность, то необходимо перетянуть элементы вправо. Примерно должно получиться следующее:

Image 00000046 - Как добавить категорию товаров WooCommerce в меню сайта?

Не забудьте сохранить изменения 🙂

Теперь на лицевой (публичной) части сайта вы увидите созданное меню и добавленные в него ссылки:

Добавления категорий ВуКоммерс в меню сайта

Блочная тема оформления

Если вы используете блочную тему оформления, то в верхней части сайта вы должны видеть ссылку Редактировать сайт

Редактировать сайт

Откроется режим редактирования сайта. В который можно было попасть из Панели управления, но это мы рассмотрим чуть ниже.

После открытия режима редактирования нужно нажать на какую-нибудь область содержимого сайта.

редактирование

После этого загрузится блочный редактор и возможно его загрузка будет сопровождаться вот таким уведомлением:

Image 00000030 - Как добавить категорию товаров WooCommerce в меню сайта?

После загрузки редактора я рекомендую открыть (распахнуть) все элементы страницы в виде иерархического списка, как на примере ниже. Нажмите на специальную иконку и распахните элементы:

Image 00000031 - Как добавить категорию товаров WooCommerce в меню сайта?

Нас интересует Навигация и её список страниц. Выделите Список страниц. Он должен подсвечиваться примерно так. Это говорит что вы выделили Списки страниц (элементов) нужного меню

Image 00000032 - Как добавить категорию товаров WooCommerce в меню сайта?

Далее нажимаем Изменить. Есть вероятность получить подобное уведомление:

уведомление

Этот список страниц синхронизируется с опубликованными страницами на вашем сайте. Отсоедините список страниц, чтобы самостоятельно добавлять, удалять или изменять порядок страниц.

Это обычно случается в том случае, если вы меняете меню впервые. По умолчанию оно создается автоматически из новых страниц вашего сайта. Нам этот вариант не подходит. Поэтому нажимаем Отсоединить и тем самым берём полную ответственность за построение меню на себя.

Убедитесь, что в режиме редактирования Навигации у вас включена справа область нужного Блока, как в примере ниже:

Редактор Навигации

Теперь мы можем создавать новые ссылки для нашего меню. Нажмите на «плюсик» и при помощи поиска отыщите Категории.

Image 00000035 - Как добавить категорию товаров WooCommerce в меню сайта?

Начните писать название… Вы увидите Блок для построения ссылок из категорий ваших товаров

Поиск категорий

Добавляем и выбираем нужную категорию

Выбрать категорию

Добавляем нужные ссылки:

Image 00000038 - Как добавить категорию товаров WooCommerce в меню сайта?

А также мы можем управлять их вложенностью:

Image 00000039 - Как добавить категорию товаров WooCommerce в меню сайта?

А на публичной части сайта мы получим следующий результат:

Image 00000040 - Как добавить категорию товаров WooCommerce в меню сайта?

Из Панели управления

А из панели управления в разделе Внешний вид будет аналогичная ссылка, правда с другим названием — Редактор:

Image 00000048 - Как добавить категорию товаров WooCommerce в меню сайта?

После вызова редактора вы можете увидеть подобный раздел. Нас интересует Навигация

Image 00000049 - Как добавить категорию товаров WooCommerce в меню сайта?

Далее переходим в её (навигации) редактирование

Image 00000050 - Как добавить категорию товаров WooCommerce в меню сайта?

Как удалить верхнюю панель в админке у WooCommerce?

Если вам, как и мне, порядком надоела верхняя панель в панели администратора сайта у WooCommerce, то предлагаю с ней распрощаться!

Как я понял, кроме дублирующего заголовка текущего экрана (страницы) и нескольких неважных функций эта панель ничего существенного в себе не содержит. Так зачем занимать дорогую часть экрана?! Долой! 🙂

Image 00000016 - Как удалить верхнюю панель в админке у WooCommerce?Image 00000023 - Как удалить верхнюю панель в админке у WooCommerce?
Удаляем верхнюю панель WooCommerce
<?php
/**
 * Удаляем служебный верхнюю панель WooCommerce в панели управления WordPress.
 *
 * @see https://woocommerce.github.io/code-reference/classes/Automattic-WooCommerce-Admin-Loader.html
 * @author Code==Poetry <codeispoetry@mail.ru>
 */
add_action( 'admin_head', function (){
    remove_action( 'in_admin_header', array( 'Automattic\WooCommerce\Internal\Admin\Loader', 'embed_page_header' ) );
    print '<style>#wpadminbar + #wpbody { margin-top:0; }</style>';
});

Шаг за шагом

Исследуем элемент этой верхней части (header)

Исследуем элемент этой верхней части

Видим идентификатор, за которой и можно зацепиться. Переходим в директорию с плагином WooCommerce и ищем пофайловым поиском соответствие. Находим его в файле класса Loader:

Loader Class

Этот элемент находится в методе embed_page_header(), который вызывается 1 раз. Исследуем файл и обнаруживаем его в конструкторе класса:

конструктор класса лоадер

Далее нам необходимо удалить этот, который закреплен за хуком in_admin_header. При помощи функции remove_action удалим этот метод. Вместо __CLASS__ необходимо указать пространство имён + название класса:

Image 00000020 - Как удалить верхнюю панель в админке у WooCommerce?

Получаем:

remove_action( 'in_admin_header', array( 'Automattic\WooCommerce\Internal\Admin\Loader', 'embed_page_header' ) );

P.S. Вполне возможно пространство имён в новых версиях может измениться, но принцип я думаю ясен.

Далее, «вешаем» этот «экшен» на событие происходящее только в верхней части панели администратора.

add_action( 'admin_head', function (){

    remove_action( 'in_admin_header', array( 'Automattic\WooCommerce\Internal\Admin\Loader', 'embed_page_header' ) );

});

И это даёт уже результат! Правда с небольшим нюансом.

Image 00000021 - Как удалить верхнюю панель в админке у WooCommerce?

Панель удалилась, но осталось пространство, которое явно нам ни к чему. Инспектируем эту область и находим нужное нам правило, которое и создаёт этот отступ:

Image 00000022 - Как удалить верхнюю панель в админке у WooCommerce?

Дополним наш код строчкой, которая при помощи языковой конструкции print выведет строчку дополнительного стиля, в котором благодаря новому правилу мы избавляемся от отступа.