按自定义排序字段对管理中的分类术语表进行排序

问题描述 投票:0回答:1

我正在尝试按 WordPress 中的自定义字段对分类术语表进行排序。但我错过了一些东西。

我有一个自定义分类法。在这个例子中我们称之为“教育”。 我添加了一个字段 sort-order 并使用 update_term_meta() 将值保存到该字段。 这有效。


接下来,我在分类管理表中添加了一列:

// Add the column to the table with terms add_filter('manage_edit-education_columns', array( $this, 'addSortOrderColumn' )); function addSortOrderColumn( $columns ){ $columnsBefore = array_slice( $columns, 0, 2, true); // NOTE: First column is the checkbox $columnsAfter = array_slice( $columns, 2, count( $columns ), true); $columnsInsert = array('sort-order' => ‘Sort’ ); $columns = array_merge($columnsBefore, $columnsInsert, $columnsAfter); return $columns; } // Display the contents for the column add_filter('manage_education_custom_column',array( $this, 'addSortOrderColumnContent'), 10, 3 ); function addSortOrderColumnContent( $content, $columnName, $termId ){ if( $columnName !== 'sort-order' ){ return $content; } $termId = absint( $termId ); $order = get_term_meta( $termId, 'sort-order', true ); if( !empty( $order ) ){ $content .= esc_attr( $order ); } return $content; } // Make the column sortable add_filter( 'manage_edit-education_sortable_columns', array( $this, 'makeSortOrderColumnSortable' )); function makeSortOrderColumnSortable( $sortable ){ $sortable[ 'sort-order' ] = 'sort-order'; return $sortable; }

我看到该列,我可以单击它的标题,它会在单击时翻转表格行( a c z e 
e z c a ),但它不会根据内容对其进行排序。

<->我需要添加什么才能使排序了解列内容?

php wordpress sorting custom-sort
1个回答
1
投票

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, [ 'education' ] ) ) { return $pieces; } // and ordering matches if ( $orderby === 'sort-order' ) { $pieces['join'] .= ' INNER JOIN ' . $wpdb->termmeta . ' AS tm ON t.term_id = tm.term_id '; $pieces['where'] .= ' AND tm.meta_key = "sort-order"'; $pieces['orderby'] = ' ORDER BY tm.meta_value '; } return $pieces; }

WP_Term_Query 仅来自 WP4.6,因此此功能非常新鲜。 

© www.soinside.com 2019 - 2024. All rights reserved.