web-dev-qa-db-ja.com

コメント画面のコラムを編集したいですか?

現時点で私はやっている

add_filter("manage_edit-comments_columns", function($columns) {
        unset($columns["author"]);
        $columns_one = array_slice($columns,0,1);
        $columns_two = array_slice($columns,1);
        $columns_one["user"] = "User";
        $columns = $columns_one + $columns_two;
        return $columns;
    });

add_filter( 'manage_comments_custom_column', function($column, $column_id) {
        echo "Test";
    },10, 2 );

自分自身を削除して作成するのではなく、単に作成者列を編集する方法はありますか?

4
user1954882

この列にはフィルタがありません。だから答えは「いいえ」です。

WP_List_TableはListerのクラス内でメソッドcolumn_ {something}を検索します。コメントリストクラスにはcolumn_authorがあります。それで、このコラムを殺して、あなたが今するようにフィルタを作成してください。

2
Butuzov

私は同様のことが必要だったので、私はこの質問に来ました。 qwerty-qwerty による答えは正しいのですが、それは部分的にしか正しいとは言えません。私の知る限りでは、作者は列名を変更する必要がありましたが、作者の列自体の内容は変更する必要がありました。したがって、これは少し異なりますが、私が行ったように誰かがこの質問を見つけた場合に備えて、ここに残しておきます。これは、メタテーブルに格納されておらず、前述のテーブルのようにキャッシュされておらず、アイテムごとに個別のクエリを実行したくないコメントに関する追加データを取得する必要がある場合にも機能します。

だから、あなたができることはthe_commentsフィルタにフックすることです。このフィルタは、リクエストに一致する、見つかった各コメントに対してWP_Comment_Objectインスタンスの配列を渡します。私の場合、コメントはユーザーの表示名以外の名前で保存することができるので、その場合はwp_usersテーブルから実際の表示名を取得してcomment_author_from_wp_comments (display_name_from_wp_users)のように表示する必要がありました。フィルタを通過した配列を調べ、どのコメントがwp_usersテーブルから追加情報を必要とするかを考え出し、そのテーブルに対して単一クエリを実行してから、元の配列内の要素を新しいデータで変更しました。これが私のコードのしくみの一般的な考え方です。

function my_filter($objects)
{   
    global $current_screen;
    if (is_admin() && $current_screen->id == 'edit-comments') // I only needed it on that screen within admin
    {
        if (count($objects) > 0)
        {
            foreach ($objects as $key => $object)
            {
                //find out which comments needed 'fixing'
            }
            //do the actual fixing
        }
    }
    return $objects; //return modified or unmodified array
}
add_filter('the_comments', 'my_filter');

うまくいけば、将来的に誰かがこれが役に立つと思うでしょう。

1
Igor Yavych