通过电子邮件订阅WordPress中的下载

时间:2013-09-07 作者:eeecoder

我有一个wordpress博客。我想只允许订阅者下载文件。我该怎么做?任何帮助都将不胜感激。

此外,当我收到用户的电子邮件时,用户必须首先是订户,然后才能下载文件。

我移除了feedburner我什么都没有。我只想为访问者下载任何文件订阅条件。就像在androidhive

1 个回复
SO网友:gmazzap

以下不是最佳解决方案。这是一个可以/应该改进的简单解决方案,其目的只是给您一个方向。

创建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”

enter image description here

然后创建模板文件: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.

结束