Înlocuirea titlului în tabelul de administrare

8 iul. 2014, 16:20:22
Vizualizări: 22.8K
Voturi: 11

Iată situația mea: Încerc să filtrez conținutul coloanei de titlu în tabelul de editare pentru tipul meu de postare personalizat, dar nu reușesc să-l fac să funcționeze.

Iată ce am încercat:

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

Vreau doar să filtrez etichetele <span> din titlul meu. Poate cineva să mă ajute?

0
Toate răspunsurile la întrebare 3
6
27

1. Schimbarea titlului postării în coloana listei de postări

Am înțeles greșit ceea ce doreai - evident. Poți face asta în felul următor:

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

Folosind hook-ul admin_head-$hook_suffix.


(Notă: Păstrez acest cod, deoarece este relevant și oferă informații utile)

2. Înlocuirea titlului coloanei din tabel

În plus, nu folosești și suprascrii titlul coloanei din tabel. Mai jos este un exemplu de cod pentru a face acest lucru:

  1. Bazat pe hook-ul 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' ] = 'titlu nou';  
        return $columns;  
    }  
    
  2. Bazat pe hook-ul 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' ] = 'titlu nou';
        return $posts_columns;
    }
    

În cele din urmă, următorul cod este util pentru a obține informațiile de care ai nevoie:

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 iul. 2014 17:07:31
Comentarii

Scuze, am uitat linia de return în codul meu... Mulțumesc pentru răspuns, dar nu asta încerc să obțin. Nu vreau să schimb numele coloanei pentru titlu, ci conținutul returnat în această coloană pentru fiecare post. Momentan am: "Acesta este titlul meu <span class="sub-title">numărul 1</span>" pentru primul rând, apoi "Acesta este titlul meu <span class="sub-title">numărul 2</span>" pentru al doilea rând, etc. E mai clar acum ce încerc să obțin?

Pipo Pipo
8 iul. 2014 17:14:09

Super!! Exact asta voiam să fac. Mulțumesc mult!

Pipo Pipo
8 iul. 2014 17:57:45

Am încercat Soluția 1 1. Change post title in post list column Valorile s-au schimbat, Cum pot redenumi și Eticheta? . ?

Mohammad Fareed Mohammad Fareed
1 iun. 2017 10:17:28

@Developer Te referi la titlul coloanei din tabel? Așa cum este descris la al doilea punct.

Nicolai Grossherr Nicolai Grossherr
1 iun. 2017 13:26:26

Încercam să fac același lucru dar pentru un antet de tabel TAXONOMIE personalizat (care trebuie scurtat, având în vedere că am 10+). Poți oferi o prescurtare pentru coloana admin 'menu_name' în array-ul său 'labels', dar ciudat că asta nu afectează antetul tabelului. Am căutat mult și acest articol tot apărea, dar nimic pentru taxonomii... SO: Cu Metoda ta 2.1 =A, se poate face (coloane numite 'taxonomy-{my_tax_name}'), cu Metoda ta 2.2 =B obții doar 'title' și 'date' și coloane auto-inserate după cum arată print_r.

user3445853 user3445853
26 nov. 2019 11:16:22

@user3445853 Bine de știut. Uneori nu există suficiente informații specifice disponibile, așa că ești direcționat către ceva similar, ca acest thread. Ai putea pune singur o întrebare axată pe taxonomii, și apoi să-ți răspunzi chiar cu explicația pe care ai oferit-o în comentariu. Pentru o mai bună înțelegere sau ca să nu explici totul de la zero, poți include un link către aici. Există chiar un insignă pentru răspunsul la propria întrebare, așa că e încurajat. Și ai face un serviciu pentru cei care caută același lucru în viitor.

Nicolai Grossherr Nicolai Grossherr
26 nov. 2019 15:26:19
Arată celelalte 1 comentarii
3

Am făcut ceva similar acum câteva ore, așa că codul meu poate să nu fie cel mai bun posibil, dar ai nevoie de două hook-uri pentru a realiza asta. Din ceea ce am văzut în codul tău, pare că folosești un custom post type, așadar aceste două hook-uri ar fi.

manage_post_type_posts_columns()

manage_post_type_posts_custom_column()

Am folosit hook-ul de filtrare manage_post_type_posts_columns() pentru a crea o nouă coloană Title și am eliminat-o pe cea veche, apoi hook-ul de acțiune manage_post_type_posts_custom_column() pentru a folosi propria metodă de generare a noului conținut/titlu pentru această coloană.

Sper că te ajută, am adăugat și codul tău...

// Înlocuiește coloana Title cu una existentă //
function replace_title_column($columns) {

    $new = array();

    foreach($columns as $key => $title) {
        if ($key=='title') 
        $new['new-title'] = 'Titlu Nou'; // Numele noii noastre coloane
        $new[$key] = $title;
    }

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

// Înlocuiește titlul cu titlul tău personalizat
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 iul. 2014 17:17:07
Comentarii

Mulțumesc, Matt. Știi cumva dacă există o modalitate de a filtra doar coloana originală "title" înainte ca conținutul să fie returnat? Nu prea doresc să creez o nouă coloană pentru titlu, deoarece cea originală vine cu o mulțime de funcții (editare, editare rapidă, coș de gunoi etc.).

Pipo Pipo
8 iul. 2014 17:28:46

@Etienne Din păcate, nu cred. Poate cineva altcineva ne poate oferi o idee despre cum am putea face acest lucru, aș dori și eu să știu :-)

Matt Royal Matt Royal
8 iul. 2014 17:37:52

Vezi răspunsul meu revizuit, nu este nevoie să creezi o nouă coloană. @Etienne

Nicolai Grossherr Nicolai Grossherr
8 iul. 2014 17:44:29
0

Înlocuirea Coloanelor

Iată un exemplu care înlocuiește complet coloanele, în loc să adauge sau să elimine anumite coloane specifice

function set_book_columns($columns) {
    return array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Titlu'),
        'comments' => '<span class="vers comment-grey-bubble" title="' . esc_attr__( 'Comentarii' ) . '"><span class="screen-reader-text">' . __( 'Comentarii' ) . '</span></span>',
        'date' => __('Dată'),
        'publisher' => __('Editor'),
        'book_author' =>__( 'Autorul Cărții')
    );
}
add_filter('manage_book_posts_columns' , 'set_book_columns');

Vezi mai multe:manage_$post_type_posts_columns

30 apr. 2018 15:16:14