在前端上传图像>创建方向和/或重命名文件名可能吗?

时间:2013-01-23 作者:wellseo

我有一个非营利俱乐部的表格,可以发布帖子+最多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 filenameIssues 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>

1 个回复
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;
}
要做到这一点很难,但我相信这是可能的。

结束