πŸš€ Bedrock + Timber для ΠΌΠΈΠ΄Π» WordPress Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

Если Π²Ρ‹ ΡƒΠΆΠ΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π½Π° WordPress ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², стоит Ρ€Π°Π·Π»ΠΎΠΆΠΈΡ‚ΡŒ Bedrock ΠΈ Timber ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡ‡ΠΊΠ°ΠΌ.

πŸ”Ή Π¨Π°Π³ 1. Bedrock β€” соврСмСнная структура WordPress

Bedrock ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Ρ‡ΠΈΡΡ‚ΡƒΡŽ структуру ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ кастомного ΠΊΠΎΠ΄Π° ΠΈ core, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Ρ‡Π΅Ρ€Π΅Π· Composer, бСзопасный Π΄Π΅ΠΏΠ»ΠΎΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°:

πŸš€ Bedrock + Timber для ΠΌΠΈΠ΄Π» WordPress Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°
  • Всё кастомноС β€” Ρ‚Π΅ΠΌΡ‹ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ‹. Core Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π΅ΠΌ.
  • vendor/ + composer.json β†’ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ внСшними зависимостями.
  • .env β†’ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠ»ΡŽΡ‡Π΅ΠΉ API, URL.

πŸ”Ή Composer ΠΈ зависимости

Установка ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· WPackagist:

composer require wpackagist-plugin/akismet

Установка всСх зависимостСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

composer install

Π‘ΠΎΠ²Π΅Ρ‚Ρ‹ для ΠΌΠΈΠ΄Π»Π°:

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ Composer для своих классов ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ (autoload Π² composer.json).
  • ЀиксируйтС вСрсии ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² β†’ повторяСмый Π΄Π΅ΠΏΠ»ΠΎΠΉ.

πŸ”Ή ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Ρ‡Π΅Ρ€Π΅Π· .env

πŸš€ Bedrock + Timber для ΠΌΠΈΠ΄Π» WordPress Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ .env:

DB_NAME=wordpress

DB_USER=root

DB_PASSWORD=root

WP_HOME=http://localhost

WP_SITEURL=http://localhost/wp

  • ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для dev/staging/prod.
  • Никогда Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² ΠΊΠΎΠ΄Π΅.

Мидл-Π½Π°Π²Ρ‹ΠΊ: ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ .env, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π»Π΅Π³ΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ окруТСния ΠΈ Π½Π΅ ΡΠ»ΠΎΠΌΠ°Ρ‚ΡŒ Π΄Π΅ΠΏΠ»ΠΎΠΉ.

πŸ”Ή Π¨Π°Π³ 2. Timber β€” ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π° Twig

Timber отдСляСт Π»ΠΎΠ³ΠΈΠΊΡƒ PHP ΠΎΡ‚ HTML. PHP собираСт Π΄Π°Π½Π½Ρ‹Π΅ ($context), Twig ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ шаблона:

// functions.php$context = Timber::get_context();$context['post'] = new Timber\Post();Timber::render('single.twig', $context);{# single.twig #}

{{ post.title }}

{{ post.content }}

Мидл-Π½Π°Π²Ρ‹ΠΊ: ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ WordPress Π² $context для Twig, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹ Π½Π΅ Ρ‚Ρ€ΠΎΠ³Π°Π»ΠΈ PHP.

πŸ”Ή Π Π°Π±ΠΎΡ‚Π° с CPT ΠΈ таксономиями

register_post_type('product', [ 'label' => 'Products', 'public' => true, 'supports' => ['title','editor','thumbnail'],]);{% for product in products %}

{{ product.title }}

{{ product.content }}

{% endfor %}

Timber ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ с кастомным ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠΌ ΠΈ таксономиями Π±Π΅Π· смСшивания Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ.

πŸ”Ή ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈ partials

{# header.twig #}

{{ site.name }}{# footer.twig #}

{{ site.description }}

{# main.twig #}{% include 'header.twig' %}{{ post.content }}{% include 'footer.twig' %}

Π‘ΠΎΠ²Π΅Ρ‚: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ partials ΠΈ blocks β†’ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚Π΅ DRY ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².

πŸ”Ή Π§Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΌΠΈΠ΄Π»Ρƒ

  • Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Bedrock-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ локально.
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Composer для управлСния ΠΏΠ»Π°Π³ΠΈΠ½Π°ΠΌΠΈ ΠΈ зависимостями.
  • ΠΠ°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ .env для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΉ.
  • ΠŸΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΌΡ‹ Π½Π° Timber/Twig, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ WordPress Π΄Π°Π½Π½Ρ‹Π΅ Π² $context.
  • Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с CPT ΠΈ таксономиями Ρ‡Π΅Ρ€Π΅Π· Timber.
  • Π Π°Π·Π±ΠΈΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ Π½Π° partials ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ для DRY ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ.

πŸ’‘ Π˜Ρ‚ΠΎΠ³: Bedrock + Timber = соврСмСнная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, чистый ΠΊΠΎΠ΄, ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°, Π³Π΄Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Twig, Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· PHP.

1
ΠΠ°Ρ‡Π°Ρ‚ΡŒ Π΄ΠΈΡΠΊΡƒΡΡΠΈΡŽ