0

I want to display a download link inside a WordPress widget. The file to be downloaded is located in the download subfolder of the site root, so that it can be uploaded via FTP. The name of the file and the text to be displayed for the download link shall be stored in a simple text file in the same folder.

Assuming WordPress is installed on www.mysite.com. The file name is setup_1_0.zip and the link display is Setup 1.0.

I am open to the file format how this information is stored as long as I can upload that file via FTP, too.

How can I embed this information inside a Custom HTML widget to get a valid download link with the text taken from that file?

Uwe Raabe
  • 45,288
  • 3
  • 82
  • 130

1 Answers1

1

How to automate the process of uploading latest software's build and download link creation in WordPress?

Based on your logic. You are trying to automate the download process of your latest software version.

You don't want to update things manually and you just want to upload your latest build in the /download/ folder. (Only drop your latest version using FTP; that's all)

This is how I would do it:

Referencing those questions:

Get the latest file addition in a directory

How to force file download with PHP

I propose two solutions: First two separte codes, Second One inline code. Just for educational purpose


First solution: Quick and short usage:

(You might need a way or a plugin to activate running PHP in Widget; this plugin helps PHP Code Widget)

<?php
$path = "download/"; 
$latest_ctime = 0;
$latest_filename = '';    
$d = dir($path);
while (false !== ($entry = $d->read())) {
  $filepath = "{$path}/{$entry}";
  // could do also other checks than just checking whether the entry is a file
  if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
  }
}
echo '<a href="http://www.example.com/'. $path .$latest_filename.'">Download '. $latest_filename . '</a>';
?>

Second solution:

(Again, you might need a way or a plugin to activate running PHP in Widget; this plugin helps PHP Code Widget)

A) Create download.php in http://www.example.com/download.php

Add the following code:

<?php
$path = "download"; 
$latest_ctime = 0;  //ctime stands for creation time.
$latest_filename = '';    
$d = dir($path);
while (false !== ($entry = $d->read())) {
  $filepath = "{$path}/{$entry}";
  // could do also other checks than just checking whether the entry is a file
  if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
  }
}
// echo $latest_filename; un-comment to debug
$file_url = 'http://www.example.com/download/'.$latest_filename;
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"" . basename($file_url) . "\""); 
readfile($file_url); // do the double-download-dance (dirty but worky)
?>

B) in your WordPress HTML Widget add the following code

<?php
$path = "download"; 
$latest_ctime = 0;
$latest_filename = '';    
$d = dir($path);
while (false !== ($entry = $d->read())) {
  $filepath = "{$path}/{$entry}";
  // could do also other checks than just checking whether the entry is a file
  if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
    $latest_ctime = filectime($filepath);
    $latest_filename = $entry;
  }
}
echo '<a href="http://www.example.com/download.php">Download '. $latest_filename . '</a>';
?>

Further explanation:

A) is responsiple for downloading the latest software build automatically.

B) is responsiple for displaying Latest build name and Creating the link.

Now, You only need to upload one file to your /download/ folder which is your latest build (setup_1_0.zip, setup_1_1.zip, setup_1_2.zip ...etc. The proposed solution will check creation date regardless of file's name.)

Important note: You can see that the latest file checker function is repeated twice; once in download.php and once in WordPress Widget. Because if we combine in one file we will get header already sent error.

Dose this answer your question please? Kindly feedback.

WPDev
  • 161
  • 9