Laravel blade and view for WordPress with custom directives.
To get started install the package as described below in Installation.
To use the tool have a look at Usage
Install with composer
composer require morningtrain/wp-view
PHP Loader is used to load and initialize all Hooks
For an overview see the official Laravel documentation
To set the main directory for views
\Morningtrain\WP\View\View::setup(__DIR__ . "/resources/views");
echo \Morningtrain\WP\View\View::render('person',['name' => 'John','email' => 'john@doe.com']);
You may register a namespaced for a set of views. This is especially useful when writing plugins as you may group all
your plugin views and not worry about duplicate naming. Views in a namespace may be overwritten in the main namespace as
long as you use first()
instead of render()
.
Eg. View::first(['vendor/myPlugin/myview','myPlugin::myview])
will render from the vendor dir first if the view
exists, thereby allowing theme authors to overwrite this view when necessary.
echo \Morningtrain\WP\View\View::addNamespace('myPlugin', __DIR__ . "/resources/views");
echo \Morningtrain\WP\View\View::render('myPlugin::person',['name' => 'John','email' => 'john@doe.com']);
This package contains some custom blade directives that you may use:
<div>
@wpauth()
Hello @username!
@else
<a>Login</a>
@endwpauth
</div>
Acts the same as : https://developer.wordpress.org/reference/functions/get_header/
The following will render the header.blade.php
view or header-small.blade.php
@header()
@header('small')
Acts the same as : https://developer.wordpress.org/reference/functions/get_footer/
The following will render the footer.blade.php
view or footer-dark.blade.php
@footer()
@footer('dark')
An easy way to enqueue an already registered script.
Using this directive is the same as calling wp_enqueue_script()
with only the handle.
@script('swiper')
<section id="my-cool-slider">
...
</section>
An easy way to enqueue an already registered stylesheet.
Using this directive is the same as calling wp_enqueue_style()
with only the handle.
@style('employees')
<section id="employees" class="employees list">
...
</section>
Prints the username of the currently logged in user or an empty string if no one is logged in.
Caches content in a transient and uses the cached data if it exists
<div>
<h3>Cache test for post: {!! $postId !!}</h3>
@if(!empty($postId))
@cache("post_card_{$postId}")
<aside @class(['post-card', "post-card__".get_post_type($postId)])>
<h3>{!! get_the_title($postId) !!}</h3>
<p>{{ get_the_excerpt($postId) }}</p>
<span>Yes</span>
<a href="{!! get_permalink($postId) !!}">{{__('Read more','domain')}}</a>
</aside>
@endcache
@else
<p>{{__('This is not a post','domain')}}</p>
@endif
</div>
Prints a Morningtrain ReactRenderer compatible element with optional props. This makes it easy to prepare components for react to handle in the client.
@react('myComponent', [
'someData' => 'someValue'
])
The @react directive also supports a child view that will be rendered inside the component-wrapper until the react component is rendered. This is especially useful for skeletons and to avoid popping ins.
@react('myComponent', [
'someData' => 'someValue'
],
'my-skeleton-view'),
['skeletonProp' => 'skeletonValue']
The MIT License (MIT). Please see License File for more information.