Use orderby=id
You can simply sort the tags by term_id
with the following GET request:
/wp-admin/edit-tags.php?taxonomy=post_tag&orderby=id&order=desc
and similar for other taxonomies.
Why does this work?
The orderby
parameter is read through:
if ( !empty( $_REQUEST['orderby'] ) )
$args['orderby'] = trim( wp_unslash( $_REQUEST['orderby'] ) );
in the WP_Terms_List_Table
class and used as input argument in:
get_terms( $taxonomy, $args )
that is placed within the WP_Terms_List_Table::display_rows_or_placeholder()
method.
This is how the orderby
argument is handled in get_terms()
:
$_orderby = strtolower( $args['orderby'] );
if ( 'count' == $_orderby ) {
$orderby = 'tt.count';
} elseif ( 'name' == $_orderby ) {
$orderby = 't.name';
} elseif ( 'slug' == $_orderby ) {
$orderby = 't.slug';
} elseif ( 'include' == $_orderby && ! empty( $args['include'] ) ) {
$include = implode( ',', array_map( 'absint', $args['include'] ) );
$orderby = "FIELD( t.term_id, $include )";
} elseif ( 'term_group' == $_orderby ) {
$orderby = 't.term_group';
} elseif ( 'description' == $_orderby ) {
$orderby = 'tt.description';
} elseif ( 'none' == $_orderby ) {
$orderby = '';
} elseif ( empty($_orderby) || 'id' == $_orderby ) {
$orderby = 't.term_id';
} else {
$orderby = 't.name';
}
where we notice that the case with 'id'
will be ordered by t.term_id
, which is what we wanted.
Little puzzle
You might now think that using an empty orderby
GET parameter, will also give the same ordering as 'id'
because of this line:
} elseif ( empty($_orderby) || 'id' == $_orderby ) {
But that’s not the case with the GET request. The reason is this condition (mentioned above):
if ( !empty( $_REQUEST['orderby'] ) )
$args['orderby'] = trim( wp_unslash( $_REQUEST['orderby'] ) );
It will remove the empty orderby
from the argument array and the default ordering in get_terms()
will be used instead, i.e. ordering by name
.