Ersetzen des Titels in der Admin-Listentabelle

10

Hier ist meine Situation: Ich versuche, den Inhalt der Titelspalte in meiner benutzerdefinierten Beitragstyp-Bearbeitungstabelle zu filtern, aber ich kann sie nicht zum Laufen bringen.

Folgendes habe ich versucht:

add_filter('manage_edit-mycpt_columns', 'replace_title_products');

function replace_title_products() {
    $oldtitle = get_the_title();
    $newtitle = str_replace(array("<span class='sub-title'>", "</span>"), array("", ""),$oldtitle);
    $title = esc_attr($newtitle);
    return $title;  
}

Ich möchte nur die <span>Tags in meinem Titel filtern . Könnte mir bitte jemand helfen?

Pipo
quelle

Antworten:

19

1. Ändern Sie den Post-Titel in der Post-Listenspalte

Ich habe falsch verstanden, was Sie wollten - offensichtlich. Sie können das so machen:

add_action(
    'admin_head-edit.php',
    'wpse152971_edit_post_change_title_in_list'
);
function wpse152971_edit_post_change_title_in_list() {
    add_filter(
        'the_title',
        'wpse152971_construct_new_title',
        100,
        2
    );
}

function wpse152971_construct_new_title( $title, $id ) {
    //print_r( $title );
    //print_r( $id );
    return 'new';
}

Den admin_head-$hook_suffixHaken benutzen .


(Haftungsausschluss: Behalten Sie dies bei, da es sich um verwandte und gute Informationen handelt)

2. Ersetzen Sie den Tabellenspaltentitel

Außerdem verwenden und überschreiben Sie den Spaltentabellentitel nicht. Nachfolgend einige beispielhafte Anleitungen dazu:

  1. Basierend auf dem manage_{$this->screen->id}_columnsHaken

    add_filter(
        'manage_edit-post_columns',
        'wpse152971_replace_column_title_method_a'
    );
    function wpse152971_replace_column_title_method_a( $columns ) {  
        //print_r($columns);  
        $columns[ 'title' ] = 'new title';  
        return $columns;  
    }  
  2. Basierend auf dem manage_{$post_type}_posts_columnsHaken

    add_filter(
        'manage_post_posts_columns',
        'wpse152971_replace_column_title_method_b'
    );
    function wpse152971_replace_column_title_method_b( $posts_columns ) {
        //print_r($posts_columns);
        $posts_columns[ 'title' ] = 'new title';
        return $posts_columns;
    }

Last but not least ist der folgende Code praktisch, um die benötigten Informationen zu erhalten:

add_action( 'admin_head', 'wpse152619_dbg_dev' );
function wpse152619_dbg_dev() {
    global $pagenow;
    print_r( $pagenow );
    echo '<br>';
    print_r( $_GET[ 'taxonomy' ] );
    echo '<br>';
    $current_screen = get_current_screen();
    print_r( $current_screen->id );
}
Nicolai
quelle
Entschuldigung, ich habe die Rückleitung in meinem Code vergessen ... Vielen Dank für Ihre Antwort, aber das ist nicht das, was ich erreichen möchte. Ich möchte den Namen der Spalte für den Titel nicht ändern, sondern den Inhalt, der in dieser Spalte für jeden Beitrag zurückgegeben wird. Im Moment habe ich: "Dies ist mein Titel <span class =" sub-title "> Nummer 1 </ span>" für die erste Zeile, dann "Dies ist mein Titel <span class =" sub-title "> Nummer 2 </ span> "für die zweite Reihe usw. Ist klarer, was ich erreichen will?
Pipo
Genial!! Genau das wollte ich tun. Danke vielmals!
Pipo
i Versuchte Lösung 1 1. Change post title in post list columnWerte sind Änderungen. Wie kann ich das Label auch umbenennen? ?
Entwickler
@Developer Du meinst den Tabellenspaltentitel? Wie unter Sekunde beschrieben.
Nicolai
1
Ich habe versucht, dasselbe zu tun, aber für einen benutzerdefinierten TAXONOMY-Tabellenkopf (der gekürzt werden muss, da ich 10+ habe). Sie können eine Abkürzung für die Administrationsspalte 'menu_name' in ihrem Array 'labels' angeben, aber seltsamerweise hat dies keinen Einfluss auf den Tabellenkopf. Ich habe viel gesucht und dieser Artikel ist immer wieder aufgetaucht, nichts für Taxonomien ... SO: Mit Ihrer Methode 2.1 = A kann dies durchgeführt werden (Spalten mit dem Namen 'taxonomy- {my_tax_name}'), mit Ihrer Methode 2.2 = B nur Sie Holen Sie sich 'Titel' und 'Datum' und selbst eingefügte Spalten, wie print_r zeigt.
user3445853
1

