WordPress Download Monitor 3 Documentation

dlmhelp

I have had some requests asking me to improve the WordPress Download Monitor documentation, so I decided to write (and maintain) this post explaining the ins-and-outs of configuring and using the plugin. Hopefully it will help you guys use the plugin, and also reveal more of its power and flexibility.

Don’t forget, if you love download monitor please make a small donation and/or rate it on the wordpress plugins directory. I also appreciate your contributions to the development of the plugin, so feel free to email me any code or your suggestions. Your support is very welcome!

Links: Download Monitor Page | Plugin Directory Page

Installation

If you have not already installed it, to install download monitor unzip the plugin file and put the download-monitor folder into your plugins directory. Activate it and your away. Once activated Download Monitor will create the database tables and set things up.

You will find the admin interface for download monitor on the top level menu listed as ‘Downloads’.

Configuring Download Monitor

Go to the Downloads > Configuration page. Here you will find the following sections.

Download categories

You can categorise downloads using the categories you define in this section. Note that they can be nested. Each download may have only one category. To add a category, input its name and choose a parent (if you want to nest it), then click Add.

Note each category has an ID; this is how you will reference the category when displaying them in posts.

Custom Output Formats

This is where you define how your download links will look. Custom formats should be written as HTML and also use special ‘tags’ which get substituted for download information when shown. The following tags can be used when defining a custom format; each is replaced with the download’s information.

  • {url} – Url of download (does not include the actual hyperlink)
  • {version} – Version of download
  • {version,"before","after"} – Version of download. Not outputted if none set. Replace “before” with preceding text/html and “after” with succeeding text/html.
  • {title} – Title of download
  • {size} – Filesize of download
  • {category,"before","after"} or {category} – Download Category. Replace “before” with preceding text/html and “after” with succeeding text/html.
  • {hits} – Current hit count
  • {hits,"No hits","1 Hit","% hits"} – Formatted hit count depending on hits. % replaced with hit count.
  • {image_url} – URL of the download image
  • {description,"before","after"} or {description} – Description you gave download. Not outputted if none set. Replace “before” with preceding text/html and “after” with succeeding text/html.
  • {description-autop,"before","after"} or {description-autop} – Description formatted with autop (converts double line breaks to paragraphs)
  • {date,"Y-m-d"} – Date posted. Second argument is for date format.
  • {meta-key} – Custom field value
  • {meta-autop-key} – Custom field value formatted with autop

For example, if I wanted to output my download with an image button I would use the following custom format:

<a href="{url}" title="Downloaded {hits} times"><img src="{image_url}" alt="{title}" /></a>

In this example I output a download link, with it’s title as the link text, followed by a description:

<a href="{url}" title="Downloaded {hits} times" >{title}</a> - {description}

Like categories, custom formats are referenced by ID, not by name.

Using custom formats gives you the flexibility to output downloads however you please, be it as links, list items, or table rows – the sky is the limit.

Custom Download URL

This option allows you to mask the download URL to something that looks a bit nicer. By default the download url will be something like:

http://yourdomain.com/wp-content/plugins/download-monitor/download.php?id=1

By entering something in the first input box you can mask the first part of the link. For example, if I added downloads/ as the custom url my links would look like this:

http://yourdomain.com/downloads/1

The dropdown option (which defaults as ID) chooses the final part of the link. For example, if I selected ‘filename’ from the dropdown and clicked save I would now have links like this:

http://yourdomain.com/downloads/filename.zip

Important: Do not make the custom url match a real url e.g. do not call it downloads/ if you really do have a directory called downloads on your server, because this will cause conflicts and break your links.

You must re-save your permalink settings after updating custom urls for your settings to take effect.

General Options

  • “Download not found” redirect URL - (optional) If set, when a download is not found the user will be redirected here.
  • Member-only files non-member redirect: - (optional) If set, if a user tries to download a member only file and is not logged in they will be sent to this page.
  • Download image path – The path of the image for the {image_url} custom format tag.
  • Default output format – (optional) The custom format to be used if you don’t specifically reference one when outputting a download.

Recreate Download Database

If you experience problems, such as not being able to add a download, it may be the database at fault. This option reinstalls the database tables (backup your database before using this function).

Top

Adding & managing your downloads

