Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
royal-elementor-addons
/
includes
/
display-conditions
:
class-render-handler.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Handles element hiding: DOM removal via output buffering, CSS-only hiding, and fallback content. */ class WPR_DC_Render_Handler { private static $instance = null; /** * Track which elements are being hidden and how. */ private $hidden_elements = []; public static function instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } /** * Start hiding an element. * Called from before_render when conditions determine the element should be hidden. */ public function start_hiding( $element, $settings, $css_only = false ) { $id = $element->get_id(); if ( $css_only ) { $element->add_render_attribute( '_wrapper', 'class', 'wpr-dc-hidden' ); $this->hidden_elements[ $id ] = [ 'type' => 'css', 'settings' => $settings, ]; } else { ob_start(); $this->hidden_elements[ $id ] = [ 'type' => 'dom', 'settings' => $settings, ]; } } /** * Finish hiding an element. * Called from after_render — discards buffer for DOM removal, renders fallback if needed. */ public function finish_hiding( $element ) { $id = $element->get_id(); if ( ! isset( $this->hidden_elements[ $id ] ) ) { return; } $hidden = $this->hidden_elements[ $id ]; unset( $this->hidden_elements[ $id ] ); if ( 'dom' === $hidden['type'] ) { ob_end_clean(); $this->maybe_render_fallback( $hidden['settings'] ); } } /** * Check if an element is currently being hidden. */ public function is_hiding( $element ) { return isset( $this->hidden_elements[ $element->get_id() ] ); } /** * Render fallback content if enabled in settings. */ private function maybe_render_fallback( $settings ) { if ( empty( $settings['wpr_dc_fallback_enabled'] ) || 'yes' !== $settings['wpr_dc_fallback_enabled'] ) { return; } $type = ! empty( $settings['wpr_dc_fallback_type'] ) ? $settings['wpr_dc_fallback_type'] : 'text'; echo '<div class="wpr-dc-fallback">'; if ( 'text' === $type && ! empty( $settings['wpr_dc_fallback_text'] ) ) { echo wp_kses_post( $settings['wpr_dc_fallback_text'] ); } elseif ( 'template' === $type && ! empty( $settings['wpr_dc_fallback_template'] ) ) { $template_id = absint( $settings['wpr_dc_fallback_template'] ); if ( $template_id ) { // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped echo \Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $template_id ); } } echo '</div>'; } }