I would still use the WordPress uploader, but you’ll need to modify it to make it work. So say you want gpx files (assuming this is what you mean).
When you upload something, WordPress looks at it’s file extension and based on a set of allowable mime types lets the upload go through or blocks it. Those allowed mime types are fetched by the function get_allowed_mime_types
which, like nearly everything in WordPress, provides a filter to modify things. upload_mimes
in this case.
We can hook in and allow .gpx
files. Mime types are specified in an associative array of regex_pattern => mime_type
format.
So to add gpx:
<?php
add_filter('upload_mimes', 'wpse66651_allow_gpx');
/**
* Allow the uploading of .gpx files.
*
* @param array $mimes The allowed mime types in file extension => mime format
* @return array
*/
function wpse66651_allow_gpx($mimes)
{
$mimes['gpx'] = 'application/xml';
return $mimes;
}
There are quite a few file types that WordPress recognizes and allows. If you need more, add them like the above.
As far as auto adding the file links to the content. That’s easy enough. Hook into the_content
get the associated attachments, spit them out.
<?php
add_filter('the_content', 'wpse66651_display_files');
function wpse66651_display_files($c)
{
global $post;
if(!in_the_loop())
return $c;
$attachments = get_posts(array(
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'application/xml',
'nopaging' => true,
));
if(!$attachments)
return $c;
$list="<ul class="gpx-list">";
foreach($attachments as $a)
$list .= '<li>' . wp_get_attachment_link($a->ID) . '</li>';
$list .= '</ul>';
return $c . $list;
}
The above in a plugin.