$ composer require inc2734/wp-view-controller
<?php
// in functions.php
new Inc2734\WP_View_Controller\Bootstrap();
<?php
// in page template
use Inc2734\WP_View_Controller\Bootstrap;
Bootstrap::layout( 'right-sidebar' );
Bootstrap::render( 'front-page' );
themes/your-theme-name/
├─ vendor # → Composer packages (never edit)
├─ page-template # → Custom page templates directory
├─ templates # → Base templates directory
│ ├─ layout
│ │ ├─ wrapper # → Layout templates
│ │ ├─ header # → Header templates
│ │ ├─ sidebar # → Sidebar templates
│ │ └─ footer # → Footer templates
│ ├─ view # → View templates
│ └─ static # → Static view templates
└─ index.php, page.php ect...
The lyout template requires <?php $_view_controller->view(); ?>
.
Loading /templates/view/content-{post-type}.php
for the view template.
Loading /templates/view/content.php
when /templates/view/content-{post-type}.php
isn't exists.
Loading /templates/view/archive-{post-type}.php
for the view template.
Loading /templates/view/archive.php
when /templates/view/archive-{post-type}.php
isn't exists.
Tries to load the view template according to the URL. For example when URL is http://example.com/foo/bar, tries to laod from /templates/static/foo/bar.php
or /templates/static/foo/bar/index.php
.
use Inc2734\WP_View_Controller\Bootstrap;
Bootstrap::layout( 'right-sidebar' );
Bootstrap::render( 'content', 'news' );
This method is an extension to get_template_part()
.
/**
* Change config path
*
* @param string $path
* @return string $path
*/
add_filter(
'inc2734_wp_view_controller_config_path',
function( $path ) {
return $path;
}
);
/**
* Define and return the content before loading the template.
* If a string is returned, the template will not load.
*
* @param null $html
* @param string $slug
* @param string $name
* @param array $vars
* @return string
*/
add_filter(
'inc2734_wp_view_controller_pre_template_part_render',
function( $html, $slug, $name, $vars ) {
return $html;
},
10,
4
);
/**
* Customize the rendered HTML
*
* @param string $html
* @param string $slug
* @param string $name
* @param array $vars
* @return string
*/
add_filter(
'inc2734_wp_view_controller_template_part_render',
function( $html, $slug, $name, $vars ) {
return $html;
},
10,
4
);
/**
* Change layout file
*
* @param string $layout The layout file template slug
* @return string
*/
add_filter(
'inc2734_wp_view_controller_layout',
function( $layout ) {
return $layout;
}
);
/**
* Change view file
*
* @param string $view The view file template slug
* @return string
*/
add_filter(
'inc2734_wp_view_controller_view',
function( $view ) {
return $view;
}
);
/**
* Customize config values
*
* @param array $values
* @return array
*/
add_filter(
'inc2734_wp_view_controller_config',
function( $values ) {
return $values;
}
);
/**
* Change controller
*
* @param string $template
* @return string
*/
add_filter(
'inc2734_wp_view_controller_controller',
function( $template ) {
return $template;
}
);
/**
* Customize template part args
*
* @param array $args
* @var string $slug
* @var string $name
* @var array $vars
* @return array
*/
add_filter(
'inc2734_wp_view_controller_get_template_part_args',
function( $args ) {
return $args;
}
);
/**
* Customize root hierarchy
*
* @param array $hierarchy
* @param string $slug
* @param string $name
* @param array $vars
* @return array
*/
add_filter(
'inc2734_wp_view_controller_template_part_root_hierarchy',
function( $hierarchy, $slug, $name, $vars ) {
return $hierarchy;
},
10,
4
);
/**
* You can specify a template for fallback
*
* @param string|null $fallback_slug
* @param array $relative_dir_paths
* @param string $slug
* @param string $name
* @return string|null
*/
add_filter(
'inc2734_wp_view_controller_located_template_slug_fallback',
function( $fallback_slug, $relative_dir_paths, $slug, $name ) {
return $fallback_slug;
},
10,
4
);
/**
* Change rendered type.
*
* loop ... Loading in the WordPress loop
* direct ... Simply loading
*
* @param string $render_type loop or direct
* @return string
*/
add_filter(
'inc2734_wp_view_controller_render_type',
function( $render_type ) {
return $render_type;
}
);
/**
* Define template
*
* @deprecated
*
* @param array $vars
* @return void
*/
add_action(
'inc2734_wp_view_controller_get_template_part_<slug>-<name>',
function( $vars ) {
?>
HTML
<?php
}
);
/**
* Define template
*
* @deprecated
*
* @param string $name
* @param array $vars
* @return void
*/
add_action(
'inc2734_wp_view_controller_get_template_part_<slug>',
function( $name, $vars ) {
?>
HTML
<?php
},
10,
2
);
/**
* Fire before template rendering
*
* @param array $args
*/
add_action(
'inc2734_wp_view_controller_get_template_part_pre_render',
function( $args ) {
// Do something
}
);
/**
* Fire after template rendering
*
* @param array $args
*/
add_action(
'inc2734_wp_view_controller_get_template_part_post_render',
function( $args ) {
// Do something
}
);
/**
* If return false, do not expand get_template_part().
* The various hooks that extend get_template_part added by this library will no longer be available.
*
* @param boolean $expand
* @param array $args
* @return boolean
*/
add_filter(
'inc2734_wp_view_controller_expand_get_template_part',
'__return_false'
);