?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 );
Café, Quetzal - ApacoopOmitir e ir al contenido