?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 );
Tour Dos Cosechas - ApacoopOmitir e ir al contenido
Tour Dos Cosechas
sub title
[mostrar_titulo]
DOS COSECHAS.
UN MISMO ORIGEN.
Del café a la taza, del aguacate a la mesa.
Descubra la esencia de la Zona de los Santos en una experiencia turística de un día completo que une dos de sus cultivos más representativos: el aguacate Hass y el café de altura.
La Experiencia Dos Cosechas le invita a descubrir la esencia de la Zona de los Santos a través de un recorrido que une naturaleza, cultura y tradición. Recorrerá los tres cantones de la región, caminará entre cultivos de café y aguacate, disfrutará de la gastronomía local y conocerá de cerca el trabajo de dos cooperativas agrícolas que comparten un mismo origen: la tierra. Una experiencia auténtica que conecta a cada visitante con la historia, el esfuerzo y la riqueza agrícola que distinguen a esta región de Costa Rica.
La experiencia incluye
Desayuno típico
Almuerzo
Merienda saludable
Recorrido guiado durante toda la experiencia
Caminata entre cultivos y senderos naturales
Visita a un bosque reforestado
Recorrido en chapulín
Degustación gastronómica elaborada con aguacate
Degustación de café
Transporte entre experiencias (regreso al punto de inicio)
Póliza de seguros durante todo el recorrido
Su recorrido paso a paso
8:00 a.m.
Bienvenida y desayuno
-Inicio de la experiencia en Turiaguacate, Abejonal de León Cortés. -Recepción de los visitantes y desayuno típico para comenzar el recorrido.
8:30 a.m. – 11:00 a.m.
Experiencia Aguacate
-Recorrido guiado entre cultivos de aguacate Hass y senderos naturales. -Caminata por un bosque reforestado. -Interpretación del proceso productivo. -Degustación de productos elaborados con aguacate. -Actividades que conectan al visitante con la cultura agrícola de la región.
8:30 a.m. – 11:00 a.m.
Experiencia Aguacate
-Inicio del recorrido hacia la siguiente experiencia, disfrutando del paisaje rural característico de los 3 cantones de la Zona de los Santos.
1:30pm
Almuerzo
Almuerzo en la Cafetería Coopedota, con gastronomía local preparada para complementar la experiencia.
2:15 p.m.
Experiencia Café
Recorrido guiado por la cultura cafetalera, donde conocerá el proceso del café desde el cultivo hasta la taza, acompañado de degustaciones y actividades que resaltan la tradición cafetera de la región.
4:00 p.m.
Cierre de la experiencia
Finalización de la Experiencia Dos Cosechas y traslado en buseta hacia Turiaguacate, punto de inicio del recorrido, donde los visitantes podrán retirar sus vehículos.
Costo por persona mayores 13 años (nacional-extranjeros)
₡40.000 colones
Costo por persona niños de entre 5 y 12 años (nacional-extranjeros)
₡18.000 colones
Modalidad
Experiencia todo incluido
Idioma
Español, inglés
Nivel dificultad
Moderado
Cupos
Mínimo de cupo: 15 personas Máximo de cupo: 22 personas (sujeto a disponibilidad)
Transporte
-El precio del tour no incluye transporte hasta el punto de encuentro. Cada visitante deberá trasladarse por sus propios medios.
-Los traslados internos durante la experiencia y el regreso al punto de inicio sí están incluidos.
Confirmación de la reserva
Para garantizar el espacio se requiere el pago del 100% del tour
Política de reservación y cancelación
Tour Dos Cosechas
• Cancelaciones hasta el miércoles: Podrá reprogramar su reserva para una próxima fecha disponible, dentro de un plazo máximo de 1 mes.
• Cancelaciones después del miércoles: No se realizarán devoluciones de dinero. Podrá reprogramar su reserva para una próxima fecha disponible dentro del plazo de 1 mes, sujeto a disponibilidad.
• Cupo mínimo no alcanzado: Si el tour no se realiza por no alcanzar el mínimo de 15 personas, podrá elegir entre reprogramar su reserva o recibir la devolución del 100% del monto pagado.
• Devoluciones: Cuando corresponda una devolución, esta se realizará en un plazo máximo de 7 días naturales.