You've already forked wp-fedistream
Some checks failed
Create Release Package / build-release (push) Failing after 53s
- Added $rendering_main_template flag that blocks all other renders - Reduced MAX_RENDER_DEPTH from 5 to 2 - template-wrapper.php passes is_main_template=true to enable hard lock - Any render attempt during main template rendering is blocked Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
90 lines
2.7 KiB
PHP
90 lines
2.7 KiB
PHP
<?php
|
|
/**
|
|
* Template wrapper for FediStream Twig templates.
|
|
*
|
|
* @package WP_FediStream
|
|
*/
|
|
|
|
// Prevent direct file access.
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
use WP_FediStream\Plugin;
|
|
use WP_FediStream\Frontend\TemplateLoader;
|
|
|
|
// Enter page template loading mode - this completely blocks nested FediStream rendering.
|
|
TemplateLoader::enter_page_template_loading();
|
|
|
|
// Also enter shortcode context to prevent recursive shortcode processing in post content.
|
|
TemplateLoader::enter_shortcode_context();
|
|
|
|
// Get template context.
|
|
$context = TemplateLoader::get_context();
|
|
|
|
// Determine template name.
|
|
$template_name = '';
|
|
|
|
if ( is_singular( 'fedistream_artist' ) ) {
|
|
$template_name = 'single/artist';
|
|
} elseif ( is_singular( 'fedistream_album' ) ) {
|
|
$template_name = 'single/album';
|
|
} elseif ( is_singular( 'fedistream_track' ) ) {
|
|
$template_name = 'single/track';
|
|
} elseif ( is_singular( 'fedistream_playlist' ) ) {
|
|
$template_name = 'single/playlist';
|
|
} elseif ( is_post_type_archive( 'fedistream_artist' ) ) {
|
|
$template_name = 'archive/artist';
|
|
} elseif ( is_post_type_archive( 'fedistream_album' ) ) {
|
|
$template_name = 'archive/album';
|
|
} elseif ( is_post_type_archive( 'fedistream_track' ) ) {
|
|
$template_name = 'archive/track';
|
|
} elseif ( is_post_type_archive( 'fedistream_playlist' ) ) {
|
|
$template_name = 'archive/playlist';
|
|
} elseif ( is_tax( 'fedistream_genre' ) ) {
|
|
$template_name = 'archive/taxonomy';
|
|
$context['taxonomy_name'] = __( 'Genre', 'wp-fedistream' );
|
|
} elseif ( is_tax( 'fedistream_mood' ) ) {
|
|
$template_name = 'archive/taxonomy';
|
|
$context['taxonomy_name'] = __( 'Mood', 'wp-fedistream' );
|
|
}
|
|
|
|
// Get the plugin instance.
|
|
$plugin = Plugin::get_instance();
|
|
|
|
get_header();
|
|
?>
|
|
|
|
<main id="fedistream-content" class="fedistream-main">
|
|
<?php
|
|
if ( $template_name ) {
|
|
try {
|
|
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
|
|
// Pass true for is_main_template to set the hard rendering lock.
|
|
echo $plugin->render( $template_name, $context, true );
|
|
} catch ( \Exception $e ) {
|
|
if ( WP_DEBUG ) {
|
|
echo '<div class="fedistream-error">';
|
|
echo '<p>' . esc_html__( 'Template Error:', 'wp-fedistream' ) . ' ' . esc_html( $e->getMessage() ) . '</p>';
|
|
echo '</div>';
|
|
}
|
|
}
|
|
} else {
|
|
// Fallback to default content.
|
|
if ( have_posts() ) {
|
|
while ( have_posts() ) {
|
|
the_post();
|
|
the_content();
|
|
}
|
|
}
|
|
}
|
|
?>
|
|
</main>
|
|
|
|
<?php
|
|
// Exit shortcode context and page template loading mode.
|
|
TemplateLoader::exit_shortcode_context();
|
|
TemplateLoader::exit_page_template_loading();
|
|
|
|
get_footer();
|