Products
GG网络技术分享 2025-03-18 16:14 0
个人喜欢折腾,这里面的功能完全可以通过插件来解决,而且更加强大,但是我个人方面仅仅是希望添加一个每天按照分类筛选的功能,经过寻找,确实是找到了相关代码,测试过后也没有任何问题。
这里直接附上代码:
add_action('pre_get_posts', 'my_filter_media_by_cat');
add_action( 'restrict_manage_posts', 'my_add_media_cat_dropdown' );
function my_filter_media_by_cat( $q ) {
$scr = get_current_screen();
$cat = filter_input(INPUT_GET, 'postcat', FILTER_SANITIZE_STRING );
if ( ! $q->is_main_query() || ! is_admin() || (int)$cat <= 0 || $scr->base !== 'upload' )
return;
// get the posts
$posts = get_posts( 'nopaging=1&category=' . $cat );
// get post ids
$pids = ( ! empty( $posts ) ) ? wp_list_pluck($posts, 'ID') : false;
if ( ! empty($pids) ) {
$pidstxt = implode($pids, ',');
global $wpdb;
// get the ids of media having retrieved posts as parent
$mids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_parent IN ($pidstxt)");
if ( ! empty($mids) ) {
// force media query to retrieve only media having retrieved posts as parent
$q->set( 'post__in', $mids );
} else {
// force media query to return no posts
$q->set( 'p', -1 ); // let query found nothing
}
}
}
function my_add_media_cat_dropdown() {
$scr = get_current_screen();
if ( $scr->base !== 'upload' ) return;
$cat = filter_input(INPUT_GET, 'postcat', FILTER_SANITIZE_STRING );
$selected = (int)$cat > 0 ? $cat : '-1';
$args = array(
'show_option_none' => 'All Post Categories',
'name' => 'postcat',
'selected' => $selected
);
wp_dropdown_categories( $args );
}代码逻辑方面备注也是相当清楚了,大家有兴趣的可以看看。
如果你觉得上面的代码比较复杂的话。可以考虑下面的插件:
https://wordpress.org/plugins/media-library-organizer/
图像和其他媒体文件是任何WordPress网站的重要组成部分。要有效地使用它们,有助于牢牢掌握WordPress媒体库的工作原理。
这个方便的WordPress功能使您能够 随着时间的推移存储和管理您的图像和其他媒体。通过一些内幕知识和一些简单的技巧,您可以通过媒体库做很多事情来改进您的网站。
在本综合指南中,我们将带您了解有关WordPress媒体库的所有信息,包括如何导入和下载内容。我们还将介绍图像编辑、长期文件管理和四个用于合并高级功能的技巧。
就其核心而言,您的WordPress媒体库正如其名称所暗示的那样:您上传到网站的所有媒体文件的目录:
WordPress媒体库
WordPress能够托管多种类型的媒体,包括:
它还具有一些有限的照片编辑功能,因此您可以直接从仪表板根据需要进行调整。
要访问您的媒体库,只需随时单击管理侧栏中的媒体 :
访问WordPress媒体库
这里有一些基本选项可用。
首先,您可以通过单击相关图标来确定是否要在列表或网格视图中查看您的文件:
WordPress媒体库视图选项
您还可以使用下拉菜单过滤文件:
过滤WordPress媒体库文件
第一个菜单使您可以按类型查看媒体,而第二个菜单将按上传日期过滤您图书馆的内容。
您还可以使用搜索栏按名称查找特定文件:
WordPress媒体库搜索栏
最后,还有一个批量选择按钮。此功能可让您一次从WordPress安装中删除多个文件:
WordPress媒体库中的批量选择选项
这涵盖了WordPress媒体库屏幕中可用的所有本机功能。
正如您稍后将看到的,您可以进行许多修改来增强它。但是,首先,我们需要讨论如何将文件添加到WordPress。
您可以通过几种不同的方式将文件(例如您网站的收藏夹图标)添加到您的WordPress媒体库。首先是导航到媒体> 添加新文件:
访问WordPress媒体上传器
在这里,您可以上传保存在计算机或其他设备上的文件:
WordPress媒体上传器
您还可以直接从WordPress编辑器添加媒体。在区块编辑器中,首先为要合并的媒体类型添加相应的区块:
WordPress媒体区块
在生成的占位符中,选择上传并从您的计算机中选择一个文件:
从区块编辑器上传媒体
或者,您可以简单地将文件从桌面拖放到相关块中。
在经典编辑器中,您需要单击添加媒体按钮:
经典编辑器添加媒体按钮
然后导航到“上传” 选项卡并从您的计算机中选择一个文件:
从经典编辑器上传媒体
您还可以随时将文件从桌面直接拖放到编辑器中。
在某些情况下,您可能会发现需要通过FTP手动将媒体文件上传到WordPress站点。您可以使用诸如FileZilla之类的客户端来执行此操作。
连接到服务器后,导航到wp-content > uploads:
通过FileZilla将文件上传到WordPress媒体库目录
将文件上传到此目录以将它们添加到您的媒体库。
在某些情况下,您可能需要将文件从媒体库下载到计算机上。WordPress使您可以通过导航到工具 > 导出来本地执行此操作:
WordPress导出工具
然后选择媒体选项。如果您只需要在特定时间范围内上传的文件,您可以使用下拉菜单来指定您的请求:
导出WordPress媒体
最后,单击“下载导出文件”按钮。这会将相关媒体文件下载到您的计算机。
正如我们之前提到的,WordPress具有一些原生图像编辑功能。要访问它们,请导航到您的 WordPress 媒体库并选择要编辑的文件。然后,单击“编辑图像” 按钮:
WordPress中的“编辑图像”按钮
这将打开图像编辑器:
WordPress图像编辑器
您可以进行五种基本编辑:
裁剪使您能够剪切图像的某些部分:
WordPress中的图像裁剪
旋转图像会将其逆时针或顺时针旋转90度:
图像在WordPress中向左旋转
翻转图像将垂直或水平反映它:
WordPress中的图像水平翻转
其他三个设置在侧边栏中。第一个使您能够通过拉伸来更改图像的大小。只需输入所需的高度或宽度,另一个字段将自动填充。然后点击拉伸按钮:
在WordPress中拉伸图像
请务必注意,在WordPress中调整图像大小有时会对它们的质量产生负面影响。
此外,您只能拍摄大图像并将其缩小。您无法将图像放大到更大的尺寸!
要裁剪图像以使其具有特定的纵横比或尺寸,您可以使用图像裁剪下的长宽比和选区字段:
在WordPress中设置图像裁剪选择尺寸
最后,如果您希望保留现有的图像缩略图,您可以使用缩略图设置。只需选择要应用更改的图像版本的单选按钮:
WordPress图像编辑器中的缩略图设置
WordPress的默认图像编辑很有用,但也很有限。它不会取代您可能用于进行更广泛修改的任何软件,尤其是在您运行摄影网站或照片博客时。
不幸的是,发生了WordPress错误。WordPress媒体库也不例外。
通常出现的一个问题是未指定的“HTTP错误” ,当您从编辑器中上传新文件时可能会出现该错误:
媒体上传的HTTP错误
通常,您只需等待此错误消失并在几分钟后再次尝试上传。如果HTTP错误再次出现,则可能是您的WordPress会话已过期。您需要重新登录 ,然后重试上传。
一些用户面临的另一个问题是媒体库无法加载。这通常是由于与您的插件和/或主题冲突。要解决此错误,请尝试停用所有插件并切换到WordPress默认主题。
如果您的媒体库再次正确加载,您需要进一步解决插件冲突问题以永久解决问题。
有时,当您开始通过媒体库上传文件时,可能会遇到“上传:无法将文件写入磁盘”错误。通常,当您的上传目录设置为不可写时,会出现此问题。您可以通过WordPress 的站点健康工具检查您的文件系统权限 。
到目前为止,当涉及到媒体库时,我们只专注于WordPress的本机功能。但是,随着时间的推移使用此功能,您可能会遇到一些需要外部解决方案帮助的问题。
例如,您添加的文件越多,您的WordPress媒体库就越杂乱无章。除了本文开头讨论的搜索和过滤选项之外,WordPress并没有为处理不规则的媒体提供太多帮助。
但是,有一些插件可以让您将媒体文件排列到文件夹中。
WordPress Media Library Folders插件是最受欢迎的选项:
WordPress插件-WordPress Media Library Folders
除了使您能够创建媒体文件夹外,该插件还与MaxGalleria集成, 让您可以直接从媒体库创建图片库:
WordPress插件-WordPress Gallery MaxGalleria
升级到WordPress Media Library Folders Pro提供了与NextGEN Gallery插件和Advanced Custom Fields的额外集成。它还使您能够创建类别和标签以进一步组织您的文件。
WordPress缺乏的另一个功能是用新版本替换媒体文件的能力。由于这些类型的文件可能非常大,因此您不想在需要更新内容时简单地继续添加新文件。
这意味着在上传新文件后,您需要找到旧版本并将其删除。您可以通过使用Enable Media Replace为ShortPixel直接替换旧图像来节省一些时间:
WordPress插件-Enable Media Replace
使用此插件,您还可以替换指向旧文件的所有链接。这有助于避免整个站点中出现损坏的媒体。
Real Media Library是另一个值得一试的文件夹和文件管理器,让您的文件管理变得轻而易举。
WordPress插件-Real Media Library
多亏了它,您可以直接在WordPress中处理大量文件,例如图片、视频和文档。很高兴知道:Real Media Library有 12 种语言版本。如果免费版本不足以满足您的需求,他们还提供具有更多功能的购买PRO版本。
WordPress媒体库可以处理站点管理员的大多数常见要求。但是,WordPress提供了许多功能和钩子,使用户能够增强媒体库的特定功能,而无需使用第三方插件。让我们通过四个实际示例深入了解这些函数和钩子。
每当您上传媒体文件时,WordPress都会生成一个附件文章类型。
就像任何其他文章类型一样,附件在wp_posts表中注册,它们各自的元数据可以在数据库的wp_postmeta表中找到:
默认附件详细信息面板
wp_posts表存储包括数据POST_CONTENT(附件描述),post_excerpt(附件说明),post_author,POST_TITLE,post_status,和post_mime_type。
wp_postmeta表存储任何类型的元数据,如附加的文件URL,图像尺寸和MIME类型,以及可交换图像文件格式(EXIF)和国际报业电信委员会(IPTC)的元数据。
您可能偶尔需要向附件添加自定义元数据,例如文档作者的姓名、关联的URL或照片的拍摄位置。向附件添加元字段与向帖子添加元字段有点不同,需要特定的钩子和函数。
首先,您需要将所有必要的自定义字段添加到“编辑媒体” 屏幕。您可以通过wp-admin/includes/media.php中的attachment_fields_to_edit过滤器过滤可用附件字段来完成此任务。
function media_hacks_attachment_field_to_edit( $form_fields, $post ){// https://codex.wordpress.org/Function_Reference/wp_get_attachment_metadata
$media_author = get_post_meta( $post->ID, \'media_author\', true );
$form_fields[\'media_author\'] = array(
\'value\' => $media_author ? $media_author : \'\',
\'label\' => __( \'Author\' )
);
return $form_fields;
}
add_filter( \'attachment_fields_to_edit\', \'media_hacks_attachment_field_to_edit\', 10, 2 );
该函数有两个参数: 表单字段的$form_fields数组和$post对象。首先,get_post_meta检索现有的“media_author” 值,然后将“media_author” 元素添加到$form_fields 数组中。
最后,回调返回$form_fields (参见Gist上的代码)。
这将在“编辑媒体” 页面上显示一个新字段,您可以通过从媒体库中选择相关图像并单击“编辑更多详细信息”链接来访问该字段:
访问WordPress编辑媒体页面
在结果屏幕上,您将在底部看到新的自定义元数据字段:
新的“作者”元数据字段
下一步是保存用户输入。您可以通过将新函数挂钩到edit_attachment动作来完成此操作:
function media_hacks_edit_attachment( $attachment_id ){if ( isset( $_REQUEST[\'attachments\'][$attachment_id][\'media_author\'] ) ) {
$media_author = $_REQUEST[\'attachments\'][$attachment_id][\'media_author\'];
update_post_meta( $attachment_id, \'media_author\', $media_author );
}
}
add_action( \'edit_attachment\', \'media_hacks_edit_attachment\' );
这个函数只保留一个参数: 当前媒体文件的$attachment_id。首先,该函数检查是否已发送自定义元字段的有效值。然后它通过update_post_meta函数注册该值(参见Gist上的代码)。
现在,您可以通过get_post_meta函数检索“media_author”值:
$media_author = get_post_meta( $post->ID, \'media_author\', true );
之后,您可以在前端的任何位置显示它。
WordPress自动存储JPEG和TIFF mime类型的扩展元数据。现在您知道如何通过media.php将字段添加到“编辑媒体”屏幕,您可以显示此数据。
要完成此任务,您必须按如下方式更改第一个回调函数:
function media_hacks_attachment_fields_to_edit( $form_fields, $post ){// get post mime type
$type = get_post_mime_type( $post->ID );
// get the attachment path
$attachment_path = get_attached_file( $post->ID );
// get image metadata
$metadata = wp_read_image_metadata( $attachment_path );
if( \'image/jpeg\' == $type ){
if( $metadata ) {
$exif_data = array(
\'aperture\' => \'Aperture\',
\'camera\' => \'Camera\',
\'created_timestamp\' => \'Timestamp\',
\'focal_length\' => \'Focal Length\',
\'iso\' => \'ISO\',
\'shutter_speed\' => \'Exposure Time\',
\'orientation\' => \'Orientation\' );
foreach ( $exif_data as $key => $value ) {
$exif = $metadata[$key];
$form_fields[$key] = array(
\'value\' => $exif ? $exif : \'\',
\'label\' => __( $value ),
\'input\' => \'html\',
\'html\' => \"ID][$exif]\' value=\'\" . $exif . \"\' />
);
}
}
}
return $form_fields;
}
add_filter( \'attachment_fields_to_edit\', \'media_hacks_attachment_fields_to_edit\', 10, 2 );
此代码段使用以下WordPress功能:
如果图像mime类型是“image/jpeg”,并且如果元数据存在,则声明所需元数据的数组,并为数组中的每个元素创建一个表单字段:
WordPress附件详细信息中的EXIF和IPTC元数据字段
这个例子的表单字段有点复杂,因为我们正在为‘html’表单元素设置一个值(参见Gist上的代码)。您不需要保存EXIF和IPCT元数据,因为WordPress在上传图像时会自动将它们存储到wp_postmeta表中。
在后端为自己提供所有这些信息很有用。但是,如果您还想在前端显示媒体文件的扩展元数据,则需要做更多的修改。
为此,您可以使用wp-admin/includes/post.php中的the_content 过滤器将此信息附加到附件描述中,如下所示:
function media_hacks_the_content( $content ){global $post;
if( is_attachment() && \'image/jpeg\' == get_post_mime_type( $post->ID ) ) {
$fields = wp_get_attachment_metadata( $post->ID );
$meta = $fields[\'image_meta\'];
if( ! empty( $meta[\'camera\'] ) ){
$custom_content = \"
<ul>
<li>Camera: {$meta[\'camera\']}</li>
<li>Created timestamp: {$meta[\'created_timestamp\']}</li>
<li>Aperture: {$meta[\'aperture\']}</li>
<li>Focal length: {$meta[\'focal_length\']}</li>
<li>ISO: {$meta[\'iso\']}</li>
<li>Shutter speed: {$meta[\'shutter_speed\']}</li>
<li>Orientation: {$meta[\'orientation\']}</li>
</ul>\";
$content .= $custom_content;
}
}
return $content;
}
add_filter( \'the_content\', \'media_hacks_the_content\' );
此处 调用wp_get_attachment_metadata函数。如果当前文章类型为“附件”,并且当前 mime 类型为“image/jpeg”,则检索可用图像元数据并用于构建字段的无序列表,该列表附加到文章内容。
回调函数返回$content (请参阅Gist上的此代码):
附件页面上显示的EXIF和IPTC元数据
在上方,您可以看到新的附件文章,元数据附加到说明中。
开箱即用,WordPress不显示附件档案。发生这种情况是因为附件帖子类型的has_archive选项设置为false。
此外,虽然$query对象的默认post_status参数设置为“publish”,但默认附件post_status设置为“inherit”。这意味着除非我们将查询post_status明确设置为“inherit”或“any”,否则档案中不会显示任何附件( 有关更多信息,请参阅WP_Query类型参数)。
话虽如此,为了显示图像档案,您必须定义两个函数。第一个函数过滤指定文章类型的参数,并将附件has_archive属性设置为true:
function media_hacks_register_post_type_args( $args, $post_type ){if( $post_type == \'attachment\' ){
$args[\'has_archive\'] = true;
}
return $args;
}
add_filter( \'register_post_type_args\', \'media_hacks_register_post_type_args\', 10, 2 );
第二个函数为post_mime_type和post_status查询变量设置自定义值:
function media_hacks_pre_get_posts( $query ){if ( !is_admin() && $query->is_main_query() ) {
if( is_post_type_archive(\'attachment\') ){
$query->set(\'post_mime_type\', \'image/jpeg\');
$query->set( \'post_status\', \'inherit\' );
}
}
}
add_action( \'pre_get_posts\', \'media_hacks_pre_get_posts\' );
该函数与pre_get_posts动作钩子挂钩,该钩子在创建查询之后但在执行之前触发。在$query对象是按引用传递,而不是价值,这也就意味着当前实例任何改变$query会影响原来的$query对象。
出于这个原因,验证您要更改哪个查询很重要(请参阅Gist上的此代码)。然后,如果您在浏览器中输入https://yourdomain.com/?post_type=attachment,您应该会看到一个JPEG图像存档:
WordPress媒体档案
所有这些hack的完整代码都可以作为公共Gist中的插件获得,我们已经通过本节链接到了它。您可以将其下载为.zip 文件并将其上传到您的WordPress网站以实施所有这四种技巧,而无需手动编辑您的文件。
Demand feedback