Write WordPress theme templates with familiar ease and modern features.
Meadow is a theme templating solution, aiming to find a balance between native WordPress concepts and power of Twig dedicated templating language.
Require package in your theme project with Composer:
composer require rarst/meadow
Instantiate object some time during theme load:
$meadow = new \Rarst\Meadow\Core;
$meadow->enable();
Meadow follows conventions of WordPress template hierarchy:
- for example
index.php
becomesindex.twig
. {{ get_header() }}
will look forheader.twig
(with fallback toheader.php
)- and so on.
Template Tags API (and PHP functions in general) are set up to work transparently from Twig templates:
{{ the_title() }}
WordPress filters set up to be available as Twig filters:
{{ 'This is the title'|the_title }}
Full range of Twig functionality is naturally available, including template inheritance:
{# single.twig #}
{% extends 'index.twig' %}
{% block entry_title %}
<div class="page-header">{{ parent() }}</div>
{% endblock %}
To inherit parent template in child theme prepend it with folder's name:
{# child-theme/index.twig #}
{% extends 'parent-theme/index.twig' %}
Meadow attempts not just "map" WordPress to Twig, but also meaningfully extend both to improve historically clunky WP constructs.
This is primarily achieved by implementing custom Twig tags, abstracting away complexities for specific tasks.
{% loop %}
<h2><a href="{{ the_permalink() }}">{{ the_title() }}</a></h2>
{{ the_content() }}
{% endloop %}
{% loop { 'post_type' : 'book', 'orderby' : 'title' } %} {# expression for arguments #}
<h2><a href="{{ the_permalink() }}">{{ the_title() }}</a></h2>
{{ the_content() }}
{% endloop %}
<ul class="comment-list">
{% comments %}
<li>
{{ comment_text() }}
{# no </li> - self-closing #}
{% endcomments %}
</ul>
In Hybrid Wing theme (work in progress):
MIT