HEX
Server: LiteSpeed
System: Linux s882.use1.mysecurecloudhost.com 4.18.0-553.27.1.lve.el8.x86_64 #1 SMP Fri Nov 8 15:09:45 UTC 2024 x86_64
User: airservicecom (4307)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: /home/airservicecom/public_html/wp-content/themes/air-service/functions.php
<?php

/**
 * Site constants
 */
define( 'SITE_NAME', 'Child' );
define( 'SITE_SLUG', 'child' );
define( 'REMOTE_URL', 'https://punchtemp.wpengine.com/' );
define( 'THEME_VERSION', '1' );
define( 'THEME_ENV', 'dev' );
define( 'THEME_ASSETS', get_stylesheet_directory_uri() . '/assets/' ); 
define( 'THEME_INCLUDES', get_stylesheet_directory() . '/includes/' ); 

/** 
 * Init Theme
*/
function enfold_child_setup() {  
	add_theme_support( 'avia_template_builder_custom_post_type_grid' );
	add_theme_support( 'add_avia_builder_post_type_option' );
	add_theme_support( 'deactivate_layerslider' );

	remove_filter( 'the_title', 'wptexturize' );
	remove_filter( 'avia_ampersand', 'avia_ampersand' );
	remove_action( 'init', 'portfolio_register' );
	 
	add_filter( 'kriesi_backlink', '__return_false' );

	update_option( 'image_default_size', 'full' );

	add_filter( 'wp_img_tag_add_srcset_and_sizes_attr', '__return_false' );

	/* Gutenberg */
	add_filter( 'avf_block_editor_theme_support', '__return_false' );
	add_theme_support( 'align-wide' );  
	add_theme_support( 'editor-styles' );
	add_editor_style( 'assets/css/style-editor.css' );
	
	/* Gutenberg Block patterns */
	remove_theme_support( 'core-block-patterns' );
	if ( class_exists( 'WP_Block_Patterns_Registry' ) ) {

		register_block_pattern_category( SITE_SLUG, [
			'label' => SITE_NAME,
		] );

		register_block_pattern(
			SITE_SLUG . '/pattern-1',
			array(
				'title'       => __( 'Pattern 1', 'avia_framework' ),
				'content'     => "", // https://wpblockz.com/tool/tool-to-generate-code-for-your-wordpress-block-patterns/
				'categories'  => array( SITE_SLUG ),
			)
		);	
  	}
}
add_action( 'after_setup_theme', 'enfold_child_setup', 51 );

/**
 * Enqueue scripts and styles.
 */
function enfold_child_scripts() {
	wp_enqueue_style( 'avia-module-main', THEME_ASSETS . 'css/main.css', array(), THEME_VERSION, 'all' );
	wp_enqueue_script( 'avia-module-main', THEME_ASSETS . 'js/main.js', array(), THEME_VERSION, true );

	if ( is_single() ) { // you can add is_tax / is_category / is_search / etc as needed

		/* Common Single CSS */
		if( is_singular( array( 'post', 'resource', 'press_and_news', 'events_and_webinars' ) ) ) {
			wp_enqueue_style( 'theme-single-common', THEME_ASSETS . 'css/single-common.css', array(), THEME_VERSION, 'all' );
		}

		/* Specific Single CSS */
		/*
		if( is_singular( 'team' ) ) {
			wp_enqueue_style( 'theme-single-team', THEME_ASSETS . 'css/single-team.css', array(), THEME_VERSION, 'all' );
		}
		*/

		if( has_blocks() ) {
			/* Gutenberg CSS */
			wp_enqueue_style( 'theme-gutenberg', THEME_ASSETS . 'css/gutenberg.css', array(), THEME_VERSION, 'all' );
		}
	}
}
add_action( 'wp_enqueue_scripts', 'enfold_child_scripts', 100 );

function enfold_child_admin_scripts() {
	wp_enqueue_style( 'main-admin', THEME_ASSETS . 'css/dist/admin.css', array(), THEME_VERSION, 'all' );

	/* Disabled Enfold WPSEO scripts if Gutenberg editor is enabled */
	$current_screen = get_current_screen();
    if( method_exists( $current_screen, 'is_block_editor' ) && $current_screen->is_block_editor() ){
		wp_deregister_script( 'avia-yoast-seo-js' );
		wp_deregister_script( 'avia_analytics_js' );
	}
}
add_action( 'admin_enqueue_scripts', 'enfold_child_admin_scripts', 100 );

function enfold_child_gutenberg_scripts() {
	wp_enqueue_script( 'enfold-child-editor', THEME_ASSETS . 'js/dist/editor.js', array( 'wp-blocks', 'wp-dom' ), THEME_VERSION, true );
}
add_action( 'enqueue_block_editor_assets', 'enfold_child_gutenberg_scripts' );

function enfold_child_footer_assets() {
    ?>
	<script>document.write('<link rel="stylesheet" href="<?php echo THEME_ASSETS; ?>css/body.css?v=<?php echo THEME_VERSION; ?>">');</script>
    <?php
}
add_action( 'wp_footer', 'enfold_child_footer_assets', 100 );

