我已经想出了一个解决办法,这是我的答案
1、我们不能修改Wordpress原始数据输入,但可以修改和重写输出。因此,我们可以使用\\u内容wp\\u get\\u attachment\\u url来更改此内容。
将此代码片段添加到插件中
if (function_exists(\'add_filter\')) {
add_filter(\'the_content\', array($scplugin, \'AttachmentRewrite\'), 10, 1);
add_filter(\'wp_get_attachment_url\', array($scplugin, \'AttachmentUrlRewrite\'), 10, 1);
}
“$scplugin”是我的插件类\\u content“过滤器将把“the content”字符串传递到“AttachmentrWrite”函数中。“wp\\u get\\u attachment\\u url”也是如此,但它将传递url字符串。
然后我们可以通过regex修改和重写内容url链接。
以下是AttachmentrWrite函数代码片段:
/**
* Rewrite the content attachment links.
*
* @param string $content theContent.
*
* @return mix.
*/
public function AttachmentRewrite($content)
{
$pattern = "/<a href=\\"(\\S+)(\\/wp-content\\/uploads\\/sites\\/)([0-9]+)(\\S+)\\">/";
preg_match_all($pattern, $content, $match);
// $match[0] all links
// $match[1] link head http://xxx/network site subpath
// $match[2] replace content /wp-content/uploads/sites/
// $match[3] site num
// $match[4] file meta_value
if (isset($match) && is_array($match)) {
$post_id = get_the_ID();
$old_links = array();
$new_links = array();
foreach ($match[1] as $k => $v) {
$old_links[$k] = $v.$match[2][$k].$match[3][$k].$match[4][$k];
$checkMedia = $this->QueryMediaMeta($match[3][$k], $match[4][$k]);
if (!$checkMedia) {
$new_links[$k] = $old_links[$k];
} else {
if (isset($checkMedia[\'post_type\']) && $checkMedia[\'post_type\'] == \'attachment\' && isset($checkMedia[\'post_mime_type\']) ) {
$checkApp = strpos($checkMedia[\'post_mime_type\'], \'application\');
if ($checkApp === false) {
$new_links[$k] = $old_links[$k];
} else {
$_snx_id = $this->UpdateAttachUrl($match[3][$k], $match[4][$k]);
$rand_string = $this->RandString(10);
// s=site no, id=snx attachment_id, aid=post type attachment type id
$param = $rand_string.base64_encode(\'s=\'.$match[3][$k].\'&id=\'.$_snx_id.\'&p=\'.$post_id);
// return $match[1].\'/download.php?s=\'.$match[3][$k].\'&id=\'.$_snx_id;
$new_links[$k] = $v.\'/download.php?fid=\'.$param;
}
} else {
$new_links[$k] = $old_links[$k];
}
}
//$new_links[$k] = array_walk($_head_link, array($this, \'_array_walks\')).\'?download.php?s=\'.$match[3][$k].\'&id=\'.$match[4][$k];
}
array_walk($old_links, array($this, \'snxArrayWalks\'));
$content = preg_replace($old_links, $new_links, $content);
}
return $content;
}
我使用preg\\u match\\u all来匹配所有附件url,包括媒体(mp3、jpeg、gif)。然后我们对匹配数据进行wget,但我们会再次对其进行mp3、jpeg、gif等的过滤,因此QueryMediaMeta函数将根据文件名和站点编号查询wp\\u posts和wp\\u post\\u meta以获取此信息。
然后我使用RandString和base64\\u编码来翻译原始url。并返回新的内容数据。
在下载中。php,可以控制访问权限,定义禁止页面。等