?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 ); Manga - Apacoop

Manga

Manga

Productos relacionados