function enfold_child_ie_hook() {
	?>
	<script>
	if( window.MSInputMethodContext && document.documentMode ){
		document.write('<link rel="stylesheet" href="<?php echo THEME_ASSETS; ?>css/ie.css">');
	}
	</script>
	<?php
}
add_action( 'wp_head', 'enfold_child_ie_hook', 20, 1 );

require THEME_INCLUDES . 'theme-functions.php';
require THEME_INCLUDES . 'theme-shortcodes.php';
require THEME_INCLUDES . 'theme-overrides.php';
require THEME_INCLUDES . 'theme-styles.php';
require THEME_INCLUDES . 'theme-hooks.php';
require THEME_INCLUDES . 'theme-ep-hooks.php';


// cambiar texto de ingles a español en el boton de cargar mas post grid

add_filter('avf_ep_posts_grid_load_more_label', function($label) {
    return 'Cargar más'; // tu nuevo texto
});

add_filter('gettext', function($translated, $text, $domain) {
    if ($text === 'Loading...' && $domain === 'avia_framework') {
        $translated = 'Cargando...';
    }
    return $translated;
}, 10, 3);





// MODIFICAR EL PAGINADOR DEL PRODUCTO GRID

add_action('wp_footer', function() { ?>
<script>
document.addEventListener('facetwp-loaded', function() {
    const facetContainer = document.querySelector('.facetwp-facet-paginator_productos');
    if (!facetContainer) return;

    const pages = facetContainer.querySelectorAll('.facetwp-page:not(.next):not(.prev)');
    const total = pages.length;

    pages.forEach((page, index) => {
        page.textContent = 'Página ' + (index + 1) + ' de ' + total;
    });
});

</script>
<?php });




add_action('wp_footer', function() {
    ?>
    <script>
    (function(){
      document.addEventListener('click', function(e){
        var btn = e.target.closest('.ep-copy-btn');
        if (!btn) return;
        e.preventDefault();

        var targetId = btn.getAttribute('data-copy-target');
        if (!targetId) return;

        var textEl = document.getElementById(targetId);
        if (!textEl) return;

        var text = textEl.textContent.trim();
        if (!text) return;

        // Intentar con Clipboard API
        if (navigator.clipboard && navigator.clipboard.writeText) {
          navigator.clipboard.writeText(text).then(function(){
            btn.classList.add('copied');
            setTimeout(function(){
              btn.classList.remove('copied');
            }, 2000);
          }).catch(function(){
            fallbackCopy(text, btn);
          });
        } else {
          fallbackCopy(text, btn);
        }
      });

      function fallbackCopy(text, btn) {
        var textarea = document.createElement('textarea');
        textarea.value = text;
        textarea.style.position = 'fixed';
        textarea.style.opacity = '0';
        document.body.appendChild(textarea);
        textarea.focus();
        textarea.select();

        try {
          document.execCommand('copy');
          btn.classList.add('copied');
          setTimeout(function(){
            btn.classList.remove('copied');
          }, 2000);
        } catch (err) {
          console.error('ep-copy error', err);
        }

        document.body.removeChild(textarea);
      }
    })();
    </script>
    <?php
});

















// MODIFICAR LA DISPOSICION DEL PRODUCTO


add_action('woocommerce_after_single_product_summary', 'agregar_secciones_personalizadas', 5);
function agregar_secciones_personalizadas() {
    global $product;
    if ( ! $product ) return;

    // --- Primera sección: Custom Field producto_caracteristica ---
    $caracteristica = get_post_meta( get_the_ID(), 'producto_caracteristica', true );
    if ( $caracteristica ) {
        echo '<div class="producto-caracteristica toggle-section is-active">';
        echo '  <h2 class="toggle-title">Características del Producto</h2>';
        echo '  <div class="toggle-content"><p>' . wp_kses_post($caracteristica) . '</p></div>';
        echo '</div>';
    }

	echo '<div class="producto-atributos toggle-section is-active">';
	echo '  <h2 class="toggle-title">Atributos del Producto</h2>';
	echo '  <div class="toggle-content">';
	echo        wc_display_product_attributes($product);
	echo '  </div>';
	echo '</div>';
}


add_action('wp_footer', function() {
?>
<script>
document.addEventListener('DOMContentLoaded', function () {
    document.querySelectorAll('.toggle-title').forEach(function(title) {
        title.addEventListener('click', function() {
            const parent = this.closest('.toggle-section');
            parent.classList.toggle('is-active');
        });
    });
});
</script>
<?php
});


// ============================
// Secciones dentro del resumen de producto
// ============================
add_action('woocommerce_single_product_summary', 'agregar_secciones_resumen', 35);
function agregar_secciones_resumen() {
    global $product;

    if ( ! $product ) return;

    // --- Primera sección: Descripción larga ---
    echo '<div class="producto-descripcion-larga">';
    echo '<h2>Descripción del Producto</h2>';
    echo apply_filters( 'the_content', $product->get_description() );
    echo '</div>';

    // --- Segunda sección: Botón de WhatsApp ---
    $producto_nombre = $product->get_name();
    $telefono = '951210288'; // tu número
    $mensaje = rawurlencode("Hola, necesito más información sobre el producto: $producto_nombre");
    echo '<div class="producto-wapp">';
    echo '<a href="https://wa.me/' . $telefono . '?text=' . $mensaje . '" target="_blank" class="button">Más información</a>';
    echo '</div>';
}




// ============================
// Div arriba del producto (breadcrumb personalizado con buscador)
// ============================
add_action('woocommerce_before_main_content', 'airservice_div_arriba_producto', 5);
function airservice_div_arriba_producto() {
    $product_id = get_queried_object_id(); // ID del producto actual
    $product    = wc_get_product($product_id);

    if ( ! $product ) return; // salir si no hay producto

    $producto_nombre = $product->get_name();

    echo '<section class="section-breadcrumb-single-product">';
    echo '  <div class="custom-breadcrumb" style="margin-bottom:20px; display:flex; align-items:center; justify-content:space-between; gap:20px;">';
    
    // breadcrumb
    echo '    <h4 style="margin:0;">';
    echo '      <a href="/productos">Productos</a> ';
    echo '      <span class="breadcrumb-separator">&gt;</span> ';
    echo        esc_html($producto_nombre);
    echo '    </h4>';

    // buscador (hermano del H4)
    echo '    <form role="search" method="get" action="' . esc_url(site_url('/productos/')) . '" class="breadcrumb-search-form" style="margin:0;">';
    echo '      <input type="search" name="_buscador_producto" placeholder="Buscar productos..." required style="padding:6px 10px; border:1px solid #ccc; border-radius:4px;" />';
    echo '      <button type="submit" style="padding:6px 12px; background:#0073aa; color:#fff; border:none; border-radius:4px; cursor:pointer;"></button>';
    echo '    </form>';

    echo '  </div>';
    echo '</section>';
}




// Agregar botón PDF como hijo directo de <div class="product ...">
add_action('woocommerce_after_single_product_summary', 'airservice_add_pdf_button', 5);
function airservice_add_pdf_button() {
    global $product;

    if (!$product) return;
	echo '<div class="download-pdf-button" style="margin-top:20px; text-align:center;">
			<a href="' . esc_url(get_site_url() . '/?download_pdf=' . $product->get_id()) . '" 
			class="button alt avia-button" 
			>
			Descargar ficha
			</a>
	</div>';

}


// 2. Capturar request y generar PDF
add_action('template_redirect', 'generar_pdf_producto');
function generar_pdf_producto() {
    if (isset($_GET['download_pdf'])) {
        $product_id = intval($_GET['download_pdf']);
        $product = wc_get_product($product_id);

        if (!$product) {
            wp_die('Producto no encontrado');
        }

        // Generar PDF con datos básicos
        require_once(ABSPATH . 'wp-admin/includes/file.php');
        require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php');
        require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php');

        // Usar librería TCPDF, DOMPDF o FPDF
		require_once get_stylesheet_directory() . '/lib/fpdf/fpdf.php';

        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10, utf8_decode($product->get_name()));
        $pdf->Ln();
        $pdf->SetFont('Arial','',12);
        $pdf->MultiCell(0,10, "Precio: " . $product->get_price() . " " . get_woocommerce_currency_symbol());
        $pdf->MultiCell(0,10, "Descripción: " . strip_tags($product->get_description()));

        // Descargar
        $pdf->Output('D', 'producto-'.$product_id.'.pdf');
        exit;
    }
}



add_action('woocommerce_after_main_content', 'banner_promotion_function', 5);
function banner_promotion_function() {

    echo <<<HTML
<section class="section-banner_promotion-product">
    <div class="banner-promotion-container">
        <div class="container-text">
            <div class="av-special-heading">
                <h1 class="av-special-heading-tag">Visita técnica <span>GRATIS</span></h1>
            </div>
            <div class="avia-button-wrap wsp">
                <a href="https://wa.me/51951210288" class="avia-button">
                    <span class="avia_iconbox_title">Agenda tu visita gratis</span>
                </a>
            </div>
        </div>

        <div class="container-img">
            <img decoding="async" loading="lazy" class="wp-image-124 avia-img-lazy-loading-124 avia_image" 
                 src="/wp-content/uploads/2025/08/img-banner-midle.png" 
                 alt="" title="img-banner-midle" height="698" width="1768" itemprop="thumbnailUrl">
        </div>
    </div>
</section>
HTML;

}




add_action('woocommerce_after_main_content', 'banner_promotion_product_v2', 5);
function banner_promotion_product_v2() {
    ?>
    <section class="section_banner_promotion_product_v2">
        <img src="/wp-content/uploads/2025/08/image-18-scaled.png" alt="">
    </section>
    <?php
}




/* Air Service Theme */