199 lines
4.9 KiB
PHP
199 lines
4.9 KiB
PHP
<?php if ( ! defined( 'ABSPATH' ) ) {
|
|
die( 'Direct access forbidden.' );
|
|
}
|
|
|
|
/**
|
|
* Theme Includes
|
|
*/
|
|
class Solarify_Theme_Includes {
|
|
private static $rel_path = null;
|
|
|
|
private static $include_isolated_callable;
|
|
|
|
private static $initialized = false;
|
|
|
|
public static $template_directory = '';
|
|
|
|
public static $template_directory_uri = '';
|
|
|
|
public static function init() {
|
|
if ( self::$initialized ) {
|
|
return;
|
|
} else {
|
|
self::$initialized = true;
|
|
}
|
|
|
|
//theme path
|
|
self::$template_directory = SOLARIFY_THEME_PATH;
|
|
|
|
self::$template_directory_uri = SOLARIFY_THEME_URI;
|
|
// var_dump(self::$template_directory_uri);
|
|
|
|
/**
|
|
* Include a file isolated, to not have access to current context variables
|
|
*/
|
|
self::$include_isolated_callable = create_function( '$path', 'include $path;' );
|
|
|
|
/**
|
|
* Both frontend and backend
|
|
*/
|
|
{
|
|
self::include_child_first( '/helpers.php' );
|
|
self::include_child_first( '/hooks.php' );
|
|
|
|
//files from '/includes' folder - instead of auto loading with 'self::include_all_child_first' :
|
|
self::include_child_first( '/sub-includes/class-theme-comments-walker.php' );
|
|
self::include_child_first( '/sub-includes/custom-kses.php' );
|
|
self::include_child_first( '/sub-includes/icons-rt.php' );
|
|
self::include_child_first( '/sub-includes/icons-social.php' );
|
|
self::include_child_first( '/sub-includes/mod-post-likes.php' );
|
|
self::include_child_first( '/sub-includes/mod-post-views.php' );
|
|
self::include_child_first( '/sub-includes/mod-widget-adds.php' );
|
|
self::include_child_first( '/sub-includes/template-tags.php' );
|
|
self::include_child_first( '/sub-includes/woocommerce.php' );
|
|
|
|
add_action( 'init', array( __CLASS__, '_action_init' ) );
|
|
add_action( 'widgets_init', array( __CLASS__, '_action_widgets_init' ) );
|
|
}
|
|
|
|
/**
|
|
* Only frontend
|
|
*/
|
|
if ( ! is_admin() ) {
|
|
add_action( 'wp_enqueue_scripts', array( __CLASS__, '_action_enqueue_scripts' ),
|
|
20 // Include later to be able to make wp_dequeue_style|script()
|
|
);
|
|
}
|
|
}
|
|
|
|
private static function get_rel_path( $append = '' ) {
|
|
if ( self::$rel_path === null ) {
|
|
self::$rel_path = '/inc';
|
|
}
|
|
|
|
return self::$rel_path . $append;
|
|
}
|
|
|
|
/**
|
|
* @param string $dirname 'foo-bar'
|
|
*
|
|
* @return string 'Foo_Bar'
|
|
*/
|
|
private static function dirname_to_classname( $dirname ) {
|
|
$class_name = explode( '-', $dirname );
|
|
$class_name = array_map( 'ucfirst', $class_name );
|
|
$class_name = implode( '_', $class_name );
|
|
|
|
return $class_name;
|
|
}
|
|
|
|
public static function get_parent_path( $rel_path ) {
|
|
return SOLARIFY_THEME_PATH . self::get_rel_path( $rel_path );
|
|
}
|
|
|
|
public static function get_child_path( $rel_path ) {
|
|
if ( ! is_child_theme() ) {
|
|
return null;
|
|
}
|
|
|
|
return get_theme_file_path() . self::get_rel_path( $rel_path );
|
|
}
|
|
|
|
public static function include_isolated( $path ) {
|
|
call_user_func( self::$include_isolated_callable, $path );
|
|
}
|
|
|
|
public static function include_child_first( $rel_path ) {
|
|
if ( is_child_theme() ) {
|
|
$path = self::get_child_path( $rel_path );
|
|
|
|
if ( file_exists( $path ) ) {
|
|
self::include_isolated( $path );
|
|
}
|
|
}
|
|
|
|
{
|
|
$path = self::get_parent_path( $rel_path );
|
|
|
|
if ( file_exists( $path ) ) {
|
|
self::include_isolated( $path );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
public static function _action_enqueue_scripts() {
|
|
self::include_child_first( '/static.php' );
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
public static function _action_init() {
|
|
self::include_child_first( '/menus.php' );
|
|
self::include_child_first( '/posts.php' );
|
|
}
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
public static function _action_widgets_init() {
|
|
{
|
|
$paths = array();
|
|
|
|
if ( is_child_theme() ) {
|
|
$paths[] = self::get_child_path( '/widgets' );
|
|
}
|
|
|
|
$paths[] = self::get_parent_path( '/widgets' );
|
|
}
|
|
|
|
$included_widgets = array();
|
|
|
|
foreach ( $paths as $path ) {
|
|
|
|
//all available theme widgets directories:
|
|
//autoloading removed
|
|
$dirs = array(
|
|
'about',
|
|
'banner',
|
|
'contacts',
|
|
'facebook-page-stream',
|
|
'flickr',
|
|
'post-tabs',
|
|
'recent',
|
|
'theme-posts',
|
|
'twitter',
|
|
);
|
|
|
|
foreach ( $dirs as $dir ) {
|
|
// $dirname = basename( $dir );
|
|
$dirname = $dir;
|
|
|
|
if ( isset( $included_widgets[ $dirname ] ) ) {
|
|
// this happens when a widget in child theme wants to overwrite the widget from parent theme
|
|
continue;
|
|
} else {
|
|
$included_widgets[ $dirname ] = true;
|
|
}
|
|
|
|
$path_to_widget_class = $dir . '/class-widget-' . $dirname;
|
|
|
|
//checking that file exists in provided dirs
|
|
$full_path_to_widget_class = self::$template_directory . '/inc/widgets/'. $dirname . '/class-widget-' . $dirname . '.php';
|
|
if ( file_exists( $full_path_to_widget_class ) ) {
|
|
self::include_isolated( $full_path_to_widget_class );
|
|
|
|
$widget_class = 'Solarify_Widget_' . self::dirname_to_classname( $dirname );
|
|
if ( class_exists( $widget_class ) ) {
|
|
register_widget( $widget_class );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Solarify_Theme_Includes::init(); |