問題描述
我可以列出網站上的用户上傳的所有文件嗎?在多站點中,每個用户都可以使用自己的博客管理他們的文件,但超級管理員無法監控所有上傳的文件… 我該怎麼做?
最佳解決方案
您必須運行每個博客,並獲取最近的附件:
$args = array (
'post_type' => 'attachment',
'numberposts' => 30
);
$attachments = get_posts( $args );
儀錶板小工具在 multi-site 的 wp_network_dashboard_setup 和 single-site 中的 wp_dashboard_setup 中註冊。
確保將以下行添加到插件頭以啓用插件網絡:
* Network: true
那麼你可以得到這樣的表:
(從我的本地開發網站,是的,它看起來有點奇怪)
示例插件,非常原始!
<?php # -*- coding: utf-8 -*-
/**
* Plugin Name: List recent uploads in a network
* Version: 2013.04.21
* Network: true
*/
if ( is_multisite() )
add_action(
'wp_network_dashboard_setup',
array ( 'T5_Recent_Uploads_Dashboard_Widget', 'register' )
);
else
add_action(
'wp_dashboard_setup',
array ( 'T5_Recent_Uploads_Dashboard_Widget', 'register' )
);
class T5_Recent_Uploads_Dashboard_Widget
{
protected static $instance = NULL;
protected $max_items = 30;
public static function register()
{
self::$instance = new self;
wp_add_dashboard_widget(
__CLASS__,
'Recent Uploads',
array ( self::$instance, 'render' )
);
}
public function render()
{
$uploads = $this->get_recent_uploads();
if ( empty ( $uploads ) )
return print '<p>No new uploads</p>';
printf( '<p>%d new uploads.</p>', count( $uploads ) );
print $this->get_attachment_table( $uploads );
// inspect content here
//print '<pre>$uploads = ' . htmlspecialchars( var_export( $uploads, TRUE ), ENT_QUOTES, 'utf-8', FALSE ) . '</pre>';
}
protected function get_recent_uploads()
{
if ( ! is_multisite() )
return $this->get_attachments();
$uploads = array();
$current_blog = get_current_blog_id();
$blogs = $this->get_blog_ids();
foreach ( $blogs as $blog )
{
switch_to_blog( $blog->blog_id );
$attachments = $this->get_attachments();
foreach ( $attachments as $attachment )
$uploads[] = $this->prepare_attachment( $attachment, $blog );
}
// restore current blog
switch_to_blog( $current_blog );
return array_slice( $uploads, 0, $this->max_items );
}
protected function prepare_attachment( $attachment, $blog )
{
$attachment->blog_id = $blog->blog_id;
$attachment->blog_name = get_bloginfo( 'name' );
$attachment->edit = get_edit_post_link( $attachment->ID );
return $attachment;
}
protected function get_blog_ids()
{
global $wpdb;
$query = $wpdb->prepare(
"SELECT blog_id
FROM $wpdb->blogs
WHERE site_id = %d
AND public = '1'
AND archived = '0'
AND mature = '0'
AND spam = '0'
AND deleted = '0'
ORDER BY blog_id",
$wpdb->siteid
);
return $wpdb->get_results( $query );
}
protected function get_attachment_table( $attachments )
{
$table = '<table class="widefat">' . $this->get_table_header() . '<tbody>';
foreach ( $attachments as $attachment )
$table .= $this->get_row( $attachment );
return "$table</tbody></table>";
}
protected function get_attachments()
{
$args = array (
'post_type' => 'attachment',
'numberposts' => $this->max_items
);
return get_posts( $args );
}
protected function get_table_header()
{
$columns = array ( 'Attachment', 'User', 'Date' );
if ( is_multisite() )
$columns[] = 'Site';
$header = '<tr><th>' . join( '</th><th>', $columns ) . '</th></tr>';
return "<thead>$header</thead><tfoot>$header</tfoot>";
}
protected function get_row( $attachment )
{
$cells = array ();
$cells[] = $this->get_attachment_title( $attachment );
$cells[] = $this->get_user_link( $attachment );
$cells[] = mysql2date( 'Y.m.d', $attachment->post_date );
if ( is_multisite() )
$cells[] = $attachment->blog_name;
return '<tr><td>' . join( '</td><td>', $cells ) . '</td></tr>';
}
protected function get_attachment_title( $attachment )
{
$title = $attachment->post_title;
if ( empty ( $title ) )
$title = basename( $attachment->guid );
return "<a href='$attachment->edit'>$title</a>";
}
protected function get_user_link( $attachment )
{
$name = get_the_author_meta( 'nickname', $attachment->post_author );
$url = network_admin_url( 'user-edit.php?user_id=' . $attachment->post_author );
return "<a href='$url'>$name</a>";
}
}
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。
