我正在编写一个插件,作为其功能的一部分,它可以上载自定义字体。我正在使用new-since-Wordpress-3.5媒体上传器&;API。
我已经阅读了数十篇关于如何更改上载路径的教程,但在如何使其正常工作方面遇到了问题。目前,它将字体文件放置在插件中的正确目录中,但在上载过程中引发Wordpress错误(“上载时出错。请稍后重试”),并且最初不会在库中显示上载的文件。如果重新加载插件页(&R);重新打开上载程序,文件将显示在库中,但URL字段不正确。
我已经定义了插件路径&;URL作为主文件中的常量:
if ( !defined( \'MYPLUGIN_DIR\' ) ) {
define(\'MYPLUGIN_DIR\', plugin_dir_path(__FILE__));
};
if ( !defined( \'MYPLUGIN_URL\' ) ) {
define(\'MYPLUGIN_URL\', p`lugin_dir_url(__FILE__));
};
然后,在选项文件中,我有:
add_filter(\'wp_handle_upload_prefilter\', \'myplugin_upload_prefilter\');
add_filter(\'wp_handle_upload\', \'myplugin_handle_upload\');
// filter the upload_dir hook
function myplugin_upload_prefilter( $file ) {
add_filter(\'upload_dir\', \'myplugin_upload_dir\');
return $file;
}
// unset the filter & return upload path to default
function myplugin_handle_upload( $fileinfo ) {
remove_filter(\'upload_dir\', \'myplugin_upload_dir\');
return $fileinfo;
}
function myplugin_upload_dir($path) {
$fontdir = \'assets/fonts\'; // desired directory relative to plugin root
$path[\'path\'] = MYPLUGIN_DIR . $fontdir;
$path[\'url\'] = MYPLUGIN_URL . $fontdir;
$path[\'subdir\'] = $fontdir;
$path[\'basedir\'] = MYPLUGIN_DIR;
$path[\'baseurl\'] = MYPLUGIN_URL;
return $path; // altered
}
库路由器视图中格式错误的URL示例如下
http://127.0.0.1/webroot/wp-content/uploads//Applications/MAMPSERVER-OR-WHATEVER/www/webroot/wp-content/plugins/myplugin/assets/fonts/myfont.woff
. URL应为
http://127.0.0.1/webroot/wp-content/plugins/myplugin/assets/fonts/myfont.woff
. 注意“上传”后的双斜杠;我试过了
untrailingslashit
至少要把它去掉,但没用。
为什么此代码最初会引发错误为什么库项目最初不显示,但随后显示在页面重新加载上(&L);重新打开modal如何修复错误的URL另一个相关的问题是,确保从插件设置页面上载媒体时,仅更改路径,但我会就此提出一个单独的问题。
SO网友:Mark Kaplun
虽然我现在还不能很容易地找出错误的原因,但很明显,您的方法在两个方面都是错误的
从媒体库上传的内容没有上下文,或者至少要找到上下文并不容易。字体文件的上传本身并不意味着它与你的插件有任何关系,即使你在更改上传目录之前检测到文件类型,它仍有可能以混乱告终。
除了上传目录之外,任何地方都不能上传。在管理得当的服务器中,web服务器不太可能具有写入任何其他目录的权限。
您应该做的是找出如何为上载提供上下文(可能非常困难或根本不可能),或者更好的是,只有当您知道上载与您的设置相关时,才将其移动到新目录。假设文件已上载,并且您在表单中使用了附件id,请在提交表单时移动文件。
我还建议看看EDD是如何做到这一点的,并从中获得灵感。