Category: Backend Processes

  • Перенос сайту про production (live)

    Видалення тестових та технічних даних

    Технічні Post Types

    При створенні технічного post type необідно перевітири те, щоб вони не потрапили до індексу. Додатково треба перевірити sitemaps.xml, які створює SEO плагін (зазвичай - це Yoast Seo):

    image-20241129-135237.png

    Технічні (тестові) сторінки та пости

    (синяя звезда) Відсутність тестових сторінок\постів aбо зі статусом Draft.

    (синяя звезда) Відсутність такових сторінок в Trash розділі - їх треба видалити повністью.

    (синяя звезда) Упевнитись, що подібні сторінки не потрапили до індексу.

    Технічні медіафайли

    Технічними медіафайлами можуть вважатись тимчасові зображення для тестів, зайві логотипи або файли, які не використовуються в контенті сайту.

    (синяя звезда) Необхідно видалити їх у розділі Media Library, включаючи ті, які знаходяться в Trash.

    Видалення данних про Che IT

    (синяя звезда) Відсутність email з доменом cheitgroup.com:

    • У налаштуваннях сайту (Settings → General).

    • У тестових заявках (якщо дані зберігаються в адмінці через контактні форми).

    • У профілях користувачів WordPress (Users → All Users).

    (синяя звезда) Відсутність інформації про cheitgroup.com в файлі themes/general/style.css

    (синяя звезда) Заміна превью нашої темиimage-20241129-151950.png на прев'ю - скріштот головної сторінки дазайну проекту

  • SourceTree Desktop App

    Програма для роботи з Git репозиторіями та управлінням локальними комітами, дуже добре підходить для вирішення конфліктів під час мерж-ріквестів.

    Скачати її можна за адресою https://www.sourcetreeapp.com/
    Можна працювати паралельно через консоль IDE та git, інтегрований в IDE.

    Додавання проекту

    Необхідно натиснути на + і додати новий проект вказавши папку з репозиторієм:

    image.psd (1).pngimage.psd (3).png

    Корисні кейси

    Додавання в коміт тільки частини файлу (а не весь змінений файл). Це зручно коли частина коду написана і перевірена, а частина логіки ще в розробці.

    image.psd (4).png

    Під час роботи з файлами json ACF відслідковувати, чи не видаляється щось зайве (це особливо важливо, якщо на 1 проекті кілька розробників і є проблеми із синхронізацією)

    image.psd (5).png

    Переглядати зміни від фронт розробників по git graph (особливо за відсутності проставленого TODO)

    image.psd (6).png

    Під час винекненні конфліктів їх легше фіксити, бо програма підсвічує файли, що не проходять і зміни, які є в конфлікті

  • ACF Fields

    Select

    Обов'язково повинена бути виставлена галочка Stylized UI

    image-20241031-134237.png

    True\False

    Обов'язково повинена бути виставлена галочка Stylized UI

    image-20241031-133111.png

    Repeater

    Необхідно перейменувати label кнопки, щоб візуально було зрозуміло, що сами ми додаємо:

    • Items → Add Item

    • Slides → Add Slide

    • Sections → Add Section

    image-20241031-135143.png

    Relationship

    Обов'язково треба звертати увагу на те:

    • щоб був виставлений статус Published

    • щоб були вибрані необхідні Post Type (якщо їх більше 2х, то ставимо галочку Filters → Post Type, якщо один - то галочка не потрібна)

    image-20241031-132209.png

    Обов'язково повинен бути виставлена галочка Featured Image

    image-20241031-132019.png

    Post Object

    Додавання форми плагіну Contact Form 7 необхідно робити тільки через тип Post Object

    image-20241204-155058.png

  • LFTP deploying processing

    Змінні

    Змінні задаються в налаштуваннях проекту на Gitlab. Отримати дані можна з паспорту проекту в JIRA

    image-20240710-083055.png

    image-20240710-083538.png

    Для налаштування LFTP використовуємо такі змінні:

    DOMAIN – домене ім’я проекту на stage без вказання протоколу (прикл. heylocate.dev.cheitgroup.com)

    USER_NAME ім’я користувача для підключення на stage сервер

    PASSWORD – пароль для підключення на stage сервер

    LOCAL_DIR – шлях до папки теми на gitlab з кореня проекту (прикл. wp-content/themes/heylocate)

    REMOTE_DIR – повний шлях до папки теми на stage сервері з кореневого каталогу (прикл. /home/heylocate/web/heylocate.dev.cheitgroup.com/public_html/wp-content/themes/heylocate)

    при підключення по FTP кореневим каталогом може бути коренева папка користувача

    PROD_SERVER – доменне ім’я prod серверу без вказання протоколу

    PROD_USERNAME – ім’я користувача для підключення на prod

    PROD_PASSWORD – пароль для підключення prod

    PROD_REMOTE_DIR – повний шлях до папки теми на prod сервері з кореневого каталогу

    PROD_PRIVATE_KEY – містить значення ssh private key для підключення до серверу (задається лише у випадку підключення з ключем)

    Налаштування автодеплою

    Перш ніж робити налаштування – робимо копію теми на сервері!

    Для налаштування автодеплою на проекті потрібно у відповідній гілці stage або production в корені, додати файл .gitlab-ci.yml

    Додати цей файл у виключення в .gitignore !.gitlab-ci.yml

    Конфігурація .gitlab-ci.yml

    В залежності від того, яка це гілка stage або production в конфігурація ви будете використовувати відповідні змінні. Також, в залежності від налаштувань сервера, можливі різні сценарії підключення.

    Варіанти конфігурації файлу для автодеплою на prod сервери різних налаштувань

    Підключення по SSH з паролем

    image: ubuntu:22.04
    
    before_script:
      - apt-get update -qy
      - apt-cache policy lftp
      - apt-get install -y lftp
      - pwd
    deploy_production:
      stage: deploy
      script:
        - lftp -v
        - lftp -e "set sftp:auto-confirm yes; open sftp://$PROD_SERVER; user $PROD_USERNAME $PROD_PASSWORD; mirror -X .* -X .*/ -X vendor/ --reverse --verbose --delete $LOCAL_DIR $PROD_REMOTE_DIR; bye"
        

    sftp:// – протокол підключення

    Підключення по SSH з ключем

    deploy-production:
      image: ubuntu:22.04
      stage: deploy-stage-online
      interruptible: true
      environment: stage-oneline
      before_script:
        - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
        - eval $(ssh-agent -s)
        - echo "$PROD_PRIVATE_KEY" | tr -d '\r' | ssh-add -
        - mkdir -p ~/.ssh
        - chmod 700 ~/.ssh
      script:
        - apt-get update -y && apt-get install lftp -y
        - lftp -e "set sftp:auto-confirm yes; set sftp:connect-program 'ssh -a -x -p 3022'; mirror -X .* -X .*/ -X vendor/ --delete --reverse --verbose $LOCAL_DIR $PROD_REMOTE_DIR; bye" -u $PROD_USERNAME, sftp://$PROD_SERVER

    3022 – порт, до якого встановлюється з’єднання

    sftp:// – протокол підключення

    Підключення по FTP

    image: ubuntu:22.04
    
    before_script:
      - apt-get update -qy
      - apt-cache policy lftp
      - apt-get install -y lftp
      - pwd
    deploy_production:
      stage: deploy
      script:
        - lftp -v
        - lftp -e "set ftp:use-feat off; set ftp:passive-mode on; set ssl:verify-certificate no; mirror -X .* -X .*/ -X vendor/ --reverse --verbose --delete $LOCAL_DIR $PROD_REMOTE_DIR; bye" -u $PROD_USERNAME,$PROD_PASSWORD ftp://$PROD_SERVER
    

    ftp:// – протокол підключення

    Використання параметра –delete дозволяє повністю синхронізувати gitlab із сервером. Та це означає, що все, що є на сервері, але нема в gitlab буде видалено. Тому при налаштуванні автодеплою необхідно бути уважними при вказанні шляхів у змінних та звіряти вміст папки теми на сервері та gitlab.

    Якщо необхідно додати щось у виключення, це можна зробити за допомогою атрибуту -X
    В такому разі ваші дані видалено не буде прикл. -X vendor/

    Перший деплой рекомендується робити без параметра --delete аби всі файли синхронізувались. Після того додаємо --delete та дивимось, чи було якісь файли з серверу видалено та не перезаписано.

    image-20240802-082800.png

    image-20240802-082354.png

    Якщо це щось критично важливе – їх необхідно добавити в гілку з якої ви робите деплой аби вони знову потрапили на сервер.

  • WordPress Developer Onboarding Checklist

    Привіт! Ти вже залетів на борт, ознайомився з HR процесами і готовий вриватись у роботу?
    Чудово, let’s go! (синяя звезда)

    1. Переконайся, що у тебе є наступні ресурси для успішного старту:

    (синяя звезда) Створена корпоративна пошта

    (синяя звезда) Доступ до Slack

    (синяя звезда) Доступ до корпоративного GitLab

    (синяя звезда) Доступ до Jira & Confluence

    (синяя звезда) Конфігураційний файл для внутрішньої мережі VPN

    (синяя звезда) Інтегруй свій акаунт TimeTracker та Jira, за допомогою цієї інструкції

    2. Твої next steps та плани на перший тиждень

    (синяя звезда) HR onboarding

    (синяя звезда) Ознайомлення з цим файлом та документацією WordPress розробника

    (синяя звезда) 1-2-1 з Oleh Honcharuk (Tech lead)

    • Обговорення твого попереднього досвiду роботи та тих проектiв\задач, над якими доведеться працювати найближчим часом

    • Дізнаєшся більше про команду, компанію та її процеси

    (синяя звезда) Заплановані дзвінки з командою:

    • Раз на два тижні в четверг о 16:00 – загальний кол для всіх WP Developers, де ми обговорюємо поточні проекти, новини, нововведення тощо.

    • Раз на три тижні (час домовлений) – 1-2-1 з Oleh Honcharuk (Tech lead)

    3. Трошки загальної інформації

    Куди звертатися, якщо виникли питання:

    • Oleh Honcharuk (Tech lead) – питання по робочих процесах, проектах, flow та всьому що стосується розробки + твій особистий гід в подорожі по онбордингу(синяя звезда)

    • Tanya Dukhno (HR) або Kateryna Nedak (HR) – як взяти вихідний/лікарняний/відпустку, які в нас є плюшки та як ними скористатися, виникла будь-яка проблема робочого характеру, або ж потрібна підтримка. Також усю цю інформацію можна подивитись тут

    • Julia (finance) – допомога з ФОПами та будь-які фінансові питання

    • Management: Alex (CEO), Ivan (BA), Alec (Front-end), Oleh (Tech lead)

    Наші канали в Slack – що та де знаходиться:

    • #general – тут знаходяться всі сповіщення про спільні колли, дні народження, вихідні, свята, воркшопи та всі важливі поінти, що стосуються організаційних моментів та робочих процесів

    • #developers_wp – чат з усіма WordPress девелоперами та лідами BE розробки. У цьому каналі можна буде знайти всі сповіщення про плани, поточні новини та події, а також попросити пораду або консультацію з питання, яке Вас цікавить.

    4. Документація, що буде потрібна на початок для ознайомлення з процесами

    (синяя звезда) Корисні лінки:

    Пам’ятай! Ми завжди раді твоєму фідбеку про процеси, проекти, та загалом про будь-які нюанси, які стосуються покращення та росту нашої компанії – тому don’t be shy і давай разом розвиватись та творити щось дійсно класне (синяя звезда)

    Welcome on board! (синяя звезда)

  • BE Code stylе

    Завжди можна подивитися детальну інформацію в документації, нижче описані моменти, на які буде звернено увагу під час code review. Це все для більшої організації коду, його читабельності та підтримки

    Коментарі

    /**
    * The comments language is English only:)
    **/

    Функції

    Найменування

    Для забезпечення єдності та зрозумілості коду в наших проектах ми дотримуємося стандарту іменування функцій, відомого як snake_case. Наприклад custom_footer_message();

    Унікальнiсть назви функції домагаемось через використання префікса che_

    Наприклад che_show_admin_preview_image

    Типізація даних і значення за замовчуванням

    Для підвищення надійності та передбачуваності роботи коду необхідно вказувати типи даних, що передаються і повертаються

    /**
     * Show preview image in admin when hover on a block
     *
     * @param string $type The type of preview.
     * @param array $blocks A list of blocks to show previews for.
     *
     * @return bool True on success, false on failure.
     */
    function che_show_admin_preview_image(string $type = '', array $blocks = []): bool {
      
      // Other code here...

    Ранній вихід із функції

    Намагаємося широко використовувати практику раннього повернення з функції.

    function che_show_admin_preview_image(string $type = '', array $blocks = []): bool {
        if (empty($blocks)) {
            return false;
        }
    
        // Other logic here...
    
        return true;
    }

    Hooks

    Callbacks

    Для покращення читабельності та підтримки коду, необхiдно слідувати наступним практикам

    1. Якщо callback функція коротка і використовується лише в одному місці, її можна оголосити безпосередньо всередині виклику add_action() або add_filter(). Це спрощує читання коду, оскільки одразу видно, що робить колбек.

      Приклад хука add_action()з анонімною функцією

      add_action('wp_footer', function() {
          // Get the current year
          $year = date('Y');
          
          // Prepare the copyright text for translation
          $text = sprintf(__('© %s. All rights reserved.', 'your-text-domain'), $year);
          
          echo '<div class="copyright">' . $text . '</div>';
      });
      
    2. Окремі callback функції з великим функціоналом, які можуть використовуватись в iншому мicцi, оголошуються до виклику хука!

      function che_remove_wp_version_strings( string $src = '' ): string {
      
      	if ( empty( $src ) ) {
      		return $src;
      	}
      	
      	global $wp_version; 
      
      	$parse_url = parse_url( $src, PHP_URL_QUERY );
      	parse_str( $parse_url, $query );
      
      	if ( ! empty( $query['ver'] ) && $query['ver'] === $wp_version ) {
      		$src = remove_query_arg( 'ver', $src );
      	}
      
      	return $src;
      }
      
      add_filter( 'script_loader_src', 'che_remove_wp_version_strings' );
      add_filter( 'style_loader_src', 'che_remove_wp_version_strings' );

    If, else, short-if, foreach

    “Short-if”

    Для стислості та простоти коду намагаємося використовувати тернарний оператор (або short-if).

    Приклад зі стандартним if:

    $age = 20;
    
    if ($age > 17) {
        $status = 'adult';
    } else {
        $status = 'minor';
    }

    Оптимальніший варіант із використанням тернарного оператора

    $age = 20; 
    $status = $age > 17 ? 'adult' : 'minor';

    Isset та short-if

    //допускається
    $username = isset($username) ? $username : 'guest';
    
    //кращий варiант
    $username = $username ?? 'guest';

    Фігурні дужки або двокрапка

    Для стандартного функціоналу if-else/foreach необхідно використовувати з фігурними дужками:

    if ( $age > 17 ) {
    	$status = 'adult';
    }
    
    $list = array();
    foreach ( $liks as $link ) {
    	$list[] = $link['href'];
    }

    Для управління виведенням html коду ми використовуємо альтернативний синтаксис:

    <?php if ( ! empty( $items ) ): ?>
    	<ul>
    		<?php foreach ( $items as $item ): ?>
    			<li><?php echo $item; ?></li>
    		<?php endforeach; ?>
    	</ul>
    <?php endif; ?>

    empty() включає в себе isset()

    //тут немає помилки, але це зайва перевірка
    if ( isset( $vars[1] ) && ! empty( $vars[1] ) ) {
        //some code
    }
    
    //у цьому випадку буде достатньо
    if ( ! empty( $vars[1] ) {
    	//some code
    }

    Best Practices

    Так краще не робити

    <h3 class="title-3">
    	<?php if ( get_field( 'block_accordion_title' ) ) : ?>
    		<?php echo get_field( 'block_accordion_title' ); ?>
    	<?php endif; ?>
    </h3>

    Замість цього

    <?php if ( $block_accordion_title = get_field( 'block_accordion_title' ) ) : ?>
        <h3 class="title-3"><?php echo $block_accordion_title; ?></h3>
    <?php endif; ?>

    Або для true-false блоку

    <?php 
    $is_show = get_field( 'show_hide_block' );
    
    if ( $is_show ) : ?>
        <div>
           ...
        </div>
    <?php endif; ?>

    Екранування даних

    Детальніше в документації

    Екранування в html атрибутах

    Виключається в таких випадках

    • якщо самостійно задаємо значення

      class="<?php echo get_sub_field( 'orange' ) ? 'type-orange' : ''; ?>"
    • якщо вставляємо значення константи

      src="<?php echo ! empty( $img ) ? THEME_URL . '/img/' . $link : 'no-img.svg'; ?>"

    У всіх інших випадках (data-*, placeholder, class, id, …) використовуємо esc_attr

    <div id="id-<?php echo esc_attr($id); ?> ">

    Для екранування посилань esc_url

    <img alt="" src="<?php echo esc_url( $media_url ); ?>" />

    Для екранування інлайного js код використовуємо esc_js.

    <script type="text/javascript">
        var myVar = <?php echo esc_js( $my_var ); ?>
    </script>

    Але до такого краще не доводити, а використовувати замість цього wp_localize_script

    Форматування та стилістика

    Структура

    Намагаємося структурувати й організовувати код для поліпшення його читабельності та підтримки. Ось приклад коду, який без структури:

    $exampleList = ['item1', 'item2', 'item3'];
    $isConditionMet = true;
    if ( $isConditionMet ) {
    	echo "Condition is met.\n";
    }
    foreach ( $exampleList as $item ) {
    echo "Processing: " . $item . "\n";
    }

    Приклад до якого необхідно прагнути (код групується за призначенням, додаються коментарі та відступи):

    // Variable declarations
    $exampleList    = [ 'item1', 'item2', 'item3' ];
    $isConditionMet = true;
    
    // If statement
    if ( $isConditionMet ) {
    	echo "Condition is met.\n";
    }
    
    // Foreach loop
    foreach ( $exampleList as $item ) {
    	echo "Processing: " . $item . "\n";
    }

    Повторюваний код

    Код подібного роду

    <div class="steps">
        <?php
            get_template_part('template-parts/partials/step', 'discount', ['id' => 'step-discount']);
            get_template_part('template-parts/partials/step', 'package', ['id' => 'step-package']);
            get_template_part('template-parts/partials/step', 'overview', ['id' => 'step-overview']);
            get_template_part('template-parts/partials/step', 'contacts', ['id' => 'step-contacts']);
            get_template_part('template-parts/partials/step', 'finale', ['id' => 'step-finale']);
        ?>
    </div>

    Необхідно буде оптимізувати

    $steps = array(
    	'discount',
    	'package',
    	'overview',
    	'contacts',
    	'finale'
    );
    ?>
    
    <div class="steps">
    	<?php foreach ( $steps as $step ) : ?>
    		<?php get_template_part( 'template-parts/partials/step', $step, ['id' => 'step-' . $step]); ?>
    	<?php endforeach; ?>
    </div>

    Скрипти та стилі

    Тут можна отримати всю інформацію щодо Front-end Style Guide

    https://cheitgroup.atlassian.net/wiki/x/GoCYGw

    Намагаємося поступово позбавляти від практики додавання js коду і стилів прямо в ACF block. Зараз це можна реалізувати через функціонал додавання ресурсів для блоку.

    Кастомні стилі та скрипти для back-end

    Якщо зв'явилась необхідність використання свого кастомного *.js або *.css (рідше) файлу, то можна зробити наступне:

    • в папці frontend/assets/ необхідно створити папку backend/js чи backend/css

    • створити необхідний файл

    • підключити його:

    • спокійно працювати в цьому файлі - таким чином ми виключимо його із FE збірки

    Корисний функціонал

    Checked

    Детальніше в документації. Можна використовувати як для checkbox так i для radio полiв.

    Перевiка через if

    <input type='checkbox' name='state' value='1'
    	<?php if ( $value == 1 ) echo 'checked="checked"'; ?> />

    Використання checked

    <input type="checkbox" name="state" value="1" <?php checked( $value, 1 ); ?> />

    Selected

    Детальніше в документації. Можна використовувати як для тегу selected.

    Перевiка через if

    <select name="count">
    	<option value="one" <?php if ($count == 'one') echo 'selected="selected"'; ?>>one</option>
    	<option value="two" <?php if ($count == 'two') echo 'selected="selected"'; ?>>two</option>
    	<option value="three" <?php if ($count == 'three') echo 'selected="selected"'; ?>>three</option>
    </select>

    Використання selected

    <select name="count">
    	<option value="one" <?php selected( $count, 'one' ); ?>>one</option>
    	<option value="two" <?php selected( $count, 'two' ); ?>>two</option>
    	<option value="three" <?php selected( $count, 'three' ); ?>>three</option>
    </select>

    Best practice з selected

    <?php
    $options_values = [ 'one', 'two', 'three' ];
    ?>
    <select name="count">
    	<?php foreach ($options_values as $value) : ?>
    		<option value="<?php echo esc_attr($value); ?>" <?php selected($count, $value); ?>>
    			<?php echo $value; ?>
    		</option>
    	<?php endforeach; ?>
    </select>

    Константи для часових інтервалів

    Для зручного і зрозумілого відображення часових змінних у секундах у WordPress можна використовувати вже готові константи

    define( 'MINUTE_IN_SECONDS', 60 );
    define( 'HOUR_IN_SECONDS', 60 * MINUTE_IN_SECONDS );
    define( 'DAY_IN_SECONDS', 24 * HOUR_IN_SECONDS );
    define( 'WEEK_IN_SECONDS', 7 * DAY_IN_SECONDS );
    define( 'MONTH_IN_SECONDS', 30 * DAY_IN_SECONDS );
    define( 'YEAR_IN_SECONDS', 365 * DAY_IN_SECONDS );

    Варто звернути увагу, що ці значення є приблизними і потрібно враховувати високосні роки або місяці з 31-м днем окремо

  • WordPress CLI

    Призначення і можливості

    WP-CLI - це неймовірно корисний інструмент для розробників WordPress. Можна повністю керувати сайтом і автоматизувати процес розробки, користуючись однією лише консоллю (браузер і SQL середовище запускати не потрібно). Малий список робіт, який можна робити за допомогою WP-CLI:

    • Оновлення ядра системи

    • Оновлення\додавання\видалення плагінів

    • Додавання\видалення\зміна користувачів - зокрема їхніх паролів і ролей

    • Пошук і заміна контенту в БД

    • Генерація контенту

    • Отримання необхідних даних

    • Очищення транзитного кешу

    • Робота з CRON задачами

    Налаштування на Windows

    1. На диску С:\ необхідно створити папку wp-cli

    2. Завантажити в неї файл wp-cli.phar  https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar 

    3. Створити в ній файл wp.bat з таким вмістом.

      @ECHO OFF
      
      php "c:/wp-cli/wp-cli.phar" %*
    4. Для того щоб команди виконувалися не тільки в стандартній консолі Windows, а ще й GIT Bash, необхідно створити файл wp (без розширень) з таким вмістом

      #!/usr/bin/env sh
      
      dir=$(d=${0%[/\\]*}; cd "$d"; pwd)
      
      # See if we are running in Cygwin by checking for cygpath program
      
      if command -v 'cygpath' >/dev/null 2>&1; then
      
         # Cygwin paths start with /cygdrive/ which will break windows PHP,
      
         # so we need to translate the dir path to windows format. However
      
         # we could be using cygwin PHP which does not require this, so we
      
         # test if the path to PHP starts with /cygdrive/ rather than /usr/bin
      
         if [[ $(which php) == /cygdrive/* ]]; then
      
             dir=$(cygpath -m $dir);
      
         fi
      
      fi
      
      dir=$(echo $dir | sed 's/ /\ /g')
      
      "${dir}/wp-cli.phar" "$@"
    1. Додати новий шлях у змінну PATH. Необхідно виконати в командному рядку команду setx path "%path%;C:\wp-cli" 

    Local WP || OpenServer

    Для коректної роботи CLI необхідно трохи підправити wp-config.php, а саме змінити значення змінної DB_HOST з localhost на 127.0.0.1:port.

    У Local WP у кожного сайту свій порт, подивитися можна тут:

    image-20240322-084207.png

    У Local WP є можливість працювати відразу з попередньо встановленим WP CLI:

    В OpenServer порт 1 для всіх сайтів, можна подивитися тут: Налаштування → Сервер.

    Приклад команд

    Якщо все налаштували правильно, то тепер можна приступати до роботи. Відкрийте термінал у кореневій папці WordPress і введіть команду wp --info

    image-20240326-112826.png

    Робота з плагінами

    Отримання списку поточних плагінів: wp plugin list

    image-20240326-112921.png

    Зміна користувача

    Зміна пароля та ролі користувача admin

    wp user update admin --user_pass=new_pass --role=author

    Створення нового користувача: якщо не вказати пароль, то система його сама генерує

    wp user create prog prog@prog.com--role=author

    image-20240326-113225.png

    Генерація контенту

    Створення 30 нових сторінок: wp post generate --count=30 --post_type=page

    Створення 10 нових постів із заповненим полем post_content (у даному випадку заповнюється т.зв. "рибою")

    curl http://loripsum.net/api/5 | wp post generate --post_content --count=10 --post_type=page

    Робота з CRON

    Відобразити список усіх CRON завдань: wp cron event list

    image-20240326-113404.png

    Матеріали та корисні посилання

  • IDE

    У більшості випадків розробники нашої компанії використовують продукти від компанії JetBrains.

    Якщо Ви працюєте з Front-End розробкою, то Вам підійде

    https://www.jetbrains.com/webstorm/download/#section=windows

    Якщо Ви працюєте з Back-End розробкою, то Вам підійде

    https://www.jetbrains.com/phpstorm/download/#section=windows

    Після встановлення IDE зверніться до свого ліда, який надасть Вам ліцензійний ключ

  • Plugins

    Основнi плагiни теми

    Усі необхідні для роботи теми плагіни можна завантажити в git репозиторії

    ACF PRO 6.2.7

    Documentation

    License Key: b3JkZXJfaWQ9MTMwNzYwfHR5cGU9ZGV2ZWxvcGVyfGRhdGU9MjAxOC0wNS0wNyAxMzoxNTowMw==

    ACF Theme Code Pro 2.5.6

    ACF Theme Code Pro Site

    License Key: 6b08e9014c99632ca31bb92434e43f8a

    WP Rocket 3.15.9

    Documentation

    Налаштування ліцензії у файлі wp-config.php

    if ( ! defined( 'WP_ROCKET_KEY' ) ) {
        define( 'WP_ROCKET_KEY', 'd7d79233');
    }
    if ( ! defined( 'WP_ROCKET_EMAIL' ) ) {
        define( 'WP_ROCKET_EMAIL', 'honcharuk.o@gmail.com' );
    }

    WP Migrate 2.6.11

    Documentation

    License Key: 5eb68b4d-982c-4bb1-8ba3-5592776d7a3c

    Забороненi для використання плагiни

    Плагін

    Причина

    https://wordpress.org/plugins/all-in-one-wp-migration/

    Є обґрунтована підозра на те, що цей плагін може поширювати бекдори та зловмисний код. Для переносу необхiдно використовувати плагiн WP-Migrate-2.6.11

    https://ru.wordpress.org/plugins/wp-file-manager/

    Якщо бачите цей плагін на нашому stagе сайті, то його необхідно видалити (щоб не порушити роботу CI\CD).

    Забороняється працювати з файлами Production сайту клієнта через цей плагін.

  • Gitlab

    Ми використовуємо власне сховище репозиторіїв у GitLab.

    Воно знаходиться за адресою gitlab.cheitgroup.com

    Разом с конфігураційним .ovpn файлом Ви автоматично отримаєте Email листа з доступом до нашого корпоративного GitLab. Необхідно буде зайти за наданими доступами та встановити собі новий пароль.

    Після чого за посиланням https://gitlab.cheitgroup.com/-/profile/account обов’язково налаштувати двухфакторну авторизацію.

    Тут можна ознайомитися з нашим GitLab Flow