- WordPress 6.9.4 (es_ES) with Kadence theme - Homepage: Hero, La Asociación, Pilares, Beneficios, Eventos, Miembros, Hazte Miembro, Contacto - Brand identity: #13294b navy, #a12932 burgundy, #c69c48 gold - Fonts: Raleway (headings) + Source Sans 3 (body) + Lato (UI) - Plugins: Kadence Blocks, Polylang, Contact Form 7 - Custom CSS with full brand styling and responsive layout - HTTPS enforced via wp-config.php proxy detection
191 lines
6.4 KiB
PHP
191 lines
6.4 KiB
PHP
<?php
|
||
/**
|
||
* Class to Build the Identity Block.
|
||
*
|
||
* @package Kadence Blocks
|
||
*/
|
||
|
||
// Exit if accessed directly.
|
||
if ( ! defined( 'ABSPATH' ) ) {
|
||
exit;
|
||
}
|
||
|
||
/**
|
||
* Class to Build the Identity Block.
|
||
*
|
||
* @category class
|
||
*/
|
||
class Kadence_Blocks_Identity_Block extends Kadence_Blocks_Abstract_Block {
|
||
|
||
/**
|
||
* Instance of this class
|
||
*
|
||
* @var null
|
||
*/
|
||
private static $instance = null;
|
||
|
||
/**
|
||
* Block name within this namespace.
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $block_name = 'identity';
|
||
|
||
/**
|
||
* Block determines in scripts need to be loaded for block.
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $has_script = false;
|
||
|
||
/**
|
||
* Block determines in scripts need to be loaded for block.
|
||
*
|
||
* @var string
|
||
*/
|
||
protected $has_style = true;
|
||
|
||
/**
|
||
* Instance Control
|
||
*/
|
||
public static function get_instance() {
|
||
if ( is_null( self::$instance ) ) {
|
||
self::$instance = new self();
|
||
}
|
||
|
||
return self::$instance;
|
||
}
|
||
|
||
/**
|
||
* Builds CSS for block.
|
||
*
|
||
* @param array $attributes the blocks attributes.
|
||
* @param Kadence_Blocks_CSS $css the css class for blocks.
|
||
* @param string $unique_id the blocks attr ID.
|
||
* @param string $unique_style_id the blocks alternate ID for queries.¸
|
||
*/
|
||
public function build_css( $attributes, $css, $unique_id, $unique_style_id ) {
|
||
$css->set_style_id( 'kb-' . $this->block_name . $unique_style_id );
|
||
$css->set_selector( '.kb-identity' . $unique_id );
|
||
|
||
|
||
$css->render_measure_output( $attributes, 'padding', 'padding' );
|
||
$css->render_measure_output( $attributes, 'margin', 'margin' );
|
||
|
||
$css->set_selector( '.kb-identity' . $unique_id .' a');
|
||
$css->add_property('text-decoration', 'inherit');
|
||
$css->add_property('color', 'inherit');
|
||
|
||
$css->set_selector( '.kb-identity' . $unique_id . ' .wp-block-site-title' );
|
||
$css->render_typography( $attributes, 'titleTypography' );
|
||
|
||
$css->set_selector( '.kb-identity' . $unique_id . ' .wp-block-site-tagline' );
|
||
$css->render_typography( $attributes, 'taglineTypography' );
|
||
|
||
$css->set_selector( '.kb-identity' . $unique_id . ' .kb-identity-layout-container' );
|
||
if( $attributes['layout'] === 'logo-left' || $attributes['layout'] === 'logo-right' || $attributes['layout'] === 'logo-right-stacked' || $attributes['layout'] === 'logo-left-stacked' ) {
|
||
$css->add_property( 'align-items', $attributes['textVerticalAlign'] );
|
||
}
|
||
|
||
return $css->css_output();
|
||
}
|
||
|
||
/**
|
||
* Return dynamically generated HTML for block
|
||
*
|
||
* @param array $attributes The block attributes.
|
||
* @param string $unique_id The unique ID for the block.
|
||
* @param string $content The block inner content.
|
||
* @param WP_Block $block_instance The instance of the WP_Block class that represents the block being rendered.
|
||
*
|
||
* @return string
|
||
*/
|
||
public function build_html( $attributes, $unique_id, $content, $block_instance ) {
|
||
$layout = isset( $attributes['layout'] ) ? $attributes['layout'] : 'logo-title';
|
||
$layout_class = 'kb-identity-layout-container kb-identity-layout-' . $layout;
|
||
$content = $this->strip_anchor_tags( $content );
|
||
|
||
if (!empty($attributes['urlTransparent'])) {
|
||
// Use regex to find the existing img tag
|
||
$pattern = '/<img[^>]+>/i';
|
||
if (preg_match($pattern, $content, $matches)) {
|
||
$existing_img = $matches[0];
|
||
|
||
// Create the transparent image by cloning and modifying the existing img tag
|
||
$transparent_img = $existing_img;
|
||
$transparent_img = preg_replace('/\bsrc=["\'][^"\']+["\']/', 'src="' . esc_url($attributes['urlTransparent']) . '"', $transparent_img);
|
||
$transparent_img = preg_replace('/\bclass=["\']([^"\']*)["\']/', 'class="kb-img kb-img-transparent"', $transparent_img);
|
||
$transparent_img = preg_replace('/\bsrcset=["\'][^"\']+["\']/', '', $transparent_img);
|
||
$transparent_img = preg_replace('/\bsizes=["\'][^"\']+["\']/', '', $transparent_img);
|
||
|
||
// Insert the transparent image after the existing image
|
||
$content = preg_replace($pattern, '$0' . $transparent_img, $content, 1);
|
||
}
|
||
}
|
||
|
||
if (!empty($attributes['urlSticky'])) {
|
||
$this->enqueue_script('kadence-blocks-header-sticky-image');
|
||
|
||
// Use regex to find the existing img tag
|
||
$pattern = '/<img[^>]+>/i';
|
||
if (preg_match($pattern, $content, $matches)) {
|
||
$existing_img = $matches[0];
|
||
|
||
// Create the transparent image by cloning and modifying the existing img tag
|
||
$sticky_img = $existing_img;
|
||
$sticky_img = preg_replace('/\bsrc=["\'][^"\']+["\']/', 'src="' . esc_url($attributes['urlSticky']) . '"', $sticky_img);
|
||
$sticky_img = preg_replace('/\bclass=["\']([^"\']*)["\']/', 'class="kb-img kb-img-sticky"', $sticky_img);
|
||
$sticky_img = preg_replace('/\bsrcset=["\'][^"\']+["\']/', '', $sticky_img);
|
||
$sticky_img = preg_replace('/\bsizes=["\'][^"\']+["\']/', '', $sticky_img);
|
||
|
||
// Insert the transparent image after the existing image
|
||
$content = preg_replace($pattern, '$0' . $sticky_img, $content, 1);
|
||
}
|
||
}
|
||
|
||
$outer_classes = array( 'kb-identity', 'kb-identity' . $unique_id );
|
||
$outer_classes[] = ! empty( $attributes['align'] ) ? 'align' . $attributes['align'] : 'alignnone';
|
||
|
||
if (!empty($attributes['urlTransparent'])) {
|
||
$outer_classes[] = 'has-transparent-img';
|
||
}
|
||
|
||
$wrapper_attributes = get_block_wrapper_attributes( array( 'class' => implode( ' ', $outer_classes ) ) );
|
||
|
||
if( !empty( $attributes['linkToHomepage']) || !empty( $attributes['link']) ) {
|
||
$url = !empty( $attributes['link']) ? esc_url( $attributes['link'] ) : esc_url( home_url( '/' ) );
|
||
$content = sprintf( '<a href="%1$s" class="%2$s">%3$s</a>', $url, $layout_class, $content );
|
||
} else {
|
||
$content = sprintf( '<div class="%1$s">%2$s</div>', $layout_class, $content );
|
||
}
|
||
|
||
return sprintf( '<div %1$s>%2$s</div>', $wrapper_attributes, $content );
|
||
}
|
||
|
||
public function strip_anchor_tags($html) {
|
||
$pattern = '/<a\s[^>]*href=[\'"](.+?)[\'"][^>]*>(.+?)<\/a>/i';
|
||
$replacement = '$2';
|
||
$stripped_html = preg_replace($pattern, $replacement, $html);
|
||
|
||
return preg_replace('/<\/?a[^>]*>/i', '', $stripped_html);
|
||
}
|
||
|
||
/**
|
||
* Registers scripts and styles.
|
||
*/
|
||
public function register_scripts() {
|
||
parent::register_scripts();
|
||
// If in the backend, bail out.
|
||
if ( is_admin() ) {
|
||
return;
|
||
}
|
||
if ( apply_filters( 'kadence_blocks_check_if_rest', false ) && kadence_blocks_is_rest() ) {
|
||
return;
|
||
}
|
||
|
||
wp_register_script( 'kadence-blocks-header-sticky-image', KADENCE_BLOCKS_URL . 'includes/assets/js/kb-header-sticky-image.min.js', array(), KADENCE_BLOCKS_VERSION, true );
|
||
}
|
||
}
|
||
|
||
Kadence_Blocks_Identity_Block::get_instance();
|