es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mostrar ACF solo en la navegación de primer nivel de WordPress.

Escribo una función para mostrar ACF en el menú.
Necesito mostrar solamente en nivel [0].
Todo funciona. Pero todavía veo un aviso terrible:
Aviso: Índice no definido: nav-menu-item_depth en

Aquí está mi código:

add_filter('acf/location/rule_types', 'acf_location_rules_types');
function acf_location_rules_types($choices)
{
    $choices['Menu']['menu_level'] = 'Nivel del menú';
    return $choices;
}

add_filter('acf/location/rule_values/menu_level', 'acf_location_rule_values_level');

function acf_location_rule_values_level($choices)
{
    $choices[0] = '0';
    $choices[1] = '1';

    return $choices;
}

add_filter('acf/location/rule_match/menu_level', 'acf_location_rule_match_level', 10, 4);
function acf_location_rule_match_level($match, $rule, $options, $field_group)
{
    global $current_screen;
    if ($current_screen->id == 'nav-menus') {
        if ($rule['operator'] == "==") {
            $match = ($options['nav_menu_item_depth'] == $rule['value']); // <-- El problema está aquí
        }
    }
    return $match;
}

¿Alguien puede ayudarme a entender?
Gracias

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código es que el índice ‘nav_menu_item_depth’ no está definido en el array $options. Esto significa que la línea de código ‘$options [‘nav_menu_item_depth’]’ está devolviendo un error de índice no definido.

    Para solucionar esto, puedes agregar una verificación para ver si el índice ‘nav_menu_item_depth’ está definido antes de usarlo en el código. Puedes modificar la función acf_location_rule_match_level de la siguiente manera:

    add_filter('acf/location/rule_match/menu_level', 'acf_location_rule_match_level', 10, 4);
    
    function acf_location_rule_match_level($match, $rule, $options, $field_group)
    {
        global $current_screen;
        if ($current_screen->id == 'nav-menus') {
            if ($rule['operator'] == "==") {
                if (isset($options['nav_menu_item_depth']) && $options['nav_menu_item_depth'] == $rule['value']) {
                    $match = true;
                } else {
                    $match = false;
                }
            }
        }
        return $match;
    }
    

    Al agregar la condición ‘isset’, el código verificará si el índice ‘nav_menu_item_depth’ está definido antes de continuar. Esto debería evitar que se genere el error de índice no definido.

Comments are closed.