내가 질문을 이해 했다고 가정하면 관리자가 관리하는 페이지의 열 헤더 및 열 값과 관련된 두 가지 후크에 연결해야합니다. 그들은이다 'manage_{$type}_columns'
와 'manage_{$type}_custom_column'
어디에서 사용 사례가 {$type}
있다 users
.
'manage_users_columns'
후크
첫 번째는 간단하며 열 머리글을 지정하여 사용 가능한 열을 지정할 수 있습니다. WordPress는 "게시물" 열의 값을 하드 코딩 하므로,이를 변경하기 때문에이를 제거하고 unset()
제목이 같은 새 열을 추가하지만 식별자는 'custom_posts'
다음 과 같습니다.
add_action('manage_users_columns','yoursite_manage_users_columns');
function yoursite_manage_users_columns($column_headers) {
unset($column_headers['posts']);
$column_headers['custom_posts'] = 'Posts';
return $column_headers;
}
'manage_users_custom_column'
후크
다음 'manage_users_custom_column'
으로 비표준 열에 대해서만 호출되는 후크 를 사용해야합니다 . 우리 $column_name=='custom_posts'
는 미래에 새로운 사용자 열을 추가 할 경우를 대비하여 코드를 강력하게 만들기 위해 테스트 한 다음 다음에 설명 할 함수에서 사용자 게시물 유형 수를 가져옵니다 _yoursite_get_author_post_type_counts()
. 나는 다음이를 포맷 할 수있는 몇 가지 방법으로 연주하지만, HTML 결정 <table>
에 가장 적합한이었다 (그 이후 인 데이터 테이블) . 테이블이 작동하지 않으면 다른 마크 업을 매우 쉽게 생성 할 수 있다고 가정합니다.
add_action('manage_users_custom_column','yoursite_manage_users_custom_column',10,3);
function yoursite_manage_users_custom_column($custom_column,$column_name,$user_id) {
if ($column_name=='custom_posts') {
$counts = _yoursite_get_author_post_type_counts();
$custom_column = array();
if (isset($counts[$user_id]) && is_array($counts[$user_id]))
foreach($counts[$user_id] as $count)
$custom_column[] = "\t<tr><th>{$count['label']}</th>" .
"<td>{$count['count']}</td></tr>";
$custom_column = implode("\n",$custom_column);
}
if (empty($custom_column))
$custom_column = "No Posts!";
else
$custom_column = "<table>\n{$custom_column}\n</table>";
return $custom_column;
}
각 사용자 / 저자에 대한 게시물 유형별 게시물 수 얻기
마지막으로 저자 / 사용자가 게시물 유형별로 게시물 수를 검색합니다. 일반적으로 내가 사용을 고수하려고 WP_Query()
게시물에 대한 쿼리를 실행할 때하지만이 쿼리는 단지로 쉽게 듯 다른 많은 후크를 사용하여 필요한 것 "장난 꾸러기" 하나에 모든 작업을 수행 할 수 있습니다.
나는 어떤 포스트 생략 $post->post_type
IS 'revision'
또는 'nav_menu_item'
만에 왼쪽 'attachments'
. 내가 한 몇 가지를 제외하는 대신 원하는 게시물 유형을 명시 적으로 포함하는 것이 좋습니다.
나는 또한 필터링 $post->post_status
만 해당 'publish'
하고 'pending'
. 당신은 또한 포함 할 경우 'future'
, 'private'
및 / 또는 'draft'
당신은 코드의 변경 사항을 확인해야합니다.
각 페이지로드 마다이 _yoursite_get_author_post_type_counts()
함수를 한 번만 호출 한 다음 각 사용자를 호출하지 않고 정적 변수에 저장하십시오. 요소에 Post Type 이름이있는 배열을 포함하는 작성자 / 사용자 ID로 색인 된 배열에 저장하고 'label'
물론 동일한 이름의 요소에 카운트를 저장합니다.
function _yoursite_get_author_post_type_counts() {
static $counts;
if (!isset($counts)) {
global $wpdb;
global $wp_post_types;
$sql = <<<SQL
SELECT
post_type,
post_author,
COUNT(*) AS post_count
FROM
{$wpdb->posts}
WHERE 1=1
AND post_type NOT IN ('revision','nav_menu_item')
AND post_status IN ('publish','pending')
GROUP BY
post_type,
post_author
SQL;
$posts = $wpdb->get_results($sql);
foreach($posts as $post) {
$post_type_object = $wp_post_types[$post_type = $post->post_type];
if (!empty($post_type_object->label))
$label = $post_type_object->label;
else if (!empty($post_type_object->labels->name))
$label = $post_type_object->labels->name;
else
$label = ucfirst(str_replace(array('-','_'),' ',$post_type));
if (!isset($counts[$post_author = $post->post_author]))
$counts[$post_author] = array();
$counts[$post_author][] = array(
'label' => $label,
'count' => $post->post_count,
);
}
}
return $counts;
}
결과 UI
그리고 이것은 WordPress 3.0.1의 테스트 설치에 적용된 것처럼 보입니다.
(출처 : mikeschinkel.com )
전체 코드 다운로드
Gist 에서 전체 코드를 다운로드 할 수 있습니다 .
이 코드를 테마의 functions.php
파일 로 복사 하거나 플러그인에 파일을 포함시킬 수 있습니다.
도움이 되었기를 바랍니다!