Frontend Features
Баннер

Процессы

WP BOX тема включает в себя заготовки для компиляции кода и подключения зависимостей, настроенные на определенные папки проекта.

Список процессов:

  • Компиляция React кода Gutenberg блоков, который используется при рендеринге компонентов в админке.
  • Минификация ресурсов отнсящихся к блокам, и глобальных ресурсов — скриптов и изображений.
    Динамическая регистрация и подключение ресурсов и зависимостей на основе dependencies.json, который может быть добавлен в папку блока. (Загружайте библиотеку, только если она используется блоком)
  • Парсинг и компиляция классов Tailwind, использованных в любых файлов темы.
  • Отслеживание изменений и автоматическая перекомпиляция.
	"scripts": {
		"start-tailwind": "npx tailwindcss -i ./styles/src/tailwind.css -o ./styles/dist/tailwind.css --watch=always",
		"lint-js": "npx eslint .",
		"format-js": "npx eslint --fix .",
		"gulp": "gulp",
		"start-components": "webpack --watch --config ./webpack/webpack.components.js",
		"start-gutenberg-variations": "webpack --watch --config ./webpack/webpack.gutenberg-variations.js",
		"start-gutenberg-hooks": "webpack --watch --config ./webpack/webpack.gutenberg-hooks.js",
		"start-gutenberg-scripts": "webpack --watch --config ./webpack/webpack.gutenberg-scripts.js",
		"start-gutenberg": "wp-scripts start --config ./webpack/webpack.gutenberg.js",
		"start-svg": "wp-scripts start --config ./webpack/webpack.global-svg.js",
		"start-imgs": "wp-scripts start --config ./webpack/webpack.global-images.js",
		"start": "npm-run-all --parallel start-tailwind start-gutenberg start-components start-gutenberg-scripts start-gutenberg-hooks start-gutenberg-variations gulp"
	},
В этой секции:

Поддержка Tailwind

WP BOX сразу доступен с Tailwind CSS, интергрированным в процессы разработки.

const tailwindConfig = {
	theme: {
		extend: {
			screens: {
				sm: '480px',
				md: '800px',
				lg: '1024px',
				xl: '1600px',
			},
			textColor: {
				theme: {
					base: 'var(--color-text-base)',
					link: 'var(--color-text-link)',
					hover: 'var(--color-text-hover)',
				},
			},
			backgroundColor: {
				theme: {
					'light-gray': 'var(--color-bg-light-gray)',
					'light-blue': 'var(--color-bg-light-blue)',
					white: 'var(--color-bg-white)',
					modal: 'var(--color-bg-modal)',
					'bg-hover': 'var(--color-bg-hover)',
				},
			},

Конфигурация Tailwind

Переменные объявленные в tailwind.config.js компилируются в CSS классы вместе со стандартными Tailwind классами, которые были использованы в проекте.

По умолчанию WP BOX отключает доступ к настройкам стилей внутри админки для авторов, чтобы сохранить единый стиль на всем сайте. Также это позволяет разработчику создавать новые компоненты быстрее, переиспользуя уже объявленные переменные.

Theme.json Конфигуратор

В WP BOX есть класс отвечающий за присоединение Tailwind конфигурации к theme.json, он не используется по умолчанию, потому что редактирование стилей отключено для авторов, но если он нужен вам вы можете передавать желаемые настройки из Tailwind в него через setSettings() метод в классе WPThemeConfigurator, которые затем сохраняются в файл.

Сейчас WP BOX сохраняет минимальный theme.json файл, необходимый для работы Full Site Editing функционала WordPress.

class WPThemeConfigurator {
	constructor() {
		this.$schema = 'https://schemas.wp.org/trunk/theme.json';
		this.version = 3;
		this.settings = {};
	}

	setSettings( config ) {
		this.settings = { ...this.settings, ...config };
		return this;
	}

	// Method to save configuration to theme.json file.
	saveToThemeJSON( filePath = 'theme.json' ) {
		const jsonString = JSON.stringify( this, null, 2 );

		fs.writeFileSync( filePath, jsonString );
		// eslint-disable-next-line no-console
		console.log( `Configuration saved to ${ filePath }` );
	}
}
Снимок экрана 2024-08-18 160304

Intellisense для IDE

Если вы думали как можно запомнить все эти utility классы — ответ прост — не нужно запоминать их.

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

Использование Слоев

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

Представьте, что вы хотите иметь визуально одинаковый стиль кнопок на всем сайте, но под капотом выполнять разную логику. Например кнопка, которая является просто ссылкой, и кнопка которая через ajax запрашивает данные с бэкенда. В этом случае, вероятно вы создадите 2 разных Gutenberg блока отвечающих за разное — button-link и button-script.

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

@layer components {

	.wpbox-input {
		@apply relative;

	  input {
		@apply bg-theme-white text-theme-base w-full pt-6 px-4 pb-2 rounded outline-none;
	  }
	  label {
		@apply absolute transition-all start-4 top-4 opacity-60 text-base-paragraph md:text-base-paragraph-desktop pointer-events-none;
	  }
	}

	.wpbox-button {
		@apply block whitespace-nowrap max-w-fit cursor-pointer text-theme-link hover:text-theme-hover border-2 rounded-md border-theme-link px-4 py-3.5 no-underline hover:bg-theme-bg-hover;
	}
}
В этой секции:

Gutenberg Блоки

public static function theme_gutenberg_blocks()
	{
		$blocks_parent_directory = get_template_directory() . '/blocks/';

		// Scan and register blocks from the parent theme directory
		self::register_blocks($blocks_parent_directory, false);

		if (is_child_theme()) {
			$blocks_child_directory = get_stylesheet_directory() . '/blocks/';
			// Scan and register blocks from the child theme directory
			self::register_blocks($blocks_child_directory, true);
		}
	}

Регистрация Блоков

blocks директория в папке темы содержит все ресурсы относящиеся к блокам, а класс ThemeBlocks отвечает за подключение и загрузку блоков из этой директории.

Для добавления новых блоков вам нужно следовать стилю наименования и структуру папок. Такие файлы как block.json, render.php и block.index.js размещенные в директории, и ресурсы во вложенной директории ./assets/ будут подключены и загружены.

Перегрузка Блоков, Вариации и Паттерны

Тема также предлагает еще одно решение для упрощенной и единой реализации перегрузок, вариаций и паттернов. Бэкенд классы ThemeBlocksOverrides, ThemeBlocksVariations и ThemeBlocksPatterns отвечают за поиск и подключение файлов hooks.js и filters.php, расположенных в директориях с именем блоков.

Обратите внимание на скриншот с примером, в котором создана перегрузка блока core/code, который используется на этой странице.

Block Overrides

Примеры Блоков в Проекте

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

Section: блок-контейнер, который позволяет добавить ограниченный набор вложенных дочерних блоков. Установите цвет фона секции и заполните ее другими блоками. Все секции имеют единые стили отступов, поэтому они выглядят аккуратно и визуально отделяют информацию. На всех страницах этого сайта есть секции.

Paragraph: Это стандартный блок ядра, но модифицированный для поддержки размеров и шрифтов, указанных в конфигурации Tailwind. Ненужные настройки отключены. Теперь автор статьи не ошибется при выборе цвета, шрифта и размера, а все параграфы на сайте будут выглядеть в едином стиле.

Queried Object Template: Этот блок можно использовать для изменения отображения каждого элемента в Query (например последних новостей или других элементов). Настройки родительского блока поддерживают flexbox, и вы можете выравнивать и размещать контент по своему усмотрению.

Section Menu: Этот блок автоматически создает динамическое меню из заголовков секции, в которую добавлен. Это меню остается на экране пока пользователь просматривает секцию. Нажатие на ссылки в меню плавно прокручивает экран к соответствующему заголовку в секции. Эта секция содержит такой блок, посмотрите сами!

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

Линтер Кода

Вы наверняка уже заметили в секции про процессы, что WP BOX включает конфигурации для сохранения единого стиля кода, которые настроены в соответствии с WordPress рекомендациями и работают с помощью ESLint пакетов с некоторыми небольшими изменениями, которые кажутся удобными. Линтер работает сразу после установки через CLI, а для IDE вам потребуется установить дополнение.

ESLint Support

Особенности Линтера

  • Проверка кода в реальном времени
  • CLI команда для линта всех файлов (локально или в CI/CD процессах)
  • CLI команда для автоматического исправления несложных проблем