Soporte » WordPress Avanzado » Add_filter(get_terms) ha dejado de funcionar con la actualización a 4.7

  • Resuelto inigonz

    (@inigonz)


    Buenos días,

    Tengo un filtro add_filter(get_terms) y al actualizar la versión del wp a la 4.7 ha dejado de funcionar correctamente. Explico mi caso:

    Tengo en mi web creados unos usuarios y cada usuario puede ver todos los proyectos pero solo puede filtrar y crear proyectos de su categoría(custom post type). En ese custom post type, genero una columna para mostrar la categoría a la que pertenece el proyecto.
    Al actualizar la versión del wp a la 4.7, la columna de la categoría me la devuelve vacía, empty array. Pongo a continuación mi código, a ver si me podéis ayudar.

    Functions.php

    function get_terms_filter( $terms, $taxonomies, $args ) {
    
                global $wpdb, $current_user;
                get_currentuserinfo();
    
                if ( ! is_array($terms) && count($terms) < 1 || $current_user->user_login == 'admin' || ! is_admin() ) 
                    return $terms;
    
                $filtered_terms = array();
    
                foreach ( $terms as $term ) {
                    if ( $term->slug == $current_user->user_firstname ) {
                        $filtered_terms[] = $term;
                        $padre            = $term->term_id;
                    }
                }
    
                foreach ( $terms as $term ) {
                    if ( $term->parent == $padre) {
                        $filtered_terms[] = $term;
    
                        $subpadre = $term->term_id;
    
                        foreach ( $terms as $term ) {
    
                            if ( $term->parent == $subpadre ) {
                                $filtered_terms[] = $term;
                            }
                        }
                    }
                }
    
                return $filtered_terms;
            }
            add_filter( 'get_terms', 'get_terms_filter', 10, 3 );
    

    En esta función lo que hago es comprobar el usuario y basándose en su firstname hago el filtro de la categoría, y después compruebo sus hijos para que también me deje filtrar o crear proyectos con dichos hijos, a no ser que seas admin que tienes todos los permisos.

    taxonomy_project.php

    case 'proyecto_category':
                            if ( $category_list     = get_the_term_list( $post_id, 'categoria_proyectos', '', ', ', '' ) ) {
                                if ( is_admin() ) {
                                    $terms          = get_the_terms( $post_id, 'categoria_proyectos' );
                                    foreach ( $terms as $term) {
                                        $term_padre = $term->parent;
                                    }
                                    $term_father    = get_term_by( 'id', $term_padre, 'categoria_proyectos' );
                                    echo qtranxf_use( 'es', $term_father->name, false ) . ' - ' . qtranxf_use( 'es', $category_list, false );
                                } else {
                                    echo qtranxf_use( 'es', $category_list, false );
                                }
                            } else {
                                echo __( 'None' );
                            }                       
    
                        break;
    

    En esta función hago un switch para comprobar en que columna esta, y si es la de categorías me muestre la categoría hija con su categoría padre, y aqui es donde me muestra array vacio.

    He estado mirando por internet y he visto que tras actualizar a la 4.7 mucha gente ha tenido problemas con sus filtros de get_terms, pero no doy con la solucion.
    Muchas gracias por la ayuda

    Un saludo

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • A ninguno le ha pasado algo parecido?

    Moderador LGrusin

    (@lgrusin)

    Pues no lo he mirado bien pero en el CODEX comentan lo siguiente:

    
    Prior to 4.5.0, the first parameter of get_terms() was a taxonomy or list of taxonomies:
    
    $terms = get_terms( 'post_tag', array(
        'hide_empty' => false,
    ) );
    
    Since 4.5.0, taxonomies should be passed via the ‘taxonomy’ argument in the $args array:
    
    $terms = get_terms( array(
        'taxonomy' => 'post_tag',
        'hide_empty' => false,
    ) );
    

    Comprueba que no sea algo de eso.

    Un saludo

    Muchas gracias por la respuesta LGrusin.
    No me había fijado esto del codex, pero ya había hecho la prueba por un respuesta que encontré por internet.
    La solución puede estar ahí, pero no se donde poner eso que comentas dentro de mi código, en la vista de la columna no utilizo la función get_terms(), ya que ahí lo que necesito es saber que term tiene mi post, get_the_terms() y en el filtro los terms ya me vienen por la variable

    saludos

    Buenas, por ahora lo he solucionado poniendo en el filter(get_terms), un if preguntando si la variable global $pagenow == edit.php, si es así, no me hace el filtro y me muestra todo bien.

    Si alguno sabe cual es la solución a mi problema, se lo agradecería.
    Muchas gracias.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • El debate ‘Add_filter(get_terms) ha dejado de funcionar con la actualización a 4.7’ está cerrado a nuevas respuestas.