web-dev-qa-db-ja.com

管理パネルにカスタムコメントメタデータを表示することは可能ですか?

私は自分のコメントフォームを新しいフィールドでカスタマイズしました(都市、でもそれは問題ではありません)。私はフックしてフィルタリングし、私のコメントメタデータをadd_comment_metadataで追加しました。

そのメタデータをコメント管理パネル(wp-admin/edit-comments.php)に表示したいのですが。 Googleの検索は無駄になります。

これは可能ですか?もしそうなら、どうやってそれを考えますか?

作成者の列に表示したいのですが、個々のコメントごとに編集ビューでメタデータを表示することにします。

1
ageektrapped

個々の編集ページにコンテンツを表示するには、コメント編集ページにカスタムメタボックスを追加する必要があります。 $pageadd_meta_box引数にはキーcommentを使用します。

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

おそらく管理者からの変更を保存できるようになるでしょう。それをするためにedit_commentにフックすることができます。

<?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'] ) );
}

あなたがもっと学ぶことに興味があるなら、私はこれについて tutorial を書きました - 上のコードスニペットはそれからです。

コメントリストテーブルのデータを表示することは、 投稿リストテーブルにカスタム列を追加することに似ています

確実に正しい画面を表示するには、load-edit-comments.phpにフックし、現在の画面を取得してからmanage_{$screen->id}_columnsにフックして、コメントリストテーブルに別の列を追加します。

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

manage_{$screen->id}_columnsにフックする関数は、列を含むように連想配列を変更するだけです。これは$key => $labelのペアです。キーを忘れないようにしてください。後で使用します。上記のコメントのタイトルのものに固執するつもりです。

最後に、実際のリストテーブルのコメントのタイトルをエコーアウトするためにmanage_comments_custom_columnにフックする必要があります。これはかなり簡単です。ここでswitchステートメントを使用したのは、より多くのカスタム列を含めるように簡単に拡張できるからです。

先ほど追加した列$keyは、フック関数に渡される最初の引数になります。

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

カスタムリストテーブルの列のためのコメントtutと上記のものからのコードは ここではプラグインとして です。

7
chrisguitarguy