问题描述
我可以列出网站上的用户上传的所有文件吗?在多站点中,每个用户都可以使用自己的博客管理他们的文件,但超级管理员无法监控所有上传的文件… 我该怎么做?
最佳解决方案
您必须运行每个博客,并获取最近的附件:
$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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。