* docs: Add onboarding documentation for new developers Add four comprehensive guides to help new developers get started with the VDI-Starter-v5 WordPress theme: - docs/getting-started.md: Setup from zero, local WordPress options, env config, theme activation warnings, troubleshooting - docs/architecture.md: Bootstrap flow, 7 architectural layers, namespace conventions, WP hooks cleanup, enqueue system, theme.json - docs/creating-blocks.md: Step-by-step ACF block creation tutorial, helper functions, parent-child patterns, Tailwind integration - docs/reference.md: Hooks/filters tables, design tokens, CSS import tree, JS module graph, class reference, CLI commands, deployment Update README.md: trim deep-dive API docs (moved to reference), add documentation links section, fix CSS paths (views/styles/ → styles/), add missing contact-info block, fix deployment filename typo (wpengine,yml → wpengine.yml), add backToTop.js and enqEditorAssets(), add namespace conventions table. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * docs: language graph * docs: Update readme * 🔵 other: Rename project and publish * 🔵 other: Update .gitignore
175 lines
4.3 KiB
PHP
175 lines
4.3 KiB
PHP
<?php
|
|
/**
|
|
* Add a comment to show which template is being used on the current page.
|
|
*
|
|
* @package SoloFrameEvo
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
namespace SoloFrameEvo;
|
|
|
|
/**
|
|
* Class ShowTemplate
|
|
*
|
|
* Displays the active WordPress template in the footer for debugging purposes.
|
|
* Determines which template WordPress has chosen to use and outputs it as an HTML comment.
|
|
*
|
|
* @package SoloFrameEvo
|
|
* @since 1.0.0
|
|
*/
|
|
class ShowTemplate {
|
|
/**
|
|
* The template file path that WordPress has chosen to use.
|
|
*
|
|
* @var string|false
|
|
*/
|
|
private $template = false;
|
|
|
|
/**
|
|
* Constructor for ShowTemplate class.
|
|
*
|
|
* Initializes the template checking functionality by hooking into template_redirect action.
|
|
* Does nothing if called from admin area.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function __construct() {
|
|
if ( is_admin() ) {
|
|
return;
|
|
}
|
|
|
|
add_action( 'template_redirect', array( &$this, 'checkTemplate' ), 0 );
|
|
}
|
|
|
|
/**
|
|
* Using the same logic used by WordPress determine the template to be used
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function checkTemplate() {
|
|
if ( is_404() ) {
|
|
$template = get_404_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_search() ) {
|
|
$template = get_search_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_tax() ) {
|
|
$template = get_taxonomy_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_home() ) {
|
|
$template = get_home_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_front_page() ) {
|
|
$template = get_front_page_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_attachment() ) {
|
|
$template = get_attachment_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_single() ) {
|
|
$template = get_single_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_page() ) {
|
|
$template = get_page_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_category() ) {
|
|
$template = get_category_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_tag() ) {
|
|
$template = get_tag_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_author() ) {
|
|
$template = get_author_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_date() ) {
|
|
$template = get_date_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} elseif ( is_archive() ) {
|
|
$template = get_archive_template();
|
|
|
|
if ( $template ) {
|
|
$this->template = $template;
|
|
}
|
|
} else {
|
|
$this->template = function_exists( 'get_index_template' ) ? get_index_template() : get_template_directory() . '/index.php';
|
|
}
|
|
|
|
$this->template = apply_filters( 'template_include', $this->template );
|
|
|
|
// Hook into the footer so we can echo the active template
|
|
add_action( 'wp_footer', array( &$this, 'show_template' ), 100 );
|
|
}
|
|
|
|
/**
|
|
* Echo the active template to the footer
|
|
* Try to catch when a plugin or otherwise hooks template_redirect to include a different template
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
public function show_template() {
|
|
$fudge = false;
|
|
|
|
foreach ( debug_backtrace() as $trace ) { // phpcs:ignore
|
|
switch ( $trace['function'] ) {
|
|
case 'wp_footer':
|
|
$wp_footer = $trace['file'];
|
|
break;
|
|
case 'get_footer':
|
|
$get_footer = $trace['file'];
|
|
break;
|
|
}
|
|
}
|
|
|
|
$fudge = isset( $get_footer ) ? $get_footer : $wp_footer;
|
|
|
|
if ( $fudge === $this->template || $fudge === false ) {
|
|
echo wp_kses_post( "<!-- Active Template: {$this->template} -->\n" );
|
|
} else {
|
|
echo esc_html( "<!--\n" );
|
|
echo esc_html( "The template loader logic has chosen a different template than what was used.\n\n" );
|
|
echo esc_html( "Chosen Template: {$this->template}\n" );
|
|
echo esc_html( "Actual Template: $fudge\n\n" );
|
|
echo esc_html( "This will usually occur if the template file was overriden using an action on template_redirect.\n" );
|
|
echo esc_html( "This is a best effort guess to catch such scenarios as mentioned above but can be incorrect.\n" );
|
|
echo esc_html( "-->\n" );
|
|
}
|
|
}
|
|
}
|
|
|
|
$ShowTemplate = new ShowTemplate();
|