Ich habe vor ein paar Stunden etwas Ähnliches gemacht, daher ist mein Code möglicherweise nicht der beste, aber Sie müssen 2 Hooks verwenden, um dies zu erreichen. Da Sie anscheinend einen benutzerdefinierten Beitragstyp verwenden, der dem entspricht, was ich in Ihrem Code gesehen habe, sind dies diese beiden Hooks.

manage_post_type_posts_columns ()

manage_post_type_posts_custom_column ()

Ich habe den manage_post_type_posts_columns()Filter-Hook verwendet, um eine neue Titelspalte zu erstellen und die alte zu deaktivieren, und dann den manage_post_type_posts_custom_column()Aktions-Hook, um meine eigene Methode zum Generieren des neuen Inhalts / Titels für diese Spalte zu verwenden.

Hoffe das hilft, habe auch deinen Code hinzugefügt ...

// Replace your Title Column with the Existing one //
function replace_title_column($columns) {

    $new = array();

    foreach($columns as $key => $title) {
        if ($key=='title') 
        $new['new-title'] = 'New Title'; // Our New Colomn Name
        $new[$key] = $title;
    }

    unset($new['title']); 
    return $new;
}

// Replace the title with your custom title
function replace_title_products($column_name, $post_ID) {
    if ($column_name == 'new-title') {
        $oldtitle = get_the_title();
        $newtitle = str_replace(array("<span class='sub-title'>", "</span>"), array("", ""),$oldtitle);
        $title = esc_attr($newtitle); 
        echo $title; 
    }
}

add_filter('manage_mycpt_columns', 'replace_title_column');
add_action('manage_mycpt_custom_column', 'replace_title_products', 10, 2);
Matt Royal
quelle
Danke Matt. Wissen Sie, ob es eine Möglichkeit gibt, die ursprüngliche "Titel" -Spalte zu filtern, bevor der Inhalt zurückgegeben wird? Ich möchte nicht wirklich eine neue Titelspalte erstellen, da die ursprüngliche viele Funktionen enthält (Bearbeiten, Schnellbearbeiten, Papierkorb usw.).
Pipo
@ Etienne Ich fürchte nicht. Vielleicht kann uns jemand anderes eine Idee geben, wie wir das machen sollen, würde auch gerne wissen :-)
Matt Royal
Siehe meine überarbeitete Antwort, keine Notwendigkeit, eine neue Spalte zu erstellen. @ Etienne
Nicolai
0

Spalten ersetzen

Hier ist ein Beispiel, das die Spalten vollständig ersetzt, anstatt bestimmte hinzuzufügen und zu entfernen

function set_book_columns($columns) {
    return array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Title'),
        'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Comments' ) . '"><span class="screen-reader-text">' . __( 'Comments' ) . '</span></span>',
        'date' => __('Date'),
        'publisher' => __('Publisher'),
        'book_author' =>__( 'Book Author')
    );
}
add_filter('manage_book_posts_columns' , 'set_book_columns');

Mehr sehen:manage_$post_type_posts_columns

Supermodel
quelle