it-swarm.com.de

Wie kann ich eine Spalte in der wp_list_table des Admin-Bereichs hinzufügen?

enter image description here

Meine Frage ist also so ziemlich das, was Sie auf dem Bild sehen. Wie kann ich in meinem benutzerdefinierten Beitragstyp "Produkte" eine zusätzliche Spalte wie SEO Yoast zu meiner Haupttabelle hinzufügen, die den Namen WP_List_Table trägt? Ich habe den Code herausgefunden, wie ich eine Nicht-Lagerbestands-Funktion bekomme, die angezeigt wird, abhängig davon, ob für den Artikel das Feld custom_field of "Out of Stock" auf true oder false gesetzt ist. Das ist kein Problem, aber wie kann ich diesen Bereich der Tabelle in meinem Code anvisieren. Ich würde davon ausgehen, dass es ein Filter wäre, nicht um sicherzugehen, wie das funktionieren würde, aber ich würde es wirklich schätzen, wenn mir jemand helfen kann.

1
Lucas Santos

Ich denke, Sie brauchen eine Reihe von Filtern und Aktionen, um benutzerdefinierte Spalten zu Post-Edit-Bildschirmen hinzuzufügen:

  • manage_edit-post_type_columns : wird zum Hinzufügen von Spalten verwendet
  • manage_posts_custom_column : wird verwendet, um den Inhalt jeder Zeile der Spalte zu drucken
  • manage_edit-post_type_sortable_columns: Wird zum Registrieren sortierbarer Spalten verwendet. Undokumentiert.
  • request : Möglicherweise müssen Sie diesen Filter in Kombination mit manage_edit-post_type_sortable_columns verwenden.

Mit diesem Code füge ich beispielsweise eine sortierbare Spalte mit Post-Hits-Informationen aus einem benutzerdefinierten Metafeld hinzu:

add_filter( 'manage_edit-post_columns',  'add_new_columns' );
add_filter( 'manage_edit-post_sortable_columns', 'register_sortable_columns' );
add_filter( 'request', 'hits_column_orderby' );
add_action( 'manage_posts_custom_column' , 'custom_columns' );
/**
* Add new columns to the post table
*
* @param Array $columns - Current columns on the list post
*/
function add_new_columns($columns){

    $column_meta = array( 'hits' => 'Hits' );
    $columns = array_slice( $columns, 0, 6, true ) + $column_meta + array_slice( $columns, 6, NULL, true );
    return $columns;

}

// Register the columns as sortable
function register_sortable_columns( $columns ) {
    $columns['hits'] = 'hits';
    return $columns;
}

//Add filter to the request to make the hits sorting process numeric, not string
function hits_column_orderby( $vars ) {
    if ( isset( $vars['orderby'] ) && 'hits' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => 'hits',
            'orderby' => 'meta_value_num'
        ) );
    }

    return $vars;
}

/**
* Display data in new columns
*
* @param  $column Current column
*
* @return Data for the column
*/
function custom_columns($column) {

    global $post;

    switch ( $column ) {
        case 'hits':
            $hits = get_post_meta( $post->ID, 'hits', true );
            echo (int)$hits;
        break;
    }
}
1
cybmeta