?php /** * Theme functions and definitions. * * For additional information on potential customization options, * read the developers' documentation: * * https://developers.elementor.com/docs/hello-elementor-theme/ * * @package HelloElementorChild */ if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } define( 'HELLO_ELEMENTOR_CHILD_VERSION', '2.0.0' ); /** * Load child theme scripts & styles. * * @return void */ function hello_elementor_child_scripts_styles() { wp_enqueue_script( 'custom-script', get_stylesheet_directory_uri() . '/custom.js', array( 'jquery' ) ); wp_enqueue_style( 'hello-elementor-child-style', get_stylesheet_directory_uri() . '/style.css', [ 'hello-elementor-theme-style', ], HELLO_ELEMENTOR_CHILD_VERSION ); } add_action( 'wp_enqueue_scripts', 'hello_elementor_child_scripts_styles', 20 ); function acfcustom_fn($atts) { // Definimos los atributos predeterminados $atts = shortcode_atts( array( 'field' => '', 'post_id' => get_the_ID(), ), $atts ); // Inicializamos $output y asignamos el valor del campo ACF $output = ''; if (!empty($atts['field'])) { $output .= get_field($atts['field'], $atts['post_id']); } return $output; } add_shortcode('acfcustom', 'acfcustom_fn'); function mostrar_titulo_acf_shortcode() { // 1. Obtener el valor del campo ACF 'titulo' para la página/post actual. $titulo_acf = get_field('titulo'); // 2. Comprobar si el campo ACF está vacío (incluyendo nulo, falso, o cadena vacía). if ( empty( $titulo_acf ) ) { // Si está vacío: Obtener y retornar el título por defecto del post/página. $titulo_pagina = get_the_title(); return '

' . esc_html( $titulo_pagina ) . '

'; } else { // Si NO está vacío: Retornar el valor del campo ACF. return '

' . esc_html( $titulo_acf ) . '

'; } } // 3. Registrar el shortcode para que pueda usarse como [mostrar_titulo]. add_shortcode( 'mostrar_titulo', 'mostrar_titulo_acf_shortcode' ); function agregar_clase_interior_al_body( $classes ) { // La función is_front_page() verifica si es la página frontal estática O la página de inicio de blog. // Si NO es la página frontal, agrega la clase 'internas'. if ( ! is_front_page() ) { // Añade tu clase personalizada al array de clases $classes[] = 'internas'; } // Alternativamente, si tu página de inicio es el índice de entradas del blog, // puedes usar is_home(): /* if ( ! is_home() ) { $classes[] = 'internas'; } */ return $classes; } add_filter( 'body_class', 'agregar_clase_interior_al_body' ); /** * Agrega una clase al body si la categoría de producto de WooCommerce es la última hija (sin subcategorías). * * @param array $classes Clases CSS existentes para el body. * @return array Las clases CSS modificadas. */ function agregar_clase_ultima_subcategoria_wc( $classes ) { // 1. Verificar si estamos en una página de archivo de categoría de producto de WooCommerce if ( is_product_category() ) { // 2. Obtener el objeto de la categoría consultada actualmente $current_term = get_queried_object(); // Asegurarse de que tenemos un objeto y es de la taxonomía correcta if ( $current_term && $current_term->taxonomy === 'product_cat' ) { // 3. Verificar si la categoría actual tiene hijos (subcategorías) // Usamos get_terms para buscar términos hijos con el ID de la categoría actual como 'parent' $children = get_terms( 'product_cat', array( 'parent' => $current_term->term_id, 'hide_empty' => false // Queremos saber si existen, aunque estén vacías ) ); // 4. Si la categoría NO tiene hijos, es la "última hija" o una categoría de nivel superior sin hijos. // Para ser una "última hija" en el contexto de una jerarquía, debe no tener hijos. if ( empty( $children ) ) { $classes[] = 'no-tiene-subcategorias'; } else { $classes[] = 'si-tiene-subcategorias'; } } } return $classes; } add_filter( 'body_class', 'agregar_clase_ultima_subcategoria_wc' ); function disable_comments_globally() { // Cierra comentarios en todos los tipos de publicación $post_types = get_post_types(); foreach ($post_types as $post_type) { if(post_type_supports($post_type, 'comments')) { remove_post_type_support($post_type, 'comments'); remove_post_type_support($post_type, 'trackbacks'); } } } add_action('admin_init', 'disable_comments_globally'); // Elimina la caja de comentarios del frontend function filter_comment_form_output( $output ) { return ''; } add_filter( 'comment_form_defaults', 'filter_comment_form_output', 20 ); // Ocultar elementos relacionados con comentarios en el menú de administración function disable_comments_admin_menu() { remove_menu_page('edit-comments.php'); // Elimina la opción 'Comentarios' del menú principal remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); // Elimina el widget del escritorio } add_action('admin_menu', 'disable_comments_admin_menu'); function disable_comments_redirection() { if ( is_singular() && comments_open() ) { // Redirecciona si la página tiene comentarios abiertos (solo para prevenir) wp_redirect( home_url() ); exit; } // Bloquea el intento de envío directo if ( is_admin() ) { return; } if ( ! empty( $_SERVER['SCRIPT_FILENAME'] ) && 'wp-comments-post.php' == basename( $_SERVER['SCRIPT_FILENAME'] ) ) { wp_redirect( home_url() ); exit; } } add_action( 'template_redirect', 'disable_comments_redirection' ); function my_login_redirect( $redirect_to, $request, $user ) { // Check if the user is an admin if ( isset( $user->roles ) && is_array( $user->roles ) ) { if ( in_array( 'autor', $user->roles ) ) { return $redirect_to; // Send admins to the default dashboard } else { return home_url( '/wp-admin/edit.php' ); // Send everyone else here } } return $redirect_to; } add_filter( 'login_redirect', 'my_login_redirect', 10, 3 ); Apacoop al día - Apacoop

Apacoop al día

sub title

[mostrar_titulo]

Nuestro Blog

Boletín Informativo Enero, 2026

Nuevas Alianzas En el mes de enero la organización tuvo el honor de recibir la visita de representantes de Naciones Unidas, FAO, la DGRV, así como del señor alcalde de

Leer Más

Acreditación Fair Trade

APACOOP da un paso trascendental hacia la acreditación Fair Trade. Hoy iniciamos oficialmente el proceso y apertura de auditoría que nos permitirá avanzar hacia esta importante certificación internacional. Este hito

Leer Más