试图让分类管理列按自定义字段编号进行排序,这让我慢慢发疯。我有一个名为“typer”的自定义分类法,这些分类法有一个名为“prioritet”的自定义字段。
我设法让代码显示该列,并使其可排序。唯一的问题是,尽管所有字段都是数字,但它们是按字母顺序排序的。这意味着由[1、3、14、22]组成的字段集将显示为:
1.
14
22
3.
到目前为止我的代码
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;
}
我对MySQL的知识几乎一无所知,所以我不知道该怎么做。
作为额外费用:
现在,排序将排除所有具有空字段的分类法。将这些显示在底部会很好,但我确实意识到我需要一种更复杂的查询方式。所以,只有在你脑子里有解决方案的时候,才加入到这项工作中来。