在 WordPress 中,我们可以为帖子设置特色图像,也可以使用媒体库上传其他文件并在帖子中使用它们,例如作为可下载文件。当为帖子设置特色图像时,我们可以使用 posts 表轻松检索它。
但是,我无法检索直接通过媒体库上传的文件,没有通过帖子编辑器中的“添加媒体”按钮附加到帖子(即,不通过帖子创建或编辑链接) .
本质上,我需要通过any方法上传到WordPress的all文件列表。 以下查询不满足我的需求,因为它只返回未链接到父帖子的附件。这个查询不是我要找的。我想要附加的文件,而不仅仅是顶级帖子附件。
查询不显示文件所有上传的文件
SELECT wp_posts.*
FROM wp_posts
WHERE 1=1
AND wp_posts.post_parent = 0
AND wp_posts.post_type = 'attachment'
AND ((wp_posts.post_status = 'inherit'))
ORDER BY wp_posts.post_date DESC
您可以进一步从 postmeta 表获取媒体相关数据。
SELECT * FROM wp_postmeta WHERE meta_key LIKE '\_wp\_attach%';
或者使用功能
attachment_url_to_postid
您可以获取哪些附件已发布且处于孤立状态。
$uploads_dir = wp_get_upload_dir()['basedir'];
$uploads_url = wp_get_upload_dir()['baseurl'];
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($uploads_dir),
RecursiveIteratorIterator::LEAVES_ONLY
);
foreach ($files as $file) {
if ($file->isFile()) {
// Get the file URL
$relative_path = str_replace($uploads_dir, '', $file->getRealPath());
$file_url = $uploads_url . $relative_path;
// Get the attachment ID
$attachment_id = attachment_url_to_postid($file_url);
// Check if the file is attached to a post
if ($attachment_id) {
echo "Attached: {$file_url} (Post ID: {$attachment_id})<br>";
} else {
echo "Orphaned: {$file_url}<br>";
}
}
}
输出示例:
Attached: http://single.test/wp-content/uploads/2008/06/dcp_2082.jpg (Post ID: 757)
Orphaned: http://single.test/wp-content/uploads/2008/06/dsc20051220_160808_102-300x200.jpg
Attached: http://single.test/wp-content/uploads/2008/06/dsc03149.jpg (Post ID: 758)
Orphaned: http://single.test/wp-content/uploads/2008/06/michelle_049-300x225.jpg
一些有趣的核心文件可供探索:
您将看到一堆媒体实用功能,就像我们在之前的代码中使用的那样,以查找附件是否链接到帖子
attachment_url_to_postid
在 WP media php 中为图像、视频、音频等单个媒体呈现的模板。
核心媒体管理文件,处理添加、删除(垃圾)、更新、从垃圾中恢复等操作。
媒体列表处理核心类