Пользовательская колонка таблицы сортировка по таксономическому запросу

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

Я прочитал много вопросов и ответов на WPSE вместе с этой статьей . Хотя, похоже, каждый хочет запросить мета ключ / значение.

Я пытаюсь добавить значение таксономии (в основном категорию) в таблицу пользовательских сообщений.

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

Добавьте заголовок столбца.

function mbe_column_titles($columns){ $columns['title'] = 'Frequently Asked Question'; $columns['mbe-faq-category'] = 'Category'; return $columns; } add_filter('manage_mbe-faqs_posts_columns', 'mbe_column_titles'); 

Добавьте значения строк.

 function mbe_column_rows($column_name, $post_id){ if($column_name == 'mbe-faq-category'){ $categories = wp_get_object_terms($post_id, 'mbe-faq-categories'); $the_category = array(); if($categories){ foreach($categories as $category){ $the_category[] = $category->name; } } echo join(', ', $the_category); } } add_action('manage_mbe-faqs_posts_custom_column', 'mbe_column_rows', 10, 2); 

Подготовьте ключ заказа,

 function mbe_sortable_columns($columns){ $columns['mbe-faq-category'] = 'mbe-faq-category'; return $columns; } add_filter('manage_edit-mbe-faqs_sortable_columns', 'mbe_sortable_columns'); 

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

Solutions Collecting From Web of "Пользовательская колонка таблицы сортировка по таксономическому запросу"

Чтобы добавить добавленный пользовательский сортируемый столбец к WP_List_Table вашего типа сообщения в панели управления администрированием WordPress, вам нужно будет сделать следующее:

  1. Замените все вхождения YOUR-POST-TYPE-NAME своим фактическим именем типа сообщения.
  2. Замените все вхождения YOUR-TAXONOMY-NAME своим фактическим названием таксономии.
  3. Замените все вхождения YOUR COLUMN NAME своим фактическим именем столбца.
  4. Замените все вхождения YOUR-COLUMN-SLUG своим фактическим столбцом.

Шаг 1

Добавление дополнительных столбцов таблицы столбцов WordPress

 if(!function_exists('mbe_change_table_column_titles')){ function mbe_change_table_column_titles($columns){ unset($columns['date']);// temporarily remove, to have custom column before date column $columns['YOUR-COLUMN-SLUG'] = 'YOUR COLUMN NAME'; $columns['date'] = 'Date';// readd the date column return $columns; } add_filter('manage_YOUR-POST-TYPE-NAME_posts_columns', 'mbe_change_table_column_titles'); } 

Шаг 2

Добавить все назначенные связные термины таксономии как данные строки в пользовательской таблице столбцов администратора WordPress

 if(!function_exists('mbe_change_column_rows')){ function mbe_change_column_rows($column_name, $post_id){ if($column_name == 'YOUR-COLUMN-SLUG'){ echo get_the_term_list($post_id, 'YOUR-TAXONOMY-NAME', '', ', ', '').PHP_EOL; } } add_action('manage_YOUR-POST-TYPE-NAME_posts_custom_column', 'mbe_change_column_rows', 10, 2); } 

Шаг 3

Включить пользовательский столбец столбца администратора WordPress для сортировки

 if(!function_exists('mbe_change_sortable_columns')){ function mbe_change_sortable_columns($columns){ $columns['YOUR-COLUMN-SLUG'] = 'YOUR-COLUMN-SLUG'; return $columns; } add_filter('manage_edit-YOUR-POST-TYPE-NAME_sortable_columns', 'mbe_change_sortable_columns'); } 

Шаг 4

Измените post_clauses чтобы разрешить сортировку столбцов таблицы столбцов WordPress в соответствии с post_clauses таксономии

 if(!function_exists('mbe_sort_custom_column')){ function mbe_sort_custom_column($clauses, $wp_query){ global $wpdb; if(isset($wp_query->query['orderby']) && $wp_query->query['orderby'] == 'YOUR-COLUMN-SLUG'){ $clauses['join'] .= <<<SQL LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id) LEFT OUTER JOIN {$wpdb->terms} USING (term_id) SQL; $clauses['where'] .= "AND (taxonomy = 'YOUR-TAXONOMY-NAME' OR taxonomy IS NULL)"; $clauses['groupby'] = "object_id"; $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC)"; if(strtoupper($wp_query->get('order')) == 'ASC'){ $clauses['orderby'] .= 'ASC'; } else{ $clauses['orderby'] .= 'DESC'; } } return $clauses; } add_filter('posts_clauses', 'mbe_sort_custom_column', 10, 2); } 

Шаг 5 (БОНУС)

Настройте ширину столбцов таблицы столбцов пользовательского WordPress.

 if(!function_exists('mbe_print_admin_styles')){ function mbe_print_admin_styles(){ if(!is_admin()){ return false; } global $pagenow; if($pagenow == 'edit.php' && isset($_GET['post_type']) && $_GET['post_type'] == 'YOUR-POST-TYPE-NAME'){ echo ' <style type="text/css"> .column-YOUR-COLUMN-SLUG{ width: 10%; } </style> '.PHP_EOL; } } add_action('wp_print_scripts', 'mbe_print_admin_styles'); } 

Благодаря @goto10 для запроса Сортируемых столбцов администратора, когда данные не поступают из post_meta и @scribu для размещения столбцов Custom Sortable Columns и Sortable Taxonomy Columns для этого ответа на исходный вопрос. Пользовательская колонка таблицы Sortable by Taxonomy Query .