【问题标题】:WordPress custom file upload being overwritten on no file selectionWordPress 自定义文件上传在没有文件选择时被覆盖
【发布时间】:2020-07-12 02:13:15
【问题描述】:

我正在开发一个自定义主题,允许您在一个页面上上传多个图像。由于我有多个文件输入,我在functions.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; 
});

内联函数是我尝试过的唯一一个同时适用于多个文件的方法。无论哪种方式,我现在都面临着我的选项被覆盖的问题。上传后,该选项会在我的数据库中设置,并带有指向图像的正确链接。但是,如果我稍后更改页面上的其他设置,由于没有上传任何内容,该选项会被空白字符串覆盖,尽管我在更新选项之前检查了文件是否为空。

理想情况下,我希望允许用户更改任何内容并检查文件上传以检查是否选择了任何内容,如果是,则上传并更新选项。

唯一的问题是,Wordpress 似乎正在处理选项的更新...

也没有抛出任何错误,所以我现在完全被难住了。

【问题讨论】:

    标签: php wordpress wordpress-theming custom-wordpress-pages


    【解决方案1】:

    我假设 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' 输入。

    【讨论】:

      【解决方案2】:

      Daniel G. above this answer已经基本解决了,我不得不稍微调整一下,但为了其他有这个问题的人,这是我用来修复它的代码。

      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;
          }
      );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 2023-03-17
        • 1970-01-01
        • 2019-03-17
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多