π Bedrock + Timber Π΄Π»Ρ ΠΌΠΈΠ΄Π» WordPress ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΡΠ»ΠΈ Π²Ρ ΡΠΆΠ΅ ΠΏΠΈΡΠ΅ΡΠ΅ Π½Π° WordPress ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ΄Π½ΡΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΡΡΠΎΠΈΡ ΡΠ°Π·Π»ΠΎΠΆΠΈΡΡ Bedrock ΠΈ Timber ΠΏΠΎ ΠΏΠΎΠ»ΠΎΡΠΊΠ°ΠΌ.
πΉ Π¨Π°Π³ 1. Bedrock β ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° WordPress
Bedrock ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠΈΡΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ core, ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· Composer, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ.
Π‘ΡΡΡΠΊΡΡΡΠ°:
- ΠΡΡ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠ΅ β ΡΠ΅ΠΌΡ ΠΈ ΠΏΠ»Π°Π³ΠΈΠ½Ρ. Core Π½Π΅ ΡΡΠΎΠ³Π°Π΅ΠΌ.
- vendor/ + composer.json β ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½ΠΈΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠΌΠΈ.
- .env β Ρ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ, ΠΊΠ»ΡΡΠ΅ΠΉ API, URL.
πΉ Composer ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² ΡΠ΅ΡΠ΅Π· WPackagist:
composer require wpackagist-plugin/akismet
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π²ΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
composer install
Π‘ΠΎΠ²Π΅ΡΡ Π΄Π»Ρ ΠΌΠΈΠ΄Π»Π°:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°Π²ΡΠΎΠ·Π°Π³ΡΡΠ·ΠΊΡ Composer Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΡΠΈΠ»ΠΈΡ (autoload Π² composer.json).
- Π€ΠΈΠΊΡΠΈΡΡΠΉΡΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² β ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ.
πΉ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ΅ΡΠ΅Π· .env
ΠΡΠΈΠΌΠ΅Ρ .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.