Soruyu anladığımı varsayarak , yönetici yönetme sayfaları için sütun başlıkları ve sütun değeri ile ilgili iki kancaya kanca yapmanız gerekir. Bunlar 'manage_{$type}_columns'
ve 'manage_{$type}_custom_column'
nerede kullanımınız durum {$type}
olduğunu users
.
'manage_users_columns'
kanca
Bu ilki basittir, sütun başlıklarını ve dolayısıyla kullanılabilir sütunları belirtmenize olanak tanır. WordPress, "Yayınlar" sütununun değerini kodlar, böylece değiştirmek istediğinizden unset()
sonra onu kaldıracağız ve aynı başlığa sahip yeni bir sütun ekleyeceğiz, ancak bunun yerine tanımlayıcı var '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'
kanca
Ardından, 'manage_users_custom_column'
yalnızca standart olmayan sütunlar için çağrılan kancayı kullanmanız gerekir . $column_name=='custom_posts'
İleride yeni kullanıcı sütunları eklememiz durumunda kodumuzu sağlamlaştırmak için test yapıyoruz ve daha sonra _yoursite_get_author_post_type_counts()
yazacağım işlevden bir sonraki tartışacağım kullanıcı yazım türü sayılarını alıyoruz . Daha sonra bunu biçimlendirmek için birkaç yolla oynadım ancak bir HTML'nin <table>
en uygun olduğuna karar verdim (çünkü bir veri tablosu olduğu için) . Bir tablo sizin için işe yaramazsa, kolayca kolayca farklı işaretlemeler oluşturabileceğinizi varsayalım:
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;
}
Her Kullanıcı / Yazar için Yazı Türlerine Göre Yazı Sayma
Son olarak yazar / kullanıcı tarafından yazı tipine göre yazı sayımlarının alınması. Genellikle WP_Query()
mesajlarda sorgular çalıştırırken kullanmaya çalışıyorum ama bu sorgu sadece "yaramaz" ve hepsi bir arada yapmak daha kolay görünüyordu daha birçok kanca kullanarak gerekli olurdu .
Ben herhangi yazı atlanmış $post->post_type
DİR 'revision'
ya 'nav_menu_item'
ama sol 'attachments'
. Yaptığım birkaç hariç tutmak yerine, istediğiniz yazı türlerini açıkça eklemeyi daha iyi bulabilirsiniz.
Ben de $post->post_status
sadece 'publish'
ve tarafından filtre 'pending'
. Ayrıca eklemek istiyorsanız 'future'
, 'private'
ve / veya 'draft'
kodda değişiklik yapmak gerekir.
Her sayfa yükü için bu _yoursite_get_author_post_type_counts()
işlevi yalnızca bir kez çağırırım ve sonra her kullanıcı için çağrı yerine statik bir değişkende saklarım. Öğede Post Type adına sahip bir dizi 'label'
ve elbette aynı adlı öğedeki sayımı içeren yazar / kullanıcı kimlikleriyle dizinlenmiş bir dizide depolarım :
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;
}
Sonuçtaki Kullanıcı Arayüzü
Ve bu, WordPress 3.0.1 test yüklememe uygulanmış gibi görünüyor:
(kaynak: mikeschinkel.com )
Tam Kodu İndirin
Şunları yapabilirsiniz indirmek tam kod Gist :
Bu kodu temanızın functions.php
dosyasına veya mağazasına ekleyebilir , hangisini seçerseniz seçin.
Bu yardımcı olur umarım!