Add query vars -> Recalculate rewrite rules add_filter('rewrite_rules_array', array(&$this, 'createRewriteRules')); add_filter('query_vars', array(&$this, 'addQueryVars')); add_action('template_redirect', array(&$this, 'templateRedirectIntercept') ); add_filter('admin_init', array(&$this, 'flushRewriteRules')); add_action('delete_attachment', array(&$this, 'deleteTempFiles')); } function activate( /*$network_wide*/ ) { $this->flushRewriteRules(); } // Took out the $wp_rewrite->rules replacement so the rewrite rules filter could handle this. function createRewriteRules($rules) { global $wp_rewrite; $newRule = array('download/([^/]+)/(.*)' => 'index.php?amd_type='.$wp_rewrite->preg_index(1).'&amd_args='.$wp_rewrite->preg_index(2)); $newRules = $newRule + $rules; return $newRules; } function addQueryVars($vars) { $vars[] = 'amd_type'; $vars[] = 'amd_args'; return $vars; } function flushRewriteRules() { global $wp_rewrite; $wp_rewrite->flush_rules(); } function templateRedirectIntercept() { global $wp_query; if ($wp_query->get('amd_type')) { require AMD_PATH . '/Download/Download.php'; new Amd_Download($wp_query->get('amd_type'), explode('/', urldecode($wp_query->get('amd_args')))); } } function deleteTempFiles($postId) { $dir = dirname(get_attached_file($postId, true)) . '/' . $postId; if (is_dir($dir)) { foreach(scandir($dir) as $file) { if ('.' === $file || '..' === $file) continue; unlink("$dir/$file"); } rmdir($dir); } } } new CM_AdvancedMediaDownloader(); /** * Get an attachment file url * @param $id * @param array $args * @param string $sep * @return string */ function amd_get_file_link($id, array $args=array(), $sep='&') { return user_trailingslashit(home_url( sprintf('/download/file/%d', $id) )) . '?'.http_build_query($args, '', $sep); } /** * Print image tag for attachment * @param $id * @param array $args * @param string $alt * @param array $classes */ function amd_file_img($id, array $args=array(), $alt='', $classes=array()) { if (!empty($classes)) echo sprintf('%s', amd_get_file_link($id, $args), $alt, implode(' ', $classes)); else echo sprintf('%s', amd_get_file_link($id, $args), $alt); } /** * Get an asset url * @param $type * @param array $files * @param null $no_cache * @return string * @throws InvalidArgumentException */ function amd_get_asset_link($type, array $files, $no_cache=null) { if (!in_array($type, array('css','js','less'))) throw new InvalidArgumentException('Unknown asset type ' . $type); return user_trailingslashit(home_url( sprintf('/download/%s/%s', $type, implode('+',$files)) )) . ($no_cache || ($no_cache===null && defined('APPLICATION_ENV') && APPLICATION_ENV!='production')?'?'.time():''); }