首页 > 解决方案 > 更改 WP All Import 脚本以从 FTP 导入最新的 XML

问题描述

我想使用这个脚本来下载每 20 分钟更新一次的 XML 提要。问题是文件名有日期和时间戳。有人可以指出正确的方向如何更改它,以便它始终选择最新的文件,以便我可以更新库存。

示例文件名:

Feed2842020175940.xml

Feed2842020173907.xml

Feed2842020171807.xml

从步骤 1 的“从 URL 下载”选项调用该函数:

[custom_file_download("ftp://username:password@hostname.com/path/to/file.xml","xml")]

函数本身:

// Programmatically download and return import file via URL.
function custom_file_download($url, $type = 'xml'){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
    /* Optional: Set headers...
    *    $headers = array();
    *    $headers[] = "Accept-Language: de";
    *    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    */
    $result = curl_exec($ch);
    if (curl_errno($ch)) {
            exit('Error:' . curl_error($ch));
    }
    curl_close ($ch);
    $uploads = wp_upload_dir();
    $filename = $uploads['basedir'] . '/' . strtok(basename($url), "?") . '.' . $type;
    if (file_exists($filename)){
            @unlink($filename);
    }
    file_put_contents($filename, $result);
    return str_replace($uploads['basedir'], $uploads['baseurl'], $filename);
}

标签: wordpressimportftpphp-curlwpallimport

解决方案


我看到两种方法可以做到这一点:

  1. 在服务器上有一个带有 XML 文件的逻辑,其中最新的文件将始终具有相同的名称(例如latest.xml)。您可能可以通过使用符号链接来实现这一点。

  2. 从当前时间戳(即使用time()或以其他方式获取文件名所使用格式的时间戳)返回以推断服务器上的最新文件名。除了将时间戳减 1,然后检查名称中带有该时间戳的文件是否存在,然后再次减 1 并检查等之外,我看不出还有什么方法可以做到。这个选项不是一个好主意。:)


推荐阅读