Remplacement du titre dans le tableau de la liste des administrateurs

10

Voici ma situation: j'essaie de filtrer le contenu de la colonne de titre dans ma table d'édition de type de message personnalisé, mais je ne peux pas le faire fonctionner.

Voici ce que j'ai essayé:

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

Je veux juste filtrer les <span>balises de mon titre. Quelqu'un peut-il m'aider, s'il vous plaît?

Pipo
la source

Réponses:

19

1. Modifier le titre de l'article dans la colonne de la liste d'articles

J'ai mal compris ce que vous vouliez - évidemment. Vous pouvez faire ça comme ceci:

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

Faire usage du admin_head-$hook_suffixcrochet.


(Avertissement: Gardez cela, car il est lié et de bonnes informations)

2. Remplacez le titre de la colonne du tableau

De plus, vous n'utilisez pas et n'écrasez pas le titre du tableau des colonnes. Ci-dessous un exemple de code sur la façon de le faire:

  1. Basé sur le manage_{$this->screen->id}_columnscrochet

    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. Basé sur le manage_{$post_type}_posts_columnscrochet

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

Enfin, le code suivant est pratique pour obtenir les informations dont vous avez besoin:

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
la source
Désolé d'avoir oublié la ligne de retour dans mon code ... Merci pour votre réponse mais ce n'est pas ce que j'essaie de réaliser. Je ne veux pas changer le nom de la colonne pour le titre, je veux changer le contenu qui est retourné dans cette colonne pour chaque article. En ce moment, j'ai: "This my title <span class =" sub-title "> numéro 1 </span>" pour la première ligne puis "This my title <span class =" sub-title "> numéro 2 </span> "pour la deuxième rangée, etc. Est-ce plus clair ce que j'essaie de réaliser?
Pipo
Impressionnant!! C'est exactement ce que je voulais faire. Merci beaucoup!
Pipo
i Les 1. Change post title in post list columnvaleurs de la Solution 1 testée sont des changements, comment puis-je également renommer l'étiquette. ?
Développeur
@Developer Vous voulez dire le titre de la colonne du tableau? Comme décrit sous deuxième.
Nicolai
1
J'essayais de faire la même chose mais pour un en-tête de table TAXONOMY personnalisé (qui doit être raccourci, car j'en ai 10+). Vous pouvez donner un raccourci pour la colonne admin 'nom_menu' dans son tableau 'labels', mais étrangement cela n'affecte pas la tête de table. J'ai beaucoup cherché et cet article revenait, rien pour les taxonomies ... SO: Avec votre méthode 2.1 = A, cela peut être fait (colonnes nommées 'taxonomy- {my_tax_name}'), avec votre méthode 2.2 = B vous uniquement obtenez les colonnes 'title' et 'date' et auto-insérées comme le révèle print_r.
user3445853
1

Je viens de faire quelque chose de similaire il y a quelques heures, donc mon code n'est peut-être pas le meilleur possible, mais vous devez utiliser 2 crochets pour y parvenir. Comme vous semblez utiliser un type de message personnalisé d'après ce que j'ai vu dans votre code, ces deux crochets le seraient.

manage_post_type_posts_columns ()

manage_post_type_posts_custom_column ()

J'ai utilisé le manage_post_type_posts_columns()crochet de filtre pour créer une nouvelle colonne Titre et désinstaller l'ancienne, puis le manage_post_type_posts_custom_column()crochet d'action pour utiliser ma propre méthode pour générer le nouveau contenu / titre pour cette colonne.

J'espère que cela vous aide, vous avez également ajouté votre code ...

// 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
la source
Merci Matt. Savez-vous s'il existe un moyen de simplement filtrer la colonne "titre" d'origine avant que le contenu ne soit renvoyé? Je ne veux pas vraiment créer une nouvelle colonne de titre car l'original est livré avec beaucoup de fonctions (édition, édition rapide, corbeille, etc.).
Pipo
@Etienne, j'en ai bien peur. Peut-être que quelqu'un d'autre peut nous donner une idée sur la façon de procéder, aimerait également savoir :-)
Matt Royal
Voir ma réponse révisée, pas besoin de créer une nouvelle colonne. @Etienne
Nicolai
0

Remplacer les colonnes

Voici un exemple qui remplace complètement les colonnes, plutôt que d'ajouter et de supprimer des colonnes spécifiques

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');

Voir plus:manage_$post_type_posts_columns

Super modèle
la source