我有一个非营利俱乐部的表格,可以发布帖子+最多20张图片。图像路径将写入自定义字段。图像已上载。好的,现在我想重命名图片或(更好)创建一个文件夹。但有一个特殊的地方:表单上载2种样式的图像。通缉犯(g)最多有15张图像,失踪者最多有5张图像。所以我必须在服务器上分离图像。图像来自多个输入字段。
我将输入字段命名为“g”,如:
<input type="file" name="image_1_gesucht" id="image_1_gesucht">
<input type="file" name="image_2_gesucht" id="image_2_gesucht">
...
<input type="file" name="image_15_gesucht" id="image_15_gesucht">
“s”的字段命名如下:
<input type="file" name="image_1_suchend" id="image_1_suchend">
<input type="file" name="image_2_suchend" id="image_2_suchend">
...
<input type="file" name="image_5_suchend" id="image_5_suchend">
如果我可以重命名图片:我可以用前缀g或s和唯一的数字来重命名。对于唯一编号,我可以使用post-id。
若我创建一个文件夹:那个么我需要一个名为post-id的文件夹。若我可以用前缀重命名图片,这个带有post-id的文件夹就可以了。如果我不能重命名图片,我需要另外两个子文件夹-一个用于“g”,一个用于“s”。
我现有的脚本如下例所示。我贴了这个,你可以想象现有的工作。谁能告诉我如何重命名图片或创建文件夹?对不起,我够傻了,我不知道/不明白wordpress codex想告诉我什么。stackexchange也有两篇类似的文章(Rename image uploads with width in filename 和Issues renaming images during upload ), 但这里也有:抱歉,我无法意识到/理解。我真的希望,任何人都能帮助我
if( \'POST\' == $_SERVER[\'REQUEST_METHOD\'] && !empty( $_POST[\'action\'] ) && $_POST[\'action\'] == "new_post") {
$file=$_FILES;
// Funktion zum Image-Upload, falls sie noch nicht existiert
if ( ! function_exists( \'wp_handle_upload\' )) {
require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
}
// Variablen für die Bilder
$overrides = array( \'test_form\' => false);
$image_1_gesucht = wp_handle_upload( $file[\'image_1_gesucht\'], $overrides );
$image_2_gesucht = wp_handle_upload( $file[\'image_2_gesucht\'], $overrides );
// Benutzerdefinierfte Felder für die Bilder
add_post_meta($pid,\'image_1_gesucht\',$image_1_gesucht[\'url\']);
add_post_meta($pid,\'image_2_gesucht\',$image_2_gesucht[\'url\']);
}
<form id="new_post" name="new_post" method="post" action="" enctype="multipart/form-data">
<div class="pro50left">
<fieldset class="images">
<label for="images">Bild 1:</label>
<input type="file" name="image_1_gesucht" id="image_1_gesucht">
</fieldset>
</div>
<div class="pro50left">
<fieldset class="images">
<label for="images">Bild 2:</label>
<input type="file" name="image_2_gesucht" id="image_2_gesucht">
</fieldset>
</div>
</form>
SO网友:Mike Madern
类似的帖子(你的发现)所暗示的是filter 在您的functions.php
wich将为您处理文件名。此功能将过滤所有上载的文件,然后再由wp_handle_upload
.
在中添加以下代码行functions.php
:
function wpse_82741_rename_uploaded_file( $image ) {
global $post;
// get the post ID
$post_id = absint( $_REQUEST[\'post_id\'] );
// get the image extension
switch( $image[\'type\'] ) {
case \'image/jpeg\' :
$extension = \'jpg\';
break;
case \'image/png\' :
$extension = \'png\';
break;
case \'image/gif\' :
$extension = \'gif\';
break;
}
// set the new image name
$image[\'name\'] = "$post_id.$extension";
}
add_filter( \'wp_handle_upload_prefilter\', \'wpse_82741_rename_uploaded_file\', 20 );
所有的名字都是这样的
{post_id}.{extension}
.
对于上载路径的处理,有question 关于这个。
上载路径处理完成wp_upload_dir()
这适用于upload_dir
筛选返回的信息。您应该尝试在代码运行期间对其进行过滤,并将路径调整到所需位置。
您可以使用this 通过在functions.php
并编辑配置:
add_filter(\'upload_dir\', \'wpse_82741_upload_dir\');
$upload = wp_upload_dir();
remove_filter(\'upload_dir\', \'wpse_82741_upload_dir\');
funcion my_upload_dir($upload) {
$upload[\'subdir\'] = \'/sub-dir-to-use\' . $upload[\'subdir\'];
$upload[\'path\'] = $upload[\'basedir\'] . $upload[\'subdir\'];
$upload[\'url\'] = $upload[\'baseurl\'] . $upload[\'subdir\'];
return $upload;
}
要做到这一点很难,但我相信这是可能的。