Site icon Hip-Hop Website Design and Development

List custom queried terms in the edit-tags.php?taxonomy page

This is my first time posting a question here.
I have this problems that I feel that I am soooo close to solve, but can’t manage to do it.

I have a custom taxonomy called "aplication" and another called "segment". Each "aplication" term has an "segment" term associated with it trought a custom field (ACF).

What I’m trying to do is to sort the "aplication" terms alphabetically by their associated "segment" term in the edit-tag?taxonomy=aplication page.

I managed to add the sortable "segment" column into the page through the code below:

// Add the "segment" column to the list of "aplication" terms
add_filter('manage_edit-aplication_columns', function( $columns ) {

    $columns['aplication_segment'] =  __( 'Segment', 'textdomain' );

return $columns;
});


// Add data to the "segment" column created above
add_action( 'manage_aplication_custom_column', function( $value, $column, $aplication_id ) {

    if ( $column == 'aplication_segment') {

        $segment_ID  = get_field( 'aplication_segment', get_term($aplication_id, 'aplication') ); // The custom field for the aplications returns the segment ID
        $segment     = get_term( $segment_ID, 'segment' );
        $value = $segment -> name;

        echo $segment->name;
    }
}, 10, 3);


// Make the "segment" column sortable
add_filter('manage_edit-aplication_sortable_columns', function( $columns ) {

    $columns['aplication_segment'] = 'aplication_segment';

    return $columns;
});

Now, to sort the "aplication" terms I did this:

add_action('pre_get_terms', function( $term_query ) {

    global $current_screen;
    global $wpdb;    

    if ( ($current_screen) && $current_screen->id === 'edit-aplication' ) {

        if ( $term_query -> query_vars['orderby'] === 'aplication_segment' ) {
                            
            $sql =
                "SELECT ttm.term_id, ttm.name, ttm.slug, ttm.term_group, ttm.term_order
                FROM 
                    (SELECT wp_terms.term_id, wp_terms.name, wp_term_taxonomy.taxonomy
                        FROM wp_terms 
                        INNER JOIN wp_term_taxonomy 
                        ON wp_terms.term_id = wp_term_taxonomy.term_id
                        AND wp_term_taxonomy.taxonomy = 'segment'
                        ORDER BY wp_terms.name) as ttt
                INNER JOIN
                    (SELECT wp_terms.*, wp_termmeta.meta_value        
                        FROM wp_terms 
                        INNER JOIN wp_termmeta 
                        ON wp_terms.term_id = wp_termmeta.term_id
                        AND wp_termmeta.meta_key = 'aplication_segment'
                        ORDER BY wp_terms.name) as ttm
                ON ttt.term_id = ttm.meta_value 
                ORDER BY ttt.name {$term_query->query_vars['order']}";

            return $wpdb -> get_results( $sql );
        };
    }    

}, 10, 1);

This query works, it gives me the result that I need (I didn’t translated those to english):

Array
(
    [0] => stdClass Object
        (
            [term_id] => 147
            [name] => Puxadores
            [slug] => puxadores-moveleiros
            [term_group] => 0
            [term_order] => 0
        )

    [1] => stdClass Object
        (
            [term_id] => 3391
            [name] => Cantoneiras
            [slug] => cantoneiras
            [term_group] => 0
            [term_order] => 0
        )

    [2] => stdClass Object
        (
            [term_id] => 150
            [name] => Automotivo
            [slug] => automotivo
            [term_group] => 0
            [term_order] => 0
        )

    [3] => stdClass Object
        (
            [term_id] => 149
            [name] => Dissipadores
            [slug] => dissipadores
            [term_group] => 0
            [term_order] => 0
        )

    [4] => stdClass Object
        (
            [term_id] => 3393
            [name] => Luminárias
            [slug] => luminarias
            [term_group] => 0
            [term_order] => 0
        )

    [5] => stdClass Object
        (
            [term_id] => 148
            [name] => Base Divisória
            [slug] => base-divisoria
            [term_group] => 0
            [term_order] => 0
        )

    [6] => stdClass Object
        (
            [term_id] => 3392
            [name] => Esquadrias
            [slug] => esquadrias
            [term_group] => 0
            [term_order] => 0
        )

)

The only problem is that I can’t manage to show the result in the "aplication" terms table. It keeps sorting by the "aplication" term name.

I appreciate anyone who can try and help me with this.