Obtenga contenido restringido enviando formularios de gravedad

4

Tengo problemas para encontrar una solución para esto:

Tengo un montón de publicaciones con contenido restringido, y para acceder al contenido de estas páginas, el usuario debe enviar un formulario de gravedad. Me imagino que la mejor manera de hacerlo es establecer una cookie cuando ocurre gform_after_submission . Luego, una función verificará esa cookie y mostrará esto o aquello dependiendo del resultado. El problema es que necesito una cookie para cada publicación en lugar de una cookie para todo el sitio. Esto es lo que tengo ahora:

Creando una cookie después del envío. Mi idea aquí fue usar la ID de publicación para nombrar la cookie y hacerla única. Después de esto, pero no voy a ir a ninguna parte desde aquí.

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

Comprobando si esa cookie existe. Entonces, después del envío, la página se volverá a cargar y la cookie que se está configurando será detectada por el navegador y sucederán cosas.

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

El problema es que esta cookie en particular creada en una página determinada solo debe ser detectable en su publicación de origen, de modo que si voy a otra publicación, el contenido todavía estará restringido y esperará su propia presentación para liberar contenido.

entonces, ¿alguna idea?

    
pregunta Paulo Gabriel 26.01.2018 - 00:51

2 respuestas

1

Puede lograr lo que está buscando primero creando un campo oculto en su formulario. Establezca el valor en la página de inserción actual:

TomenotadelIDdeloscamposocultos,paraestademostración,es3.

Entoncessucódigoparaelcontenidoessimilaraloquetenía:

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 el procesamiento, lo haremos

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

Si desea que esto aparezca en algunas páginas, pero no en todas, dentro del filtro the_content , puede agregar sus condicionales para el ID de página que no desea. Y puedes explorar usando una casilla de verificación con post_meta / metabox.

Puede elegir almacenar una cookie por página como la de arriba, o puede hacer una cookie principal donde el valor sea una matriz serializada de ID que agregue y busque.

Afaik utilizando cookies, esto simplemente no es seguro, se pueden falsificar. Entonces, si está ocultando información delicada, debe revisar la autenticación, el almacenamiento seguro de cookies y la verificación de cookies / usuarios. Si esto es lo que supongo que es, capturas de plomo, este es un buen enfoque.

He usado funciones anónimas en las acciones, si este es un plugin / tema público al que quizás quieras llamar la función.

    
respondido por el David Sword 26.01.2018 - 01:40
0

La solución de David está perfectamente bien, simplemente incluya esto aquí como una alternativa si quiere evitar tocar el código:

enlace

    
respondido por el David 27.01.2018 - 10:50

Lea otras preguntas en las etiquetas