Le tri de la taxonomie personnalisée provoque une erreur dans les menus

4

J'ai une taxonomie personnalisée appelée base de connaissances et j'ai modifié la taxonomie personnalisée pour créer un champ "ordre des catégories". Pour qu’il puisse être commandé en fonction de la face avant.

Maintenant, je l'ai configuré pour pouvoir trier cette colonne (j'ai ajouté cette colonne dans la table des catégories). Pour le tri, j'ai dû ajouter la requête à l'aide de

/**
 * 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 ;

    }
}

Pendant que cela fonctionnait, les menus ne fonctionnaient pas. Je n'ai pas vu le menu Gérer les emplacements et n'ai pu attribuer le menu à aucun emplacement de thème disponible dans mon thème.

Avez-vous une idée du pourquoi? Les menus utilisent-ils le crochet terms_clauses ?

    
posée dingo_d 22.08.2016 - 13:36

1 réponse

5

Votre code modifie actuellement toutes les requêtes de termes, à la fois dans le front-end et dans le back-end.

Chaque menu de navigation est enregistré en tant que terme dans la taxonomie nav_menu . Ainsi, lorsque vous visitez le backend pour travailler sur les menus, ces requêtes ont également été modifiées par votre extrait de code.

Par exemple, je ne vois pas de ! is_admin() vérifier dans votre code.

Vous devez uniquement cibler la requête de terme appropriée, par exemple. ajouter le filtre juste avant la requête de terme, puis le supprimer à nouveau par la suite. Une autre approche consisterait à utiliser un argument d’entrée personnalisé pour activer le filtre.

ps: Même si chaque menu de navigation est enregistré en tant que terme sous nav_menu , chaque élément de menu est un type de message personnalisé nav_menu_item et l'arborescence est stockée dans la table méta de messages sous le _menu_item_menu_item_parent . clé méta pour chaque poste. Je voulais juste mentionner ceci, car on pourrait comprendre d'après ce que j'ai écrit ci-dessus que le menu n'est qu'une partie de la structure de la taxonomie.

    
réponse donnée birgire 22.08.2016 - 15:04

Lire d'autres questions sur les étiquettes