Obtenha conteúdo restrito enviando Formulários de Gravidade

4

Estou com problemas para encontrar uma solução para isso:

Tenho várias postagens com conteúdo restrito e, para acessar o conteúdo dessas páginas, o usuário precisa enviar um formulário de gravidade. Eu imagino que a melhor maneira de fazer isso é definir um cookie quando ocorre gform_after_submission . Então uma função verificaria esse cookie e mostraria isto ou aquilo dependendo do resultado. O problema é: eu preciso de um cookie para cada postagem em vez de um único cookie para todo o site. Isso é o que eu tenho agora:

Criando cookies após o envio. Minha ideia aqui era usar o ID da postagem para nomear o cookie e torná-lo único. Depois disso, mas eu não estou chegando a lugar nenhum daqui.

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);
}

Verificando se esse cookie existe. Assim, após o envio, a página será atualizada e o cookie que está sendo definido será detectado pelo navegador e as coisas acontecerão.

add_filter( 'the_content', 'checkingCookie' );
function checkingCookie($content) {
  if( !isset( $_COOKIE['cookie'.get_the_ID()] ) ) {
     return 'no cookies!';
  }
  else {
     return 'cookies!';
  }
}

O fato é que esse cookie específico criado em uma determinada página só deve ser detectável em sua postagem de origem para que, se eu for para outro post, o conteúdo ainda esteja restrito e aguardando sua própria submissão para liberar conteúdo.

então, alguma idéia?

    
por Paulo Gabriel 26.01.2018 / 00:51

2 respostas

1

Você pode realizar o que procura depois de criar primeiro um campo oculto em seu formulário. Defina o valor para a página incorporada atual:

AnoteoIDdoscamposocultos,paraestademonstração,é3.

Entãooseucódigoparaoconteúdoésemelhanteaoquevocêtinha:

add_action('the_content',function($content){//checkifuserhassubmittedthispagesform,ifnot,showonlyformif(!isset($_COOKIE['unrestrict_'.get_the_ID()])){//getform#1$form=RGForms::get_form(1);//uncommenttoreviewcookies//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;
    }
});

Para o processamento, faremos

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);

Se você deseja que isso esteja em algumas páginas, mas não em todas, dentro do filtro the_content , você pode adicionar suas condicionais para o ID da página que deseja / não deseja. E você pode explorar usando uma caixa de seleção com post_meta / metabox.

Você pode optar por armazenar um cookie por página, como acima, ou pode fazer um cookie principal em que o valor é uma matriz serializada de IDs que você adiciona e procura.

usando cookies isso simplesmente não é seguro, eles podem ser falsificados. Portanto, se você estiver ocultando informações delicadas, deverá revisar a autenticação, o armazenamento seguro de cookies e a verificação de cookies / usuários. Se isso é o que eu presumo, é uma captura de leads, esta é uma ótima abordagem.

Eu usei funções anônimas nas ações, se este for um plugin / theme público, você pode querer chamar a função.

    
por David Sword 26.01.2018 / 01:40
0

A solução de David está perfeitamente bem, apenas incluindo isso aqui como alternativa, se você quiser evitar tocar no código:

enlace

    
por David 27.01.2018 / 10:50