상현에 하루하루
개발자의 하루

관리자 유저페이지 커스텀, 제거

( 업데이트: )

워드프레스 사용자 목록에서 특정 열을 제거, 추가하고싶었다.

워드프레스 기본 포스트타입인 posts를 제외한 커스텀 포스트 타입의 포스트 갯수는 볼 수가없나? 커스텀 포스트 타입이라 그럴 수 있다 생각했다.

그렇다면 어떻게 추가해야할까?

기본 정보 살펴보기

워드프레스 사용자 테이블에는 기본적으로 6개 기본제공 열이 있다.

wp-admin/includes/class-wp-users-list-table.php#269WP_Users_List_Table::get_columns() 메소드에 정의되어있다.

$c = array(
	'cb'       => '<input type="checkbox" />',
	'username' => __( 'Username' ),
	'name'     => __( 'Name' ),
	'email'    => __( 'E-mail' ),
	'role'     => __( 'Role' ),
	'posts'    => __( 'Posts' )
);Code language: PHP (php)

열 추가하기

열을 추가하기 위해서는 functions.php에 아래서 처럼 추가할 수 있다.

/*
 * Print Event Column Value
 */
add_filter('manage_users_custom_column', 'user_event_column_value', 10, 3);
function user_event_column_value($value, $column_name, $id)
{
    if ($column_name == 'user_events') {
        global $wpdb;
        $count = (int) $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(ID) FROM $wpdb->posts WHERE 
       post_type = 'events' AND post_status = 'publish' AND post_author = %d",
            $id
        ));
        return $count;
    } 
}Code language: PHP (php)

user_events열에 어떤 데이터가 들어갈 것인지 지정해준다.

add_filter('manage_users_columns', 'users_events_column');
function users_events_column($cols)
{
    $cols['user_events'] = 'user_events';
    return $cols;
}Code language: PHP (php)

위에 코드로 사용자목록에 열을 직정 지정해 준다.

이렇게하면 user_events라는 열과함께 포스트 타입이 events인 포스트들의 갯수를 구해 오고 사용자목록에 노출시킬 수 있다.

열 제거

어떻게 제거할 것인가?

add_filter('manage_users_columns', 'users_events_column');
function users_events_column($cols)
{
    $cols['user_events'] = 'user_events';
    return $cols;
}Code language: PHP (php)

위 코드가 열을 추가하는 코드였는데 여기서 $cols에 어떤 열들을 표현할 것인지 담겨있다. 그러면 이제 제거하고싶은 열을 배열에서 제거해주면된다.

나 같은 경우는 post 라는 이름의 포스트타입은 사용하지 않기 때문에 제거해야한다.

function users_events_column($cols)
{
    $cols['user_events'] = 'user_events';
    unset($cols['posts']);
    return $cols;
}Code language: PHP (php)

이런 식으로 posts를 제거하면 posts의 갯수 열은 제거된다.

응용 & 추가정보

사용자 정의 게시물 유형의 경우 manage_{$post_type}_posts_columns 필터를 사용할 수 있습니다.