Ordenar taxonomía personalizada causa error de menús

4

Tengo una taxonomía personalizada llamada knowledgebase, y modifiqué la taxonomía personalizada para tener un campo de "orden de categoría". Para que pueda ordenarse de acuerdo con esto en un extremo delantero.

Ahora lo he configurado para que pueda ordenar esa columna (he agregado esa columna en la tabla de categorías). Para la clasificación he tenido que agregar la consulta usando

/**
 * Custom column sortable query
 *
 * @param  array $pieces     Terms query SQL clauses.
 * @param  array $taxonomies An array of taxonomies.
 * @param  array $args     An array of terms query arguments.
 * @return array             Modified query array
 * @since   1.0.0
 */

add_filter( 'terms_clauses', 'mytheme_filter_custom_terms', 10, 3 );

if ( ! function_exists( 'mytheme_filter_custom_terms' ) ) {
    function mytheme_filter_custom_terms( $pieces, $taxonomies, $args ) {

        global $wpdb;

        $orderby = isset( $_REQUEST['orderby'] ) ? trim( wp_unslash( $_REQUEST['orderby'] ) ) : 'cat_order';

        if ( 'cat_order' === $orderby ) {
            $pieces['fields'] .= ', tm.*';
            $pieces['join']   .= ' INNER JOIN '.$wpdb->termmeta.' AS tm ON tt.term_id = tm.term_id';
            $pieces['orderby'] = 'ORDER BY ABS(tm.meta_value)';
        }

        return $pieces ;

    }
}

Si bien esto funciona, los menús no funcionan. No vi Administrar ubicaciones y no pude asignar el menú a ninguna ubicación de tema disponible en mi tema.

¿Alguna idea de por qué sucede esto? ¿Los menús utilizan el gancho terms_clauses ?

    
pregunta dingo_d 22.08.2016 - 13:36

1 respuesta

5

Actualmente, su código está modificando las consultas de término todas , tanto en la parte delantera como en la parte posterior.

Cada menú de navegación se registra como un término en la taxonomía nav_menu , por lo que cuando visita el backend para trabajar en los menús, el código de código también modificó esas consultas.

Por ejemplo, no veo ninguna verificación ! is_admin() en su código.

Debe orientar solo la consulta del término relevante, por ejemplo, agregando el filtro justo antes de la consulta de término y luego retíralo de nuevo justo después. Otro enfoque sería utilizar un argumento de entrada personalizado para activar el filtro.

ps: A pesar de que cada menú de navegación está registrado como un término en nav_menu , cada elemento del menú es un tipo de publicación personalizada nav_menu_item y la estructura de árbol se almacena en la tabla de metadatos de la publicación en el _menu_item_menu_item_parent Meta clave para cada publicación. Solo quería mencionar esto, como podría entenderse por lo que escribí aquí anteriormente, que el menú es solo una parte de la estructura de taxonomía.

    
respondido por el birgire 22.08.2016 - 15:04

Lea otras preguntas en las etiquetas