我想上传一个独特的文件夹中的图像。然后检索保存在服务器上的此图像的路径,如
http://example.com/wp-content/uploads/myimages/image1.jpg
现在,我想将此URL保存在一篇文章中,并将自定义字段作为URL。
我将定期覆盖帖子并替换相应的图像,所以我不想在我的服务器上保留与以前帖子(已删除帖子)相关的图像(否则会增加服务器上的内存)。我想从中删除所有图像myimages
文件夹我不想更改上载的默认路径。以下是我创建帖子的代码:
$new_post = array(
\'post_title\' => $phototitle,
\'post_status\' => \'publish\',
\'post_author\' => 1,
\'post_type\' => \'post\',
\'post_category\' => array(328)
);
$postid=wp_insert_post($new_post);
update_field(\'field_521c73f75a652\',$photoid,$postid);
update_field(\'field_521c74a65a653\',$phototitle,$postid);
update_field(\'field_521c74b25a654\',$photourl,$postid);
update_field(\'field_521c74be5a655\',$details,$postid);
update_field(\'field_521c77e72f9a6\',$countinarr,$postid);
require_once(ABSPATH . \'wp-admin/includes/media.php\');
require_once(ABSPATH . \'wp-admin/includes/file.php\');
require_once(ABSPATH . \'wp-admin/includes/image.php\');
$image = media_sideload_image($photourl, $postid, $phototitle);
$path = (string)$image;
$arr = (explode("\'",$path));
$url = $arr[1];
update_field(\'field_521c758095f55\',$url,$postid);
请告诉我如何更改此上载路径而不更改
wp-config.php
或媒体设置。
SO网友:varadha
这里有一个简单的函数,可以为每次上传创建自己的子目录。
function kv_custom_image_dir( $pathdata ) {
$subdir = \'/uploads_img\'.$pathdata[\'subdir\'];
$pathdata[\'path\'] = str_replace($pathdata[\'subdir\'], $subdir, $pathdata[\'path\']);
$pathdata[\'url\'] = str_replace($pathdata[\'subdir\'], $subdir, $pathdata[\'url\']);
$pathdata[\'subdir\'] = str_replace($pathdata[\'subdir\'], $subdir, $pathdata[\'subdir\']);
return $pathdata;
}
add_filter( \'upload_dir\', \'kv_custom_image_dir\' );
根据以上代码,我将图像文件夹更改为
uploads_img
, 你也可以改变你的。
如果您想了解更多信息,我编写了一个教程,用于更改每次自定义上载的上载目录,请查看my blog:
SO网友:david.binda
Notice: 尚未测试下面提供的想法或代码。
*media\\u sideload\\u image*调用*wp\\u handle\\u upload*函数,该函数处理文件上传。
上传目录通过*wp\\U Upload\\U dir*功能设置。此函数有一个过滤器,可用于修改其输出(请参阅http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/functions.php#L1607):
$uploads = apply_filters( \'upload_dir\',
array(
\'path\' => $dir,
\'url\' => $url,
\'subdir\' => $subdir,
\'basedir\' => $basedir,
\'baseurl\' => $baseurl,
\'error\' => false,
) );
因此,通过以下方式连接到该过滤器:
add_filter( \'upload_dir\', \'my_upload_dir_function\' );
function my_upload_dir_function( $uploads ){
if( isset( $_POST[\'my_check_post_var\'] ) && $_POST[\'my_check_post_var\'] == \'my_check_var_value\' ){
return array(
\'path\' => $dir, //have to be set
\'url\' => $url, //have to be set
\'subdir\' => $subdir, //have to be set
\'basedir\' => $basedir, //have to be set
\'baseurl\' => $baseurl, //have to be set
\'error\' => false,
);
}else{
return $uploads;
}
}
代码显示,您的代码中有一个隐藏字段,该字段设置了一个检查变量,该变量在您检查过滤器时具有特定值。如果$\\u POST变量不存在或具有不同的值,则返回原始数组-因此不会破坏标准图像上载。
当然,您必须创建过滤器中使用的所有变量,例如$dir、$url等。检查http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/functions.php#L1525 了解并了解WP是如何做到这一点的。