web-dev-qa-db-fra.com

Est-il possible d'afficher des métadonnées de commentaire personnalisées dans le panneau d'administration?

J'ai personnalisé mon formulaire de commentaire avec un nouveau champ (ville, mais cela n'a pas vraiment d'importance). J'ai accroché, filtré et ajouté mes métadonnées de commentaire avec add_comment_metadata.

Je souhaite afficher ces métadonnées dans le panneau d'administration Commentaires (wp-admin/edit-comments.php). Les recherches sur Google sont infructueuses.

Est-ce possible? Si c'est le cas, comment s'y prend-on?

J'aimerais le montrer dans la colonne auteur, mais je me contenterai d'afficher les métadonnées dans la vue d'édition pour chaque commentaire.

1
ageektrapped

Pour afficher le contenu sur des pages d'édition individuelles, vous devez ajouter des boîtes de méta personnalisées à la page d'édition de commentaires. Vous utiliserez la clé comment pour l'argument $page de add_meta_box.

<?php
add_action( 'add_meta_boxes_comment', 'pmg_comment_tut_add_meta_box' );
function pmg_comment_tut_add_meta_box()
{
    add_meta_box( 'pmg-comment-title', __( 'Comment Title' ), 'pmg_comment_tut_meta_box_cb', 'comment', 'normal', 'high' );
}

function pmg_comment_tut_meta_box_cb( $comment )
{
    $title = get_comment_meta( $comment->comment_ID, 'pmg_comment_title', true );
    wp_nonce_field( 'pmg_comment_update', 'pmg_comment_update', false );
    ?>
    <p>
        <label for="pmg_comment_title"><?php _e( 'Comment Title' ); ?></label>;
        <input type="text" name="pmg_comment_title" value="<?php echo esc_attr( $title ); ?>" class="widefat" />
    </p>
    <?php
}

Vous voudrez probablement aussi pouvoir sauvegarder les modifications depuis l'administrateur. Vous pouvez vous connecter à edit_comment pour le faire.

<?php
add_action( 'edit_comment', 'pmg_comment_tut_edit_comment' );
function pmg_comment_tut_edit_comment( $comment_id )
{
    if( ! isset( $_POST['pmg_comment_update'] ) || ! wp_verify_nonce( $_POST['pmg_comment_update'], 'pmg_comment_update' ) )
        return;
    if( isset( $_POST['pmg_comment_title'] ) )
        update_comment_meta( $comment_id, 'pmg_comment_title', esc_attr( $_POST['pmg_comment_title'] ) );
}

J'ai écrit un tutoriel à ce sujet si vous souhaitez en savoir plus - les extraits de code ci-dessus proviennent de celui-ci.

Afficher les données dans la table de liste de commentaires est similaire à ajouter des colonnes personnalisées pour publier des tables de liste .

Pour vous assurer que nous obtenons le bon écran, connectez-vous à load-edit-comments.php, saisissez l'écran actuel, puis raccordez-le à manage_{$screen->id}_columns pour ajouter une autre colonne à la table de la liste de commentaires.

<?php
add_action('load-edit-comments.php', 'wpse64973_load');
function wpse64973_load()
{
    $screen = get_current_screen();

    add_filter("manage_{$screen->id}_columns", 'wpse64973_add_columns');
}

La fonction que vous raccordez à manage_{$screen->id}_columns doit simplement modifier le tableau associatif pour inclure la colonne. C'est une paire $key => $label - assurez-vous de vous souvenir de la clé, nous l'utiliserons plus tard. Je vais m'en tenir au titre du commentaire ci-dessus.

Enfin, nous devons nous accrocher à manage_comments_custom_column pour répercuter le titre du commentaire dans la liste. C'est assez simple. J'ai utilisé une instruction switch ici car facilement extensible pour inclure davantage de colonnes personnalisées.

Toute colonne $key que vous avez ajoutée précédemment constituera le premier argument transmis à la fonction raccordée.

<?php
add_action('manage_comments_custom_column', 'wpse64973_column_cb', 10, 2);
function wpse64973_column_cb($col, $comment_id)
{
    // you could expand the switch to take care of other custom columns
    switch($col)
    {
        case 'title':
            if($t = get_comment_meta($comment_id, 'pmg_comment_title', true))
            {
                echo esc_html($t);
            }
            else
            {
                esc_html_e('No Title', 'wpse64973');
            }
            break;
    }
}

Le code du commentaire et des éléments ci-dessus pour les colonnes de la liste personnalisée est ici en tant que plugin .

7
chrisguitarguy