Downloads can be added in one of three ways;

  1. Using the Downloads > Add New page to upload and add a file.
  2. Using the Downloads > Add Existing page to choose an already uploaded/remotely hosted file.
  3. Using the uploader on a posts screen (see section below: ‘Using the post page uploader’)

The ‘add download’ forms should be pretty self-explanatory, however, I will explain custom fields and member only files in a little more detail. New downloads are uploaded to the wp-content/uploads/xxxx/xx directory (like images are when inserting images into posts).

Custom fields allow you to define additional data about your downloads – just add a ‘name’ and a ‘value’. You can then reference this data using custom formats ({meta-key} and {meta-autop-key}). They have all kinds of uses, for example, if I wanted to include a thumbnail for each download I could add a custom field called ‘thumbnail-path’. I could then use a custom format to output the thumbnail like this:

<a href="{url}" title="Downloaded {hits} times"><img src="{meta-thumbnail-path}" alt="Thumbnail" /> {title}</a>

Each download can have as many custom fields as you want.

The Member only file option, when enabled, only allows logged in users to download the file in question. If they are not logged in they will see a message telling them this *or* will be redirected to the Member-only files non-member redirect url set on the configuration page.

One handy additional feature with member only files is that if you give a download a custom field called min-level; the user will need to be this level or higher in order to access the file.

Viewing, editing and deleting downloads

All downloads can be viewed on the main download monitor admin page (as well as hits) and can be edited by clicking the edit icon on the right. The edit screen works in a similar fashion to the add download page. You can also delete downloads from here – this also removes the file from the server if you uploaded it via the ‘Add new’ page.

Download Logs

The Downloads > Log page shows a list of recently downloaded files, along with user ID’s/IP addresses. This is not used for stats so the log can be safety cleared using the ‘clear log’ button if you wish.

Download Stats

It has already been mentioned that you can view hits on the view downloads page, however, if you visit your admin dashboard you will notice two additional stats widgets. One shows the top 5 downloads, where the other lets you select a date range and a download to view daily/montly download stats.

widget-screenshots

widget-screenshots

Using the post page uploader

On the wordpress post screen you will notice a small ‘arrow’ icon near the insert image button above the editor – this allows you to access download monitor conveniently when posting.

uploader-icon

uploader-icon

From this screen you can add a new file (and insert into the post), or by clicking ‘view downloads’ you can see the list of files and click ‘insert’ to insert them into your post.

Note: It is normal for the inserted code to look something like [download id="1"]. This is parsed when the post is viewed.

Top

Outputting your Downloads

Download monitor provides a variety of ways to output your downloads in your pages, posts, or templates.

Shortcodes

Shortcodes are the best way of including downloads (these replace many of the legacy tags shown later).

Outputting a single Download

[download id="1" format="1" autop="false"]

This shortcode outputs a single download of your choosing (set the id), with an optional custom format (replace the id in ‘format’), and an optional autop (true or false; false prevents wrapping the outputted content in p tags and is default). Valid examples:

[download id="1"]

[download id="2" format="2"]

Outputting multiple downloads

[downloads query="limit=5&orderby=rand" format="1" wrap="ul" before="&lt;li&gt;" after="&lt;/li&gt;" autop="false"]

This shortcode retrieves and outputs multiple downloads in posts. All of the options are optional.

‘query’ takes a query string containing a variety of options (see the get_downloads() function below; they use the same query string format). By default it retrieves 5 random downloads. A common request is showing a category using this shortcode; to do that you can add &category=1 (replacing 1 with the category ID) to the query string.

‘Format’ take a custom format ID to change how the downloads of outputted.

‘Wrap’ by default wraps the downloads in a unordered list; you can set this option to be blank if you want to wrap it with something else (like a table).

‘Before’ and ‘after’ are what each download will be wrapped in (by default this is a list item). If you modify these values you must ensure the code you insert is encoded e.g. replace < with &lt;.

‘autop’ can be true or false; false prevents wrapping the outputted content in p tags and is default.

Valid examples:

[downloads]

[downloads query="limit=5&orderby=hits"]

[downloads query="limit=5&orderby=hits" format="2"]

[download query="limit=5&orderby=hits" wrap="" before="&lt;p&gt;" after="&lt;/p&gt;"]

Show a special download page

Use the [download_page] shortcode. See the ‘download page’ section for more info.

