Dashboard
PHP:
8.4.22
OS:
Linux
User:
provencez
/
/
home
/
provencez
/
www
/
wp-content
/
plugins
/
flexa-block
/
build
/
blocks
/
heading
📤 Upload
📝 New File
📁 New Folder
Close
Editing: render.php
<?php /** * Heading block — server-side render. * * CSS is generated at save time by Heading_CSS and printed inline on the front * end. This file outputs the wrapper plus the heading element, with an optional * subheading and separator ordered by their chosen positions. The title inherits * the theme's typography unless the user overrode it. * * @package Flexa\Block * * @var array $attributes Block attributes. * @var string $content Save content (unused — dynamic block). * @var WP_Block $block Block instance. */ if ( ! defined( 'ABSPATH' ) ) { exit; } // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound -- $attributes provided by WP block API. use Flexa\Block\HTML_Helpers; $block_id = $attributes['blockId'] ?? ''; $content = (string) ( $attributes['content'] ?? '' ); $anchor = $attributes['anchor'] ?? ''; // Whitelist the heading/subheading element tags. $text_tags = [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'span', 'div' ]; $tag = in_array( $attributes['tag'] ?? 'h2', $text_tags, true ) ? $attributes['tag'] : 'h2'; $sub_tag = in_array( $attributes['subheadingTag'] ?? 'span', $text_tags, true ) ? $attributes['subheadingTag'] : 'span'; $url = (string) ( $attributes['url'] ?? '' ); $new_tab = '_blank' === ( $attributes['linkTarget'] ?? '' ); $rel = trim( (string) ( $attributes['rel'] ?? '' ) ); $show_sub = ! empty( $attributes['showSubheading'] ); $sub_content = (string) ( $attributes['subheadingContent'] ?? '' ); $sub_pos = 'top' === ( $attributes['subheadingPosition'] ?? 'bottom' ) ? 'top' : 'bottom'; $show_sep = ! empty( $attributes['showSeparator'] ); $sep_pos = 'top' === ( $attributes['separatorPosition'] ?? 'bottom' ) ? 'top' : 'bottom'; // Inline formatting allowed inside the heading / subheading text. $inline_allowed = [ 'strong' => [], 'em' => [], 'b' => [], 'i' => [], 'br' => [], 'span' => [ 'style' => true, 'class' => true ], 'mark' => [ 'style' => true, 'class' => true ], 'sub' => [], 'sup' => [], ]; // Build the title, wrapping it in a link when a URL is set. $title_inner = wp_kses( $content, $inline_allowed ); if ( '' !== $url ) { $link_attrs = 'class="flexa-heading__link" href="' . esc_url( $url ) . '"'; if ( $new_tab ) { $link_attrs .= ' target="_blank"'; if ( '' === $rel ) { $rel = 'noopener noreferrer'; } } if ( '' !== $rel ) { $rel = trim( (string) preg_replace( '/[^a-z0-9 _-]/i', '', $rel ) ); $link_attrs .= ' rel="' . esc_attr( $rel ) . '"'; } $title_inner = '<a ' . $link_attrs . '>' . $title_inner . '</a>'; } $title_html = '<' . $tag . ' class="flexa-heading__title">' . $title_inner . '</' . $tag . '>'; $sub_html = ''; if ( $show_sub && '' !== trim( $sub_content ) ) { $sub_html = '<' . $sub_tag . ' class="flexa-heading__subheading">' . wp_kses( $sub_content, $inline_allowed ) . '</' . $sub_tag . '>'; } $sep_html = $show_sep ? '<div class="flexa-heading__separator" aria-hidden="true"></div>' : ''; // Assemble the pieces in visual order. $inner = ''; if ( 'top' === $sep_pos ) { $inner .= $sep_html; } if ( 'top' === $sub_pos ) { $inner .= $sub_html; } $inner .= $title_html; if ( 'bottom' === $sub_pos ) { $inner .= $sub_html; } if ( 'bottom' === $sep_pos ) { $inner .= $sep_html; } $classes = [ 'flexa-heading' ]; if ( '' !== $block_id ) { $classes[] = 'flexa-heading-' . sanitize_html_class( $block_id ); } $classes = HTML_Helpers::build_wrapper_classes( $classes, $attributes ); $wrapper_args = [ 'class' => implode( ' ', $classes ) ]; if ( $anchor ) { $wrapper_args['id'] = sanitize_html_class( $anchor ); } $wrapper_attributes = get_block_wrapper_attributes( $wrapper_args ); $data_attrs = HTML_Helpers::build_data_attrs( $attributes ); // Lazy background: mark the wrapper so view.js reveals the image near the viewport. $background = $attributes['background'] ?? []; $is_lazy_bg = ! empty( $background['lazyLoad'] ) && 'image' === ( $background['type'] ?? 'none' ) && '' !== ( $background['image']['url'] ?? '' ); $lazy_marker = $is_lazy_bg ? ' data-flexa-lazy-bg' : ''; printf( '<div %1$s%2$s%3$s>%4$s</div>', $wrapper_attributes, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- built via get_block_wrapper_attributes. $data_attrs, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- keys sanitized, values escaped in helper. $lazy_marker, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- static literal. $inner // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- tags whitelisted, text wp_kses'd, url esc_url'd above. );
Save
Cancel