Intereting Posts
Как я могу проверить идентификатор пользователя facebook, который он предоставляет во время процесса регистрации Может ли кто-нибудь сказать, как «отправлять» (не страницы) в wordpress без внутреннего URL-адреса? Экспортная таксономия (информационный бюллетень) с тегом изображения? Вы можете скрыть пустые термины с помощью get_term_children? .htaccess исчезли файлы Это лучше всего в следующем сценарии: post_meta vs custom table vs parent / child posts Почему я получаю сообщение об ошибке, когда добавляю параметр number в свой WP_User_Query? Условный тег в Widget Logic для проверки страницы верхнего уровня или подстраницы Любой способ update_post_meta с содержимым html? Он лишается и становится пустым Как добавить пользовательские данные к изображениям в редакторе? Ошибка call_user_func_array () после перехода на другой сервер Страница пользовательского контента Удаляет ли плагин удаление WordPress обратно в исходное состояние? добавить значение метаданных Мой сайт считает, что это безопасно, когда это не факт

Сортировка столбцов таксономии по метазначению числовой

Медленно сходит с ума, пытаясь сделать столбцы администратора таксономии отсортированными по номеру пользовательского поля. У меня есть обычная таксономия, называемая «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 практически ни к чему, поэтому я понятия не имею, куда идти по ширине.

Дополнительно:

Сейчас сортировка исключает все таксономии с пустым полем. Было бы неплохо, если бы они были показаны внизу, но я понимаю, что мне нужен более сложный запрос. Поэтому присоединяйся только к этому, если так получилось, что решение будет на вершине твоей головы.

Код, который я публикую, является модифицированной и упрощенной версией. Я получил свое решение, используя ваш код.

 /** * 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 ); 

Надеюсь, что это помогает.

для меня я создал обычную таксономию, и в этой пользовательской таксономии у меня была обычная мета. Я хотел иметь в блоке администратора колонку и сделать ее сортируемой. чтобы сделать сортировку для пользовательской таксономии в обычном мета, я сделал это.

https://pastebin.com/vr2sCKzX

 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'; } 

Я нашел ответ в этой ссылке https://core.trac.wordpress.org/ticket/34996

Мне просто пришлось адаптировать ответ, указанный в комментариях @ eherman24