Parsing shortcodes in templates

Did you know you could output shortcodes in places other than posts? Just wrap your shortcode in the do_shortcode() function. Example:

do_shortcode('[download id="1"]');

get_downloads() template function

This function returns downloads that match your query; it takes 1 argument containing the query string. The defaults are as follows:

'limit' => '', 'offset' => 0, 'vip' => 0 'category' => '', 'orderby' => 'id', 'order' => 'ASC'

As with many of wordpress’ functions, construct your query string using the above attributes linked together with an ampersand (&), e.g. limit=5&orderby=hits&order=desc.

limit‘ takes an integer and will return that many posts.

offset‘ takes an integer and will offset the returned posts by that number. e.g. offset of 1 would not return the first result.

vip‘ can be 1 (true) or 0 (false); if set to true, only downloads you have permission to access will be displayed (non members will not see member only downloads).

category‘ takes a comma separated list of category id’s and returns downloads in those categories.

orderby‘ orders the downloads. Valid options for this include id, hits, title, date, filename, and random. NEW: can also be ‘meta’ (but you must also add meta_name to the query).

meta_name‘ define the meta field to sort by when using orderby=meta. Only downloads with this meta field will show.

order‘ can be ‘ASC’ for ascending, and ‘DESC’ for descending.

get_downloads() returns an array object with the following data:

  • size
  • url
  • title
  • version
  • hits
  • image
  • desc
  • category
  • category_id
  • id
  • date
  • memberonly

Usage Example: (Output a list of top downloads)

$dl = get_downloads('limit=5&orderby=hits&order=desc');
 
if (!empty($dl)) {
    echo '<ul class="downloadList">';
    foreach($dl as $d) {
        $date = date("jS M Y", strtotime($d->date));
        echo '<li><a href="'.$d->url.'" title="'.__('Version',"wp-download_monitor").' '.$d->version.' '.__('downloaded',"wp-download_monitor").' '.$d->hits.' '.__('times',"wp-download_monitor").'" >'.$d->title.' ('.$d->hits.')</a></li>';
    }
    echo '</ul>';
}

Top

FAQ

Can I upload .xxx filetype using the uploader?

Download Monitor uses the WordPress uploader for uploading files, so any format supported by wordpress is allowed. If you have trouble adding a specific file due to its format you should try PJW Mime Config – it allows you to add mime types so wordpress allows you to upload other filetypes.

Can I link to external downloads?

Yes, but the “force download” option might not work. Test it out.

I want a download page like yours!

Use the download_page shortcode.

I want other users (other than admin) to use download monitor. Can I do this?

Yes, but you need another plugin. Its called ‘capability manager’.

I want to change the way my links look/I don’t want “hits” to show

You need to use custom formats (these change the way links are output). Go to the config section to create custom formats – you will need to know HTML.

My Downloads don’t work or the download page is not found/error 500′s, wtf?

Several things can cause this. First things first – check the plugin folders permissions. The folder and files should be readable – especially download.php so check! Also, avoid setting to 777 at all costs. Second, resave permalink settings – this can often cause hiccups. Also, check the path to the download is correct by editing it – try entering the url directly into the address bar. If its not found, you cannot blame the plugin!

If your on a Windows host then when *any* php error is found it throws an unhelpful 500 error. You may get one when activating the plugin. If you do encounter such errors, and your are running php4, switch to php5 to see if the error disappears.

My hits are not showing up! Help?

Admin hits are not counted, log out and try! Also ensure that if you have set the ‘custom url’ option that the custom url does not actually match the physical location of the file.

I have wordpress installed in a sub directory and my downloads don’t work

Go to settings > misc in wordpress admin and check the ‘Store uploads in this folder’ setting is correct. Sometimes wordpress screws this up. You may also notice that normal uploads in wordpress (e.g. via the media panel) don’t work correctly either if this setting is wrong.

I want my downloads to be parsed in a custom field using get_post_meta(), can I do this?

WordPress does not have a filter I can hook into for this function, so to make this work wrap it in the relevant functions. For old style download links ([Download id not defined]) use wp_dlm_parse_downloads() else use do_shortcode(). For example:

echo do_shortcode(get_post_meta($post-&gt;ID, 'Download', true));

Top

Download Page

I gave in. I was going to release this as a paid add-on, but I’ve changed my mind because I trust you guys to make donations to ensure support continues for this plugin. So here we go; the download page addon (as seen on this site in the ‘Downloads’ page) is now built into download monitor (version 3.1 +). The download page includes a sorting, pagination, and search function.

Usage

To create a download page, first create a wordpress page (or post) and insert the following shortcode:

[download_page]

Easy huh? But theres more. This shortcode has the following options:

  • base_heading_level (integer) – Category headings on the page are this level. Defaults to 3 (h3)
  • pop_count (integer) – How many popular downloads to show.  Default is 4.
  • pop_cat_count (integer) – How many popular downloads to show per category. Default is 4.
  • show_uncategorized (integer) – Set to 1 (default) to show an uncategorized section, or 0 to hide it.
  • per_page (integer) – How many downloads to show per page. Default is 20.
  • format – ID of custom format to use.
  • exclude – Comma separated list of downloads to exclude from the listings.

So for example, to show 5 popular downloads I’d use:

[download_page pop_count="5"]

Easy peasy.

Customisation

So you want to customise the look? You can probably do that with CSS, either in your themes CSS file or by customising the styles.css which came with the plugin – this is found in download-monitor/page-addon/styles.css.

If for any reason the output looks unstyled completely, your version of wordpress may not support the way I added the styles.css file, so just paste the css code from that into your themes css file.

Configuring Download Data

The download page add-on is smart and uses your downloads custom fields to show the information. It lets you show an unlimited amount of custom fields like this:

  1. You add custom fields to a download, for example, ‘licence’ with value ‘Free (GNU General Public License)’.
  2. You then add a custom field called ‘include_fields’ and list the names of the fields to include on the download page separated by commas, e.g. tags,licence,wordpress-plugin-directory-page,documentation.

There are a few reserved custom field names you can use too:

  • post_id = add an id of an associated post to the download – the read more link on the download page will link to this post.
  • side_content = some content to show underneath the download link. On my site ive inserted some adsense code.
  • thumbnail = path to an image for the download’s thumbnail. 112×112 is ideal for this.
  • hide_download_button = Won’t show the download button. I’ve done this for my paid icon set because they cannot be downloaded from the site.
  • hide_hits = Hide hit count

Finally, remember I did not have to release this add-on for free, so please consider making a donation to ensure I continue developing download monitor in the future.


Top

Found this post useful? Why not buy me a coffee!

Related Entries

1,244 Responses to “WordPress Download Monitor 3 Documentation”

RSS feed for comments on this post.

  1. Mike Jolley says:

    @Joe Manausa: No; only on the stats widgets.

    ReplyReply

    Comment made on April 16, 2009 at 10:55 am

  2. Simon says:

    It works really well. My only problem is with the orderby id desc regardless of whether i set it to order desc or asc it still shows the list in random order.

    ReplyReply

    Comment made on April 16, 2009 at 5:27 pm

  3. Mike Jolley says:

    @Simon: Paste what shortcode your using so I can see.

    ReplyReply

    Comment made on April 16, 2009 at 5:57 pm

  4. jie says:

    how could i right the number of links along with the download href. Im cofused

    ReplyReply

    Comment made on April 17, 2009 at 7:35 am

  5. jie says:

    My download link literally looks like this:

    {title} – {description}

    ReplyReply

    Comment made on April 17, 2009 at 7:39 am

  6. Roslyn says:

    Thank you – why didn’t I see the missing letter?? All sorted now.

    ReplyReply

    Comment made on April 17, 2009 at 9:05 am

  7. Mike Jolley says:

    @jie: These tags {title}, {url} etc go in the custom formats box on the config page. Then you output with the shortcode. Although not sure on your question…

    ReplyReply

    Comment made on April 17, 2009 at 10:13 am

  8. Shawn Honnick says:

    Hey Mike, awesome plugin. I’m trying to add this for the first time and am having a little trouble. I have everything working properly until the file is downloaded… then it’s corrupt or something. It’s a PDF file (644KB) in the directory, but when downloaded through my Download Monitor link, I get a little 5K corrupted file. When I attempt to download at the actual file location, everything is fine, so it’s only when it’s processed by this script that the file corruption happens.

    When I later tried zipping the file and creating a new download link through your plugin, I got a not found error.

    Is this typical when something is configured incorrectly or does it sound like a unique error? I read a bunch of comments here and didn’t see anything that matches my dilemma.

    Please let me know what I can do to fix this.

    Thanks!

    ReplyReply

    Comment made on April 18, 2009 at 3:29 am

  9. Shawn Honnick says:

    I knew I should have played around with it before posting. It looks like it was the custom download link that wasn’t working. I’m not sure why, but without that component enabled, the download file is no longer corrupt. I’m OK with the long link. I suspect it was something in my .htaccess file that I had wrong but I have too much to finish up on the site to experiment with that now.

    Awesome plugin!

    ReplyReply

    Comment made on April 18, 2009 at 4:20 am

  10. Matt says:

    hi mike,

    you helped me last time, but I have had to do an upgrade to your latest download monitor and it overwrote my previous changes.

    I have tried to make the changes that worked last time but they do not have the same results as last time :)

    [My question:] i have just upgraded to the new download monitor and now all my post hits are not displaying.

    previously i would add in [download#id#image] and it would display the image with the hits, now it just displays the image.

    How can I update the plugin so that this displays the hits? It would be a problem to have to go back and update 500+ posts with another tag…

    [Your Answer:]

    @Matt: Hmm. I cannot change the source because it will mess up people who have used the tag without the hit display. You can manually edit line 621 to:

    $format = ‘
    ‘.__(“Downloaded”,”wp-download_monitor”).’ {hits} ‘.__(“times”,”wp-download_monitor”).”;

    That should work for you.

    >> Is there anything else I can try to include the hits below the image?

    Line 621 to 624 currently reflect:

    // Description (autop) only
    $format = ‘‘.__(“Downloaded”,”wp-download_monitor”).’ {hits} ‘.__(“times”,”wp-download_monitor”).”;
    $patts[] = “[download#" . $val[1] . “#description_autop]”;
    $subs[] = ‘[download id="'.$val[1].’” format=”‘.htmlspecialchars($format).’”]’;

    ReplyReply

    Comment made on April 23, 2009 at 1:51 pm

  11. matt says:

    sorry my current code came out wrong:

    // Description (autop) only
    $format = ‘‘.__(“Downloaded”,”wp-download_monitor”).’ {hits} ‘.__(“times”,”wp-download_monitor”).”;
    $patts[] = “[download#" . $val[1] . “#description_autop]”;
    $subs[] = ‘[download id="'.$val[1].’” format=”‘.htmlspecialchars($format).’”]’;

    ReplyReply

    Comment made on April 23, 2009 at 1:52 pm

  12. Mike Jolley says:

    @matt: Its line 631 now – commented with // Image link

    ReplyReply

    Comment made on April 25, 2009 at 9:09 am

  13. Alec Wild says:

    Mike,

    I’m having a devil of a time adding a new upload. I get the error:

    Unable to create directory /home/grsforg/wp-content/uploads/2009/04. Is its parent directory writable by the server?

    But I’ve made sure that uploads is set to 777. Do you know why I’m getting this error?

    Log:

    Tried to delete and reinstall the plugin, but to no avail.

    Tried to manually create the directory /uploads/2009/04. Directory created (and chmod-ed to 777), but still getting the same error as above when I try to upload a new download.

    Thanks,

    Alec

    ReplyReply

    Comment made on April 26, 2009 at 11:33 pm

  14. nonegiven says:

    Its a great idea and well built … but its hell of a geekie!!

    How could we hand it over to a user in order that they use it without need to work out code like;

    Edit post > HTML > [download id="1" format="1" autop="false"]

    Its impossible.

    Is there a simple front end File Manager for users? Or one on its way!?!

    Thanks.

    ReplyReply

    Comment made on April 27, 2009 at 8:39 am

  15. Mike Jolley says:

    @Alec Wild: Alec, can you upload images via the image uploader on the posts screen? This uses the same uploader.

    @nonegiven: If they click the small arrow icon on the post screen and goto the view tab they just have to click the button to insert to code.

    ReplyReply

    Comment made on April 27, 2009 at 12:31 pm

  16. nickm says:

    Hi Mike,

    Is there a bulk upload process?

    Thanks for the hard work.

    Nick

    ReplyReply

    Comment made on April 28, 2009 at 12:33 pm

  17. jie says:

    I’m sorry, but I’m really confused on how to show the hits part, because it does not work on my site at all

    ReplyReply

    Comment made on April 29, 2009 at 11:59 am

  18. jie says:

    ^ Finally worked it out. Thanks for this plugin ;)

    ReplyReply

    Comment made on April 29, 2009 at 12:41 pm

  19. Rain says:

    hi, love the plugin but I cannot get the little pdf image to show after the link. any advice?

    ReplyReply

    Comment made on April 29, 2009 at 2:22 pm

  20. Pete says:

    Hi Mike,

    Just completed an auto update from v2 something to the latest version. I’ve got like 300 downloads and I’ve managed to update all my tags to the new format, however I’m getting this error

    Warning: Compilation failed: characters with values > 255 are not yet supported in classes at offset 16 in /home/websites/dev.christian.org.uk/public_html/wp-includes/shortcodes.php on line 213
    [Download id not defined]

    Any clues?

    ReplyReply

    Comment made on April 30, 2009 at 3:16 pm

  21. mali says:

    Is there a simple way to have a button, you click it and the download monitor tells you how many downloads there have been? Ive tried all sorts to fix it and all i get is text no graphics button? when you add download cant there be a field with Image download?

    Thanks for any help
    My head is up my bottom

    :D

    ReplyReply

    Comment made on April 30, 2009 at 3:24 pm

  22. Mike Jolley says:

    @nickm: No bulk upload sorry.

    @Rain: Use a custom format/custom field combination (e.g. a custom field called ‘type’ with value ‘pdf’) to add a class-name to the link and display the icon with css.

    @mali: Not entirely sure of the question; are you trying to output a download link as an image, or just show hits somewhere?

    @Pete: Can I see the short code your using? (if you paste code here remember to enclose with <code> tags.

    ReplyReply

    Comment made on April 30, 2009 at 4:10 pm

  23. mali says:

    Hi Mike,

    Yea im trying to get the download as a clickable image. but really lost with the custom fields or how to make it work, I just still end up with text as the link.

    Any help would be great

    Thanks
    Mali

    ReplyReply

    Comment made on April 30, 2009 at 4:14 pm

  24. Pete says:

    [download id="346" format="2"]

    ReplyReply

    Comment made on April 30, 2009 at 4:18 pm

  25. Pete says:

    I’ve also added a download using the ‘v’ post page feature and still the same error…

    ReplyReply

    Comment made on April 30, 2009 at 4:21 pm

Leave a Reply

About this site

Blue Anvil is the online web design journal & portfolio of , a web designer from Norfolk, England. Read More »
MiniCard Theme for WordPress
  • Featured work - More

    • Beefjack
    • Integrity
    • theotaku.com
  • Latest Tweet - More

    • RT @jameskoster: #Vector illustration of the new #iPod nano, free to download; http://www.potatoestomatoes.co.uk/technical/free-ipod-nano-vector/
  • Out of the blue - More

    • Closing the Forums

      Just posting to let current users know that I’m closing the forum on Blue-Anvil. This is mainly due to spam-registrations getting out of hand and being a general nuisance. I will be posting good topics as FAQ items within posts if applicable.

      Please note that you can still post and get help for my plugins/themes by posting on the wordpress.org website.

    • Show off your MiniCard!

      Are you a user of the WordPress MiniCard theme? Its been downloaded over 14,000 times so far!

      If you have used it as-is, made your own child-theme or done something creative with it, please show off your MiniCard’s in the comments, I’d love to see how the theme is being used!

    • Spam Stopper updated for WordPress 3.0

      My Spam Stopper plugin has been updated for WordPress 3.0 (version 3.1.3) – you can grab it here. Sorry this update took longer than my other plugins but this one gets less lovin’ – if you want to change that feel free to donate, spread the word, or rate it on the WordPress.org plugin page.

    • SexyBookmarks & Tr.im

      Just a notice to users of the brilliant http://www.sexybookmarks.net/ plugin by shareaholic – If you use tr.im (as I have on a few client sites) be aware tr.im has ceased operation so you may see errors on your blog or in your source code; it screwed up the background and headings on one of my blogs.

      To fix, go to sexybookmarks options, switch services in the “Which URL Shortener?” box, and tick the box to reset all short urls. Once done, your blog should return to normal.