Sostituzione del titolo nella tabella di amministrazione

8 lug 2014, 16:20:22
Visualizzazioni: 22.8K
Voti: 11

Ecco la mia situazione: sto cercando di filtrare il contenuto della colonna del titolo nella tabella di modifica del mio custom post type ma non riesco a farlo funzionare.

Ecco cosa ho provato:

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

Voglio solo filtrare i tag <span> nel mio titolo. Qualcuno potrebbe aiutarmi per favore?

0
Tutte le risposte alla domanda 3
6
27

1. Modificare il titolo del post nella colonna dell'elenco dei post

Ho frainteso quello che volevi - ovviamente. Puoi farlo così:

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

Sfruttando l'hook admin_head-$hook_suffix.


(Dichiarazione: Mantengo questo, perché è correlato e contiene buone informazioni)

2. Sostituire il titolo della colonna della tabella

Inoltre non stai usando e sovrascrivendo il titolo della colonna della tabella. Di seguito un codice esemplificativo su come farlo:

  1. Basato sull'hook manage_{$this->screen->id}_columns

    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' ] = 'nuovo titolo';  
        return $columns;  
    }  
    
  2. Basato sull'hook manage_{$post_type}_posts_columns

    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' ] = 'nuovo titolo';
        return $posts_columns;
    }
    

Ultimo ma non meno importante, il seguente codice è utile per ottenere le informazioni di cui hai bisogno:

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 );
}
8 lug 2014 17:07:31
Commenti

Scusa ho dimenticato la riga di return nel mio codice... Grazie per la risposta ma non è quello che sto cercando di ottenere. Non voglio cambiare il nome della colonna per il titolo, voglio cambiare il contenuto che viene restituito in questa colonna per ogni post. Al momento ho: "Questo è il mio titolo <span class="sub-title">numero 1</span>" per la prima riga, poi "Questo è il mio titolo <span class="sub-title">numero 2</span>" per la seconda riga, ecc. È più chiaro quello che sto cercando di ottenere?

Pipo Pipo
8 lug 2014 17:14:09

Fantastico!! È esattamente quello che volevo fare. Grazie mille!

Pipo Pipo
8 lug 2014 17:57:45

Ho provato la Soluzione 1 1. Change post title in post list column I valori sono cambiati, come posso rinominare anche l'etichetta?

Mohammad Fareed Mohammad Fareed
1 giu 2017 10:17:28

@Developer Intendi il titolo della colonna della tabella? Come descritto sotto il secondo punto.

Nicolai Grossherr Nicolai Grossherr
1 giu 2017 13:26:26

Stavo cercando di fare la stessa cosa ma per un'intestazione di tabella TASSONOMIA personalizzata (che deve essere abbreviata, visto che ne ho 10+). Puoi specificare una versione abbreviata per la colonna admin 'menu_name' nel suo array 'labels', ma stranamente questo non influisce sull'intestazione della tabella. Ho cercato molto e questo articolo continuava a saltare fuori, nulla per le tassonomie... SO: Con il tuo Metodo 2.1 =A, si può fare (colonne chiamate 'taxonomy-{my_tax_name}'), con il tuo Metodo 2.2 =B ottieni solo 'title' e 'date' e colonne auto-inserite come rivela il print_r.

user3445853 user3445853
26 nov 2019 11:16:22

@user3445853 Buono a sapersi. A volte non ci sono abbastanza informazioni specifiche disponibili, quindi vieni indirizzato a qualcosa di simile, come questo thread. Potresti fare una domanda specifica sulle tassonomie tu stesso, e poi darti la risposta che hai appena delineato nel tuo commento. Per una migliore comprensione o per non dover spiegare tutto da zero potresti voler linkare qui. C'è persino un badge per rispondere alla propria domanda, quindi è assolutamente incoraggiato. E faresti un servizio per le persone che cercano la stessa cosa in futuro.

Nicolai Grossherr Nicolai Grossherr
26 nov 2019 15:26:19
Mostra i restanti 1 commenti
3

Ho fatto qualcosa di simile poche ore fa, quindi il mio codice potrebbe non essere il migliore possibile, ma hai bisogno di usare 2 hook per ottenere questo risultato. Da quello che ho visto nel tuo codice, sembra che tu stia usando un custom post type, quindi questi due hook sarebbero.

manage_post_type_posts_columns()

manage_post_type_posts_custom_column()

Ho utilizzato l'hook filter manage_post_type_posts_columns() per creare una nuova colonna Titolo e rimuovere quella vecchia, e poi l'hook action manage_post_type_posts_custom_column() per usare il mio metodo personalizzato per generare il nuovo contenuto/titolo per questa colonna.

Spero che questo ti aiuti, ho aggiunto anche il tuo codice...

// Sostituisci la tua Colonna Titolo con quella esistente //
function replace_title_column($columns) {

    $new = array();

    foreach($columns as $key => $title) {
        if ($key=='title') 
        $new['new-title'] = 'Nuovo Titolo'; // Il Nome della Nostra Nuova Colonna
        $new[$key] = $title;
    }

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

// Sostituisci il titolo con il tuo titolo personalizzato
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);
8 lug 2014 17:17:07
Commenti

Grazie Matt. Sai se esiste un modo per filtrare solo la colonna "title" originale prima che il contenuto venga restituito? Preferirei non creare una nuova colonna per il titolo dato che quella originale include molte funzioni (modifica, modifica rapida, cestino, ecc.).

Pipo Pipo
8 lug 2014 17:28:46

@Etienne Temo di no. Forse qualcun altro può darci un'idea su come fare questa cosa, mi piacerebbe saperlo anch'io :-)

Matt Royal Matt Royal
8 lug 2014 17:37:52

Vedi la mia risposta rivista, non c'è bisogno di creare una nuova colonna. @Etienne

Nicolai Grossherr Nicolai Grossherr
8 lug 2014 17:44:29
0

Sostituire le Colonne

Ecco un esempio che sostituisce completamente le colonne, invece di aggiungere o rimuoverne di specifiche

function set_book_columns($columns) {
    return array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Titolo'),
        'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Commenti' ) . '"><span class="screen-reader-text">' . __( 'Commenti' ) . '</span></span>',
        'date' => __('Data'),
        'publisher' => __('Editore'),
        'book_author' =>__( 'Autore del Libro')
    );
}
add_filter('manage_book_posts_columns' , 'set_book_columns');

Vedi anche:manage_$post_type_posts_columns

30 apr 2018 15:16:14