A classificação da taxonomia personalizada causa erro nos menus

4

Eu tenho uma taxonomia personalizada chamada knowledgebase e modifiquei a taxonomia personalizada para ter um campo "ordem de categoria". De modo que ele pode ser encomendado de acordo com ele em um front-end.

Agora configurei essa coluna para que eu possa classificar essa coluna (adicionei essa coluna na tabela de categorias). Para a classificação, tive que adicionar a 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 ;

    }
}

Enquanto isso funciona, isso faz com que os Menus não funcionem. Não vi os locais de gerenciamento e não consegui atribuir o menu a nenhum local de tema disponível no meu tema.

Alguma idéia de por que isso acontece? Os menus estão usando o gancho terms_clauses ?

    
por dingo_d 22.08.2016 / 13:36

1 resposta

5

Atualmente, seu código está modificando todas consultas de termos, tanto no front-end quanto no back-end.

Cada menu de navegação é registrado como um termo na nav_menu taxonomia, portanto, quando você visita o back-end para trabalhar nos menus, essas consultas também foram modificadas pelo seu snippet de código.

Por exemplo, não vejo qualquer ! is_admin() no seu código.

Você deve segmentar apenas a consulta de termos relevante, por exemplo, adicionando o filtro antes do termo consulta e, em seguida, remova-o novamente depois. Outra abordagem seria usar um argumento de entrada personalizado para ativar o filtro.

ps: Embora cada menu de navegação esteja registrado como um termo em nav_menu , cada item de menu é um tipo de postagem personalizado nav_menu_item e a estrutura em árvore é armazenada na meta-tabela sob _menu_item_menu_item_parent meta key para cada post. Eu só queria mencionar isso, pois pode ser entendido pelo que escrevi aqui acima que o menu é apenas parte da estrutura da taxonomia.

    
por birgire 22.08.2016 / 15:04