通过提交重力表单获取限制内容

时间:2018-01-25 作者:Paulo Gabriel

我很难找到解决方案:

我有一堆限制内容的帖子,要访问这些页面的内容,用户必须提交一个重力表单。我想最好的方法是在gform_after_submission 发生。然后,函数将检查该cookie并根据结果显示这个或那个。问题是:我需要每个帖子都有一个cookie,而不是整个网站都有一个cookie。这就是我现在拥有的:

Creating cookie after submission. 我的想法是使用post id来命名cookie并使其唯一。在这之后,但我不会离开这里。

add_action( \'gform_after_submission_1\', \'create_cookie\' );
function create_cookie() {
    setcookie( \'cookie\'.get_the_ID(), 1, strtotime( \'+30 days\' ), COOKIEPATH, COOKIE_DOMAIN, false, false);
}
Checking if that cookie exists. 因此,提交后,页面将重新加载并设置cookie,浏览器将检测到它,一切都会发生。

add_filter( \'the_content\', \'checkingCookie\' );
function checkingCookie($content) {
  if( !isset( $_COOKIE[\'cookie\'.get_the_ID()] ) ) {
     return \'no cookies!\';
  }
  else {
     return \'cookies!\';
  }
}
问题是,在给定页面中创建的这个特定cookie应该只能在其原始帖子中检测到,这样,如果我转到另一篇帖子,那里的内容仍然会受到限制,并等待自己的提交来释放内容。

那么,有什么想法吗?

2 个回复
最合适的回答,由SO网友:David Sword 整理而成

您可以通过首先在表单中创建一个隐藏字段来完成所需的工作。将值设置为当前嵌入页:

enter image description here

注意隐藏字段ID,对于此演示,它是3.

然后,您的内容代码与您的代码类似:

add_action( \'the_content\', function ($content) {

    // check if user has submitted this pages form, if not, show only form
    if( !isset( $_COOKIE[\'unrestrict_\'.get_the_ID()] ) ) {

        // get form #1
        $form = RGForms::get_form(1);

        // uncomment to review cookies
        // echo "<pre>".print_r($_COOKIE,true)."</pre>";

        return \'<h2>Restricted Content - Fill out Form</h2>\'.$form;
    } else {

        // user has in last 30 days submitted this pages form
        // show content
        return $content;
    }
});
对于处理,我们将执行

add_action( \'gform_after_submission_1\', function ($entry, $form) {

    // uncomment to review the entry
    // echo "<pre>".print_r($entry,true)."</pre>"; die;

    // get the hidden field, the embedded from page
    $from_page = rgar( $entry, \'3\' );

    // set the cookie
    setcookie( \'unrestrict_\'.$from_page, 1, strtotime( \'+30 days\' ), COOKIEPATH, COOKIE_DOMAIN, false, false);

    // redirect so we dont land on gravity forms "thank you" page
    wp_redirect( get_permalink( $from_page ) );

}, 10, 2);
如果你想把它放在the_content 筛选器您可以为不需要的页面ID添加条件。您可以使用带有post\\u meta/metabox的复选框进行探索。

您可以像上面那样选择每页存储一个cookie,也可以执行一个主cookie,其中值是您添加和查找的ID的序列化数组。

afaik使用cookies这根本不安全,它们可能是伪造的。所以,如果你隐藏了微妙的信息,你应该检查身份验证、安全cookie存储和cookie/用户验证。如果这就是我认为它的目的,线索捕获,这是一个很好的方法。

我在操作中使用了匿名函数,如果这是一个公共插件/主题,您可能需要调用该函数。

SO网友:Dave from Gravity Wiz

David的解决方案非常好,如果您想避免接触代码,只需在此处包含此选项即可:

https://gravitywiz.com/submit-gravity-form-access-content/

结束

相关推荐

Cookies in template

我需要根据cookies只显示一次页面的某些部分。主要问题是我只能在插件中设置cookie,挂起init操作。我已经读了20页的谷歌,这个网站,问了2个论坛,但我仍然有这个问题。任何帮助都将不胜感激!