Cómo crear una regla “Has Parent” en ACF de forma sencilla

30 de /mayo05 de /2023
1m 55s
wordpress
0 comentarios
310

Esta regla sirve para detectar si un contenido tiene un padre asignado. Es muy útil cuando trabajas con contenidos jerárquicos, como cursos que pueden tener módulos o lecciones dentro.

Con esta regla podrás mostrar campos solo cuando:

El contenido tiene un padre (por ejemplo, una lección dentro de un curso).

El contenido no tiene padre (por ejemplo, un curso principal).

Es una forma sencilla de adaptar la interfaz de edición según el tipo de contenido que estés editando.

<?php

    // Usar has_parent en ACF
    add_filter('acf/location/rule_types', function ($choices) {
        $choices['Post']['has_parent'] = 'Has Parent';
        return $choices;
    });

    add_filter('acf/location/rule_values/has_parent', function ($choices) {
        $choices['1'] = 'Sí';
        $choices['0'] = 'No';
        return $choices;
    });

    add_filter('acf/location/rule_match/has_parent', function ($match, $rule, $options) {
        $post_id = $options['post_id'] ?? null;

        if (!$post_id) {
            return false;
        }

        $post_type    = get_post_type($post_id);
        $allowed_cpts = ['curso']; // ajusta según tus necesidades

        if (!in_array($post_type, $allowed_cpts)) {
            return false;
        }

        $parent_id  = wp_get_post_parent_id($post_id);
        $has_parent = !empty($parent_id);

        if ($rule['operator'] == '==') {
            $match = ($has_parent == (bool) $rule['value']);
        } elseif ($rule['operator'] == '!=') {
            $match = ($has_parent != (bool) $rule['value']);
        }

        return $match;
    }, 10, 3);

?>

Cómo funciona
Añade una nueva regla a ACF llamada Has Parent.

Define los valores posibles: Sí o No.

Comprueba si el contenido tiene un padre usando wp_get_post_parent_id().

Devuelve el resultado para que ACF muestre u oculte el grupo de campos según lo que hayas configurado.

Cómo usarlo en ACF
Cuando crees un grupo de campos:

En “Location”

Selecciona: Post → Has Parent → Sí/No

Y listo.

Valoraciones

Sé el primero en valorar

* Tu valoración puede tardar hasta 72 horas en publicarse.

He leido y acepto el Aviso legal y condiciones de uso

Quizás te interese ...

Este sitio web utiliza cookies

Utilizamos cookies propias y de terceros para personalizar el contenido, analizar nuestros servicios, ofrecer funciones de redes sociales, analizar el tráfico y mostrarle publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de sus hábitos de navegación.

Permitir todas las cookies Configurar Política de cookies