簡體   English   中英

WordPress 自定義文件上傳在未選擇文件時被覆蓋

[英]WordPress custom file upload being overwritten on no file selection

我正在開發一個自定義主題,允許您在一頁上上傳多個圖像。 由於我有多個文件輸入,我在我的functions.php中使用這個 function 文件。php 文件(在每個文件輸入的循環內):

register_setting('hero', 'slider_slide_' . $i . '_image',
function($option) use ($i) {
    if (!empty($_FILES['slider_slide_' . $i . '_image']['tmp_name'])) {
        $_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
        $urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'], array('test_form' => FALSE));
        $temp = $urls['url'];
        return $temp;
    }
    return $option; 
});

內聯 function 是我嘗試過的唯一一次適用於多個文件的方法。 無論哪種方式,我現在都面臨着我的選項被覆蓋的問題。 上傳后,該選項會在我的數據庫中設置,並帶有指向圖像的正確鏈接。 但是,如果我稍后更改頁面上的其他設置,由於沒有上傳任何內容,該選項將被空白字符串覆蓋,盡管我在更新選項之前檢查了文件是否為空。

理想情況下,我希望允許用戶更改任何內容並檢查文件上傳以檢查是否選擇了任何內容,如果是,則上傳並更新選項。

唯一的問題是,Wordpress 似乎正在處理選項的更新......

也沒有拋出任何錯誤,所以我現在完全被難住了。

我假設 WP 仍在接收您的空文件輸入,因此您需要返回存儲的值。

嘗試類似的東西。

register_setting('hero', 'slider_slide_' . $i . '_image',
function($value, $option) use ($i) {
    if (empty($_FILES['slider_slide_' . $i . '_image']['tmp_name'])) {
        return get_option($option); 
    }

    $_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
    $urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'], array('test_form' => FALSE));

    return $urls['url'];
});

另一種方法是填充'slider_slide_'. $i. '_image' 'slider_slide_'. $i. '_image' 帶有存儲值'slider_slide_'. $i. '_image'輸入。

上面這個答案的丹尼爾 G. 幾乎解決了它,我不得不稍微調整一下,但為了其他有這個問題的人,這里是我用來修復它的代碼。

register_setting('hero', 'slider_slide_' . $i . '_image',
    function($option) use ($i) {
        if ($_FILES['slider_slide_' . $i . '_image']['error'] != 0) {
            return get_option('slider_slide_' . $i . '_image');
        }
        $_FILES['slider_slide_' . $i . '_image']['name'] = 'slide_' . $i . '.png';
        $urls = wp_handle_upload($_FILES['slider_slide_' . $i . '_image'],
                array(
                    'test_form' => FALSE,
                    'unique_filename_callback' => 'file_override_overwrite'
                )
        );
        $temp = $urls['url'];
        return $temp;
    }
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM