Skip to content

Instantly share code, notes, and snippets.

@Log1x
Created September 20, 2017 00:14
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Log1x/2a61c77c49b06af64004383c08af3410 to your computer and use it in GitHub Desktop.
Save Log1x/2a61c77c49b06af64004383c08af3410 to your computer and use it in GitHub Desktop.
<?php
namespace App;
add_action('after_setup_theme', function() {
$sage = sage('blade')->compiler();
/**
* Create @asset() Blade directive
*/
$sage->directive('asset', function ($asset) {
return "<?= App\\asset_path({$asset}); ?>";
});
/**
* Create @query() Blade directive
*/
$sage->directive('query', function ($expression) {
return "<?php \$bladeQuery = new WP_Query($expression); ?>";
});
/**
* Create @posts Blade directive
*/
$sage->directive('posts', function () {
return '<?php while ($bladeQuery->have_posts()) : $bladeQuery->the_post(); ?>';
});
/**
* Create @endposts Blade directive
*/
$sage->directive('endposts', function() {
return "<?php endwhile; wp_reset_query(); ?>";
});
/**
* Advanced Custom Fields Blade directives
*/
/**
* Create @fields() Blade directive
*/
$sage->directive('fields', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
$output = "<?php if (have_rows($expression)) : ?>";
$output .= "<?php while (have_rows($expression)) : ?>";
$output .= "<?php the_row(); ?>";
return $output;
});
/**
* Create @endFields Blade directive
*/
$sage->directive('endFields', function () {
return "<?php endwhile; endif; ?>";
});
/**
* Create @field() Blade directive
*/
$sage->directive('field', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php echo field($expression)->get(); ?>";
});
/**
* Create @getField() Blade directive
*/
$sage->directive('getField', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php return field($expression)->get(); ?>";
});
/**
* Create @hasField() Blade directive
*/
$sage->directive('hasField', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php if (field($expression)->get()) : ?>";
});
/**
* Create @endField Blade directive
*/
$sage->directive('endField', function () {
return "<?php endif; ?>";
});
/**
* Create @sub() Blade directive
*/
$sage->directive('sub', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php echo sub($expression)->get(); ?>";
});
/**
* Create @getSub() Blade directive
*/
$sage->directive('getSub', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php return sub($expression)->get(); ?>";
});
/**
* Create @hasSub() Blade directive
*/
$sage->directive('hasSub', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php if (sub($expression)->get()) : ?>";
});
/**
* Create @isSub() Blade directive
*/
$sage->directive('isSub', function($expression) {
list($name, $value) = explode(', ', strtr($expression, ['(' => '', ')' => '']));
return "<?php if (sub($name)->get() == $value): ?>";
});
/**
* Create @endSub Blade directive
*/
$sage->directive('endSub', function () {
return "<?php endif; ?>";
});
/**
* Create @layouts() Blade directive
*/
$sage->directive('layouts', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php while (have_rows($expression)) : the_row(); ?>";
});
/**
* Create @endLayouts Blade directive
*/
$sage->directive('endLayouts', function () {
return "<?php endwhile; ?>";
});
/**
* Create @layout() Blade directive
*/
$sage->directive('layout', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php if (get_row_layout() == $expression) : ?>";
});
/**
* Create @endLayout Blade directive
*/
$sage->directive('endLayout', function () {
return "<?php endif; ?>";
});
/**
* Create @group() Blade directive
*/
$sage->directive('group', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php if (have_rows($expression)) : while (have_rows($expression)) : the_row(); ?>";
});
/**
* Create @endGroup Blade directive
*/
$sage->directive('endGroup', function () {
return "<?php endwhile; endif; ?>";
});
/**
* Create @option() Blade directive
*/
$sage->directive('option', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php echo option($expression)->get(); ?>";
});
/**
* Create @hasOption() Blade directive
*/
$sage->directive('hasOption', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php if (option($expression)->get()) : ?>";
});
/**
* Create @endOption Blade directive
*/
$sage->directive('endOption', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php endif; ?>";
});
/**
* Create @options() Blade directive
*/
$sage->directive('options', function ($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
$output = "<?php if (have_rows($expression, 'options')) : ?>";
$output .= "<?php while (have_rows($expression, 'options')) : ?>";
$output .= "<?php the_row(); ?>";
return $output;
});
/**
* Create @endOptions Blade directive
*/
$sage->directive('endOptions', function () {
return "<?php endwhile; endif; ?>";
});
/**
* Create @endFields Blade directive
*/
$sage->directive('endFields', function () {
return "<?php endwhile; endif; ?>";
});
/**
* Create @shortcode() Blade directive
*/
$sage->directive('shortcode', function($expression) {
$expression = strtr($expression, ['(' => '', ')' => '']);
return "<?php echo do_shortcode($expression); ?>";
});
/**
* Create @set() Blade directive
*/
$sage->directive('set', function($expression) {
list($name, $value) = explode(', ', strtr($expression, ['(' => '', ')' => '']));
return "<?php ${$name} = {$value}; ?>";
});
/**
* Create @unset() Blade directive
*/
$sage->directive('unset', function($expression) {
list($name, $value) = explode(', ', strtr($expression, ['(' => '', ')' => '']));
return "<?php unset ${$expression}; ?>";
});
/**
* Create @extract() Blade directive
*/
$sage->directive('extract', function($expression) {
return "<?php @extract($expression); ?>";
});
/**
* Create @dump() Blade directive
*/
$sage->directive('dump', function($obj) {
return "<?php App\\dump($obj, false); ?>";
});
/**
* Create @console() Blade directive
*/
$sage->directive('console', function($obj) {
return "<?php App\\dump($obj, true); ?>";
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment