Dashboard
PHP:
8.4.22
OS:
Linux
User:
provencez
/
/
home
/
provencez
/
www
/
wp-content
/
plugins
/
flexa-block
/
build
/
blocks
/
icon
📤 Upload
📝 New File
📁 New Folder
Close
Editing: render.php
<?php /** * Icon block — server-side render. * * CSS is generated at save time by Icon_CSS and printed inline on the front end. * This file outputs the wrapper, the frame span and the resolved glyph (inline * SVG via HTML_Helpers::icon_html, or an <img> for uploaded SVGs), optionally * wrapped in a link. The icon inherits the theme's text colour 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'] ?? ''; $anchor = $attributes['anchor'] ?? ''; $html_tag = HTML_Helpers::get_html_tag( $attributes ); // Whitelist the shape modifier so only a known class suffix reaches markup. $shape = in_array( $attributes['shape'] ?? 'square', [ 'square', 'rounded', 'circle' ], true ) ? $attributes['shape'] : 'square'; // Resolve the glyph (inline SVG for builtin/library, <img> for uploads). Nothing // to render when no icon is chosen. $icon_html = HTML_Helpers::icon_html( $attributes['icon'] ?? [], 48 ); if ( '' === $icon_html ) { return; } $inner = '<span class="flexa-icon__inner">' . $icon_html . '</span>'; // Optional link wrap around the frame. $link = is_array( $attributes['link'] ?? null ) ? $attributes['link'] : []; $url = (string) ( $link['url'] ?? '' ); if ( '' !== $url ) { $new_tab = '_blank' === ( $link['target'] ?? '' ); $rel = trim( (string) ( $link['rel'] ?? '' ) ); $link_attrs = 'class="flexa-icon__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 ) . '"'; } $inner = '<a ' . $link_attrs . '>' . $inner . '</a>'; } // --- Wrapper --------------------------------------------------------------- $classes = [ 'flexa-icon', 'flexa-icon--shape-' . $shape, ]; if ( '' !== $block_id ) { $classes[] = 'flexa-icon-' . 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 ); printf( '<%1$s %2$s%3$s>%4$s</%1$s>', esc_html( $html_tag ), $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. $inner // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped -- glyph via icon_html (svg_kses / escaped img), link url/rel escaped above. );
Save
Cancel