以下不是最佳解决方案。这是一个可以/应该改进的简单解决方案,其目的只是给您一个方向。
创建CPT“资源”。
register_post_type(\'resource\', $args);
有关参数,请参阅
here.
在WP根文件夹下/wp-admin
, /wp-includes
和/wp-content
), 通过FTP添加另一个文件夹,将其命名/resources
.
在此文件夹中创建.htaccess
使用文件:
Options All -Indexes
Order Deny, Allow
Deny from all
在此文件夹中上载所有资源文件。
开始创建资源帖子。通常创建它:标题、内容、分类法:任何你想要的。
使用自定义字段将这些帖子链接到资源文件,使用键:“resource”
然后创建模板文件:single-resource.php
在此文件中,创建for表单:
<form action="" method="post">
<input type="text" name="resource" value="<?php the_the_ID() ?>">
<p>Enter your email here to download:<br />
<input type="text" name="email" value="">
</p>
<input type="submit" name="submit" value="Download">
</form>
在这个文件中,您应该实现一些js验证,对于semplicity,我跳过了这些验证。
在插件或functions.php
创建处理表单提交的代码:
add_action(\'template_redirect\', \'maybe_download\');
function maybe_download() {
if (
! is_single() || empty($_POST) ||
! isset($_POST[\'resource\']) || ! is_single($_POST[\'resource\']) ||
! isset($_POST[\'email\']) || ! is_email($_POST[\'email\'])
) return;
// get already saved emails from option
$emails = get_option(\'subscribers\') ? : array();
if ( ! in_array($_POST[\'email\'], $emails) ) {
$emails[] = $_POST[\'email\'];
update_option(\'subscribers\', $emails);
}
$res = get_post_meta( $post->ID, \'resource\', true);
if ( empty($res) ) return;
// avoid same user download again same file in the next 10 minutes
if ( get_transient(\'downloaded_\' . $_POST[\'email\'] . \'_\' . $res) ) {
wp_redirect( get_permalink() );
exit();
}
// file path
$file = trailingslashit( ABSPATH ) . \'resources/\' . trim($res);
if ( ! file_exists($file) ) return;
// avoid same user download again same file in the next 10 minutes
set_transient(\'downloaded_\' . $_POST[\'email\'] . \'_\' . $res, 1, 600 );
// download count for the resource
$count = get_post_meta($post->ID, \'_download\', true) ? : 0;
update_post_meta($post->ID, \'_download\', $count+1);
// force download of file
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename= " . basename($file) );
header("Content-Transfer-Encoding: binary");
readfile($file);
exit();
}
要检索所有订阅服务器,您必须:
get_option(\'subscribers\')
.
具有get_post_meta($post->ID, \'_download\', true)
您可以知道文件下载了多少次。
同样,这是一个非常简单的工作流,但您可以将其用作起点。
请注意,代码为completely untested.