1

我在一个 Wordpress 网站上工作。我们希望在所有访问者正确填写联系表时为他们提供下载。我们希望限制对下载链接的任何其他访问,除非它来自联系表格。

现在,我可以使用 on_sent_ok 将用户重定向到提交时的下载页面:“location = ' http://example.com/downloads ';” 在 Contact Form 7 界面的高级选项中。

但是,即使我没有提交表单,我也可以访问同一页面。有没有办法阻止人们访问此页面,除非他们使用表单?为此,我想在 Wordpress 框架中使用联系表格 7 插件。

4

2 回答 2

2

绝对有可能。我个人讨厌人们让我分享我的联系信息以下载免费的东西,所以我强烈建议您将其设为可选。

但是,既然您真的想这样做,我只需为 URL 设置某种 ?submit=success 后缀,如果存在,则显示下载链接。

您可以将其添加到您的functions.php文件中以使其工作(编辑: 调整,以便它们的短代码可以重复用于其他下载。):

// Get current page URL and clean it up
$url_current  = @( $_SERVER["HTTPS"] != 'on' ) ? 'http://'.$_SERVER["SERVER_NAME"] :  'https://'.$_SERVER["SERVER_NAME"];
$url_current .= ( $_SERVER["SERVER_PORT"] !== 80 ) ? ":".$_SERVER["SERVER_PORT"] : "";
$url_current .= $_SERVER["REQUEST_URI"];
$url_clean = array_shift( explode('?', $url_current) );
$url_success = $url_clean . '?submit=success';

function free_download( $atts ) {

    // Get variables
    extract(shortcode_atts(array(  
        'contact_form' => '',
        'download_link' => ''
    ), $atts));

    // Modify variables
    $contact_form = do_shortcode('[' . $contact_form . ']');

    if ($url_current == $url_success) {
        return $download_link;
    }
    else {
        return $contact_form;
    }
}
add_shortcode('free_download', 'free_download');

在您的联系表 7 设置中,按照以下说明设置适当的重定向链接(同一页面,但带有 ?submit=success 后缀):http ://wordpress.org/support/topic/plugin-contact-form-7-表单成功后重定向到页面

在 WP 内容编辑器中,使用[free_download contact_form='contact-form-7 id="12345" title="whatever"' download_link='<p>Some message here. <a href="http://YOUR-DOWNLOAD-LINK.pdf">Download</a></p>']简码嵌入内容。

现在使用这种方法,使用 ?submit=success 链接的人仍然可以访问内容,因此它不是 100% 真正受到保护,但它被隐藏了,因此普通访问者无法访问它。

于 2013-06-22T21:05:32.973 回答
0

我能想到的第一个解决方案是在 on_sent_ok 的操作中设置一个 cookie。您的下载页面将拥有自己的模板页面,它会检查是否设置了 cookie(在get_header发送或发送任何其他输出之前)。如果未设置 cookie,您可能会显示一条消息,指示在未填写表单的情况下无法下载,或者重定向到包含表单的页面。如果设置了 cookie,则您可以进行下载。理想情况下,下载文件将位于 Web 根目录之外,您可以使用readfile.

于 2013-06-22T20:20:53.017 回答