Devenir lentement fou en essayant de rendre les colonnes d'administration de taxonomie triables par un numéro de champ personnalisé. J'ai une taxonomie personnalisée appelée "typer" et ces taxonomies ont un champ personnalisé appelé "prioret".
J'ai réussi à obtenir mon code pour afficher la colonne et la rendre triable. Le seul problème est que les champs sont triés par ordre alphabétique, bien que tous soient des nombres. thats signifie qu'un fieldset de [1, 3, 14, 22] se présenterait comme:
1
14
22
3
Mon code jusqu'à présent
function create_date_column_for_issues($issue_columns) {
$issue_columns['prioritet'] = 'Prioritet / sortering';
return $issue_columns;
}
add_filter('manage_edit-typer_columns', 'create_date_column_for_issues');
function populate_date_column_for_issues($value, $column_name, $term_id) {
$issue = get_term($term_id, 'typer');
$date = get_field('prioritet', $issue);
switch($column_name) {
case 'prioritet':
$value = $date;
break;
default:
break;
}
return $value;
}
add_filter('manage_typer_custom_column', 'populate_date_column_for_issues', 10, 3);
function register_date_column_for_issues_sortable($columns) {
$columns['prioritet'] = 'prioritet';
return $columns;
}
add_filter('manage_edit-typer_sortable_columns', 'register_date_column_for_issues_sortable');
add_filter( 'terms_clauses', 'filter_terms_clauses', 10, 3 );
/**
* Filter WP_Term_Query meta query
*
* @param object $query WP_Term_Query
* @return object
*/
function filter_terms_clauses( $pieces, $taxonomies, $args ) {
global $pagenow, $wpdb;
// Require ordering
$orderby = ( isset( $_GET['orderby'] ) ) ? trim( sanitize_text_field( $_GET['orderby'] ) ) : '';
if ( empty( $orderby ) ) { return $pieces; }
// set taxonomy
$taxonomy = $taxonomies[0];
// only if current taxonomy or edit page in admin
if ( !is_admin() || $pagenow !== 'edit-tags.php' || !in_array( $taxonomy, [ 'typer' ] ) ) { return $pieces; }
// and ordering matches
if ( $orderby === 'prioritet' ) {
$pieces['join'] .= ' INNER JOIN ' . $wpdb->termmeta . ' AS tm ON t.term_id = tm.term_id ';
$pieces['where'] .= ' AND tm.meta_key = "prioritet"';
$pieces['orderby'] = ' ORDER BY tm.meta_value ';
}
return $pieces;
}
Mes connaissances sur MySQL sont à peu près nulles, donc je ne sais pas où aller.
En supplément:
À l'heure actuelle, le tri exclura toutes les taxonomies qui ont un champ vide. Ce serait bien de les afficher en bas, mais je me rends compte que j'ai besoin d'une requête beaucoup plus compliquée. Alors, ne participez à cela que s'il vous arrive d'avoir la solution sur le dessus de votre tête.
Le code que je publie est une version modifiée et simplifiée de la vôtre. J'ai obtenu ma solution en utilisant votre code.
/**
* Filter WP_Term_Query meta query
*
* @param object $query WP_Term_Query
* @return object
*/
function filter_terms_clauses( $pieces, $taxonomies, $args ) {
global $pagenow, $wpdb;
if(!is_admin()) {
return $pieces;
}
if(
is_admin()
&& $pagenow == 'edit-tags.php'
&& $taxonomies[0] == 'typer'
&& ( isset($_GET['orderby']) && $_GET['orderby'] == 'prioritet' )
) {
$pieces['join'] .= ' INNER JOIN ' . $wpdb->termmeta . ' AS tm ON t.term_id = tm.term_id ';
$pieces['where'] .= ' AND tm.meta_key = "prioritet"';
$pieces['orderby'] = ' ORDER BY tm.meta_value ';
$pieces['order'] = isset($_GET['order']) ? $_GET['order'] : "DESC";
}
return $pieces;
}
add_filter( 'terms_clauses', 'filter_terms_clauses', 10, 3 );
J'espère que celui-ci vous aidera.
pour moi, j'ai fait une taxonomie personnalisée et dans cette taxonomie personnalisée j'avais une méta personnalisée. Je voulais avoir dans le backend d'administration une colonne et la rendre triable. pour faire un travail triable pour une taxonomie personnalisée dans une méta personnalisée, je l'ai fait.
public function pre_get_terms( $query ) {
$meta_query_args = array(
'relation' => 'AND', // Optional, defaults to "AND"
array(
'key' => 'order_index',
'value' => 0,
'compare' => '>='
)
);
$meta_query = new WP_Meta_Query( $meta_query_args );
$query->meta_query = $meta_query;
$query->orderby = 'position_clause';
}
J'ai trouvé la réponse dans ce lien https://core.trac.wordpress.org/ticket/34996
Je viens d'adapter la réponse fournie dans les commentaires de @ eherman24