web-dev-qa-db-fra.com

Ajouter une colonne personnalisée à la liste des publications personnalisées

Je souhaite avoir une colonne (par exemple, Envoyer un courrier électronique) dans ma liste de publications personnalisées (livres). Dans chaque ligne, il devrait y avoir un bouton (Envoyer) et quand je clique dessus, je veux envoyer un email.

J'ai vu est un crochet manage_posts_custom_column pour ajouter une colonne personnalisée, mais ce crochet ajoute uniquement des méta de publication en tant que colonnes telles que l'image sélectionnée, etc.

Comment faire cela, aidez-moi s'il vous plaît.


Capture d'écran

 enter image description here 

2
Bhuvnesh Gupta

Ajout d'une nouvelle colonne à la table books Post

Ici on peut utiliser les filtres

manage_{$post->post_type}_posts_custom_column
manage_{$post->post_type}_posts_columns

ou pour le type de poste books:

manage_books_posts_custom_column
manage_books_posts_columns

Voici un exemple d'affichage d'un bouton pour chaque ligne de la colonne send_email:

/**
 * Books Post Table: Display a utton in each row in the 'send_email' column
 */
add_action( 'manage_books_posts_custom_column', function ( $column_name, $post_id ) 
{
    if ( $column_name == 'send_email')
        printf( '<input type="button" value="%s" />', esc_attr( __( 'Send Email' ) ) );

}, 10, 2 );

Pour ajouter la colonne send_email, nous pouvons utiliser:

/**
 * Books Post Table: Add the 'send_email' column
 */
add_filter('manage_books_posts_columns', function ( $columns ) 
{
    if( is_array( $columns ) && ! isset( $columns['send_email'] ) )
        $columns['send_email'] = __( 'Send Email' );     
    return $columns;
} );

Nous pourrions aussi limiter la largeur de la colonne avec:

/**
 * Limit the 'send_email' column width
 */
add_action( 'admin_print_styles-edit.php', function()
{        
    echo '<style> .column-send_email { width: 100px; }</style>';
} );

Voici un exemple de sortie:

 button 

Vous devrez ensuite implémenter le fonctionnement du bouton.

ps: J'ai enlevé la deuxième partie de ma réponse, car cette partie de votre question serait mieux servie comme une nouvelle question séparée.

7
birgire