Rufen Sie die Kategorienliste mit dem Kategorienamen in der benutzerdefinierten WP_List_Table-class ab

Ich baue ein Plugin und ich machte benutzerdefinierte wp_list_table class, um meine Bedürfnisse anzupassen und Elemente mit nativen WordPress-Look anzuzeigen.

Das Problem ist, dass ich keine Kategorien mit Kategorienamen auflisten kann.

Ich benutze Daten aus der databasetabelle und die Liste meiner Kategorien in der database ist in einer durch Komma getrennten Liste von Kategorien IDs

So sehen die Daten aus

136, 8, 10, 11, 110 

Und wenn ich das auf der Webseite ausspreche, bekomme ich die Liste genau so, dass das Komma getrennt ist

Kategorienliste auf meinem Plugin

Aber ich möchte jeden Kategorie-Namen anstelle der einfachen ID so anzeigen, so dass ich am Ende möchte es wie WordPress Post-Standard-Liste wie folgt anzuzeigen

Bildbeschreibung hier eingeben

Es muss nicht anklickbar sein, ich möchte nur Kategorienamen in meiner benutzerdefinierten class anzeigen.

Irgendeine Idee, wie man das erreicht?

BEARBEITEN:

Hier ist die ganze class, die ich derzeit verwende

 class custom_feeds_list_table extends WP_List_Table { // declare constructor and give some basic params function __construct() { global $status, $page; $message = null; $type = null; parent::__construct(array( 'singular' => 'custom-feed', 'plural' => 'custom-feeds', )); } //List all columns that we want to display in table function get_columns() { $columns = array( 'cb' => '', //Render a checkbox instead of text 'feedname' => __('Feed Name', 'vt-translate'), 'provider' => __('Selected provider', 'vt-translate'), 'searchterm' => __('Searchterms', 'vt-translate'), 'numvideos' => __('Videos to pull', 'vt-translate'), 'post_category' => __('Categories', 'vt-translate'), 'feedstatus' => __('Status', 'vt-translate'), ); return $columns; } //Select which columns are sortable function get_sortable_columns() { $sortable_columns = array( 'feedname' => array('feedname', true), 'provider' => array('provider', false), 'searchterm' => array('searchterm',false), 'numvideos' => array('numvideos',false), 'feedstatus' => array('feedstatus', false), ); return $sortable_columns; } // Default column render is required function column_default($item, $column_name) { return $item[$column_name]; } //Bulk action for delete function get_bulk_actions() { $actions = array( 'update' => 'Update', 'enable' => 'Enable', 'disable' => 'Disable', 'delete' => 'Delete' ); return $actions; } //Process bulk action in database function process_bulk_action() { global $wpdb; $custom_table = $wpdb->prefix . 'custom_feeds'; if ('enable' === $this->current_action()) { $ids = isset($_REQUEST['id']) ? $_REQUEST['id'] : array(); if (is_array($ids)) $ids = implode(',', $ids); $this->type = 'updated'; $this->message = __('No feed selected to enable.', 'custom-feeds'); if (!empty($ids)) { $wpdb->query("UPDATE $custom_table SET feedstatus = 1 WHERE id IN($ids)"); $this->type = 'updated'; $this->message = __('Selected feeds are enabled, your website will be updated with enabled feeds at scheduled time.', 'custom-feeds'); } } if ('disable' === $this->current_action()) { $ids = isset($_REQUEST['id']) ? $_REQUEST['id'] : array(); if (is_array($ids)) $ids = implode(',', $ids); $this->type = 'updated'; $this->message = __('No feed selected to disable.', 'custom-feeds'); if (!empty($ids)) { $wpdb->query("UPDATE $custom_table SET feedstatus = 0 WHERE id IN($ids)"); $this->type = 'updated'; $this->message = __('Selected feeds are disabled, your website will no longer get updates of disabled feeds.', 'custom-feeds'); } } if ('delete' === $this->current_action()) { $ids = isset($_REQUEST['id']) ? $_REQUEST['id'] : array(); if (is_array($ids)) $ids = implode(',', $ids); $this->type = 'updated'; $this->message = __('No feed selected to delete.', 'custom-feeds'); if (!empty($ids)) { $wpdb->query("DELETE FROM $custom_table WHERE id IN($ids)"); $this->type = 'updated'; $this->message = __('Selected feeds are deleted, your website will no longer get updates from deleted feeds. ', 'custom-feeds'); } } } //Prepare items to show in list function prepare_items() { global $wpdb; $evg_table = $wpdb->prefix . 'custom_feeds'; $per_page = $this->get_items_per_page('feeds_per_page', 20); $current_page = $this->get_pagenum(); $columns = $this->get_columns(); $hidden = array(); $sortable = $this->get_sortable_columns(); // here we configure table headers, defined in our methods $this->_column_headers = $this->get_column_info(); // process bulk action if any $this->process_bulk_action(); // will be used in pagination settings $total_items = $wpdb->get_var("SELECT COUNT(id) FROM $custom_table"); // prepare query params, as usual current page, order by and order direction $paged = isset($_REQUEST['paged']) ? max(0, intval($_REQUEST['paged']) - 1) : 0; $orderby = (isset($_REQUEST['orderby']) && in_array($_REQUEST['orderby'], array_keys($this->get_sortable_columns()))) ? $_REQUEST['orderby'] : 'id'; $order = (isset($_REQUEST['order']) && in_array($_REQUEST['order'], array('asc', 'desc'))) ? $_REQUEST['order'] : 'desc'; //Define item aray $this->items = $wpdb->get_results($wpdb->prepare("SELECT * FROM $custom_table ORDER BY $orderby $order LIMIT %d OFFSET %d", $per_page, $paged), ARRAY_A); // configure pagination $this->set_pagination_args(array( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items / $per_page) )); } //Input checkbox for id function column_cb($item) { return sprintf( '', $item['id'] ); } //Display feed name column with buttons function column_feedname($item) { $actions = array( 'edit' => sprintf('%s', $item['id'], __('Edit', 'custom-feeds')), 'delete' => sprintf('%s', $_REQUEST['page'], $item['id'], __('Delete', 'custom-feeds')), ); return sprintf('%s %s', '' . $item['feedname'] . '', $this->row_actions($actions) ); } //Display feed status column function column_feedstatus($item) { return sprintf( ($item['feedstatus'] == true) ? '
Active
' : '
Inactive
' ); } //Display category column function column_post_category($item) { return sprintf( $item['post_category'] ); }

}

Wie Sie sehen können, ist die Kategoriespaltenfunktion am Ende und ich benutze nur Basiscode

  return sprintf( $item['post_category'] ); 

Das wird Rohdaten aus der database zurückgeben, und das sind nur IDs von Kategorien mit durch Komma getrennten Zahlen

 136, 8, 10, 11, 110 

Ich weiß, ob ich das Thema irgendwo so verwende

 $cats = $item['post_category']; 

es wird zurückkehren

 $cats = 136, 8, 10, 11, 110 

als

 $categories = get_categories( array('include' => $cats) ); 

und am Ende

 foreach($categories as $single_cat){ echo $single_cat->cat_name; } 

es wird den Namen jeder Kategorie wiedergeben.

Aber das ist hier nicht der Fall, das funktioniert aus irgendeinem Grund nicht in der wp_list_table class, also suche ich nach einer anderen Lösung. Ich schaute auch auf WordPress wp_list_table class in der mitgelieferten PHP-Datei, konnte aber nichts in Bezug auf Kategorie finden.

Solutions Collecting From Web of "Rufen Sie die Kategorienliste mit dem Kategorienamen in der benutzerdefinierten WP_List_Table-class ab"

Es ist sehr schwierig, diese Art von Frage zu testen / zu debuggen, da sie von einer Menge Code abhängig ist, aber es sieht so aus, als müssten Sie nur Ihre kommagetrennte Liste aufteilen, die Kategoriedaten abrufen und die Namen drucken. get_categories() und wp_list_pluck() sollten das ziemlich einfach machen.

 //Display category column function column_post_category($item) { $c = get_categories(array('include' => $item['post_category'])); $c = wp_list_pluck($c,'name'); $c = implode(', ',$c); return $c; }