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">></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 */