roots.io/sage/docs/'; $message = "

{$title}
{$subtitle}

{$message}

{$footer}

"; wp_die($message, $title); }; /** * Ensure compatible version of PHP is used */ if (version_compare('5.6.4', phpversion(), '>=')) { $sage_error(__('You must be using PHP 5.6.4 or greater.', 'sage'), __('Invalid PHP version', 'sage')); } /** * Ensure compatible version of WordPress is used */ if (version_compare('4.7.0', get_bloginfo('version'), '>=')) { $sage_error(__('You must be using WordPress 4.7.0 or greater.', 'sage'), __('Invalid WordPress version', 'sage')); } /** * Ensure dependencies are loaded */ if (!class_exists('Roots\\Sage\\Container')) { if (!file_exists($composer = __DIR__.'/vendor/autoload.php')) { $sage_error( __('You must run composer install from the Sage directory.', 'sage'), __('Autoloader not found.', 'sage') ); } require_once $composer; } /** * Sage required files * * The mapped array determines the code library included in your theme. * Add or remove files to the array as needed. Supports child theme overrides. */ array_map(function ($file) use ($sage_error) { $file = "app/{$file}.php"; if (!locate_template($file, true, true)) { $sage_error(sprintf(__('Error locating %s for inclusion.', 'sage'), $file), 'File not found'); } }, ['helpers', 'setup', 'filters', 'admin']); /** * Here's what's happening with these hooks: * 1. WordPress initially detects theme in themes/sage * 2. Upon activation, we tell WordPress that the theme is actually in themes/sage/resources/views * 3. When we call get_template_directory() or get_template_directory_uri(), we point it back to themes/sage * * We do this so that the Template Hierarchy will look in themes/sage/resources/views for core WordPress themes * But functions.php, style.css, and index.php are all still located in themes/sage * * This is not compatible with the WordPress Customizer theme preview prior to theme activation * * get_template_directory() -> /srv/www/example.com/current/web/app/themes/sage * get_stylesheet_directory() -> /srv/www/example.com/current/web/app/themes/sage * locate_template() * ├── STYLESHEETPATH -> /srv/www/example.com/current/web/app/themes/sage * └── TEMPLATEPATH -> /srv/www/example.com/current/web/app/themes/sage/resources/views */ if (is_customize_preview() && isset($_GET['theme'])) { $sage_error(__('Theme must be activated prior to using the customizer.', 'sage')); } add_filter('template', function ($stylesheet) { return dirname(dirname($stylesheet)); }); if (($sage_views = basename(__DIR__).'/resources/views') !== get_option('template')) { update_option('template', $sage_views); wp_redirect($_SERVER['REQUEST_URI']); exit(); }