私はこれに対する解決策を見つけるのに苦労しています:
私は内容を制限した投稿をたくさん持っています、そしてこれらのページの内容にアクセスするためにユーザーは重力フォームを提出しなければなりません。私がそうする最もよい方法がgform_after_submission
が起こるときクッキーを設定することであると思います。それから機能はそのクッキーをチェックし、結果に応じてこれまたはそれを表示します。つまり、サイト全体に1つのCookieを使用するのではなく、すべての投稿にCookieが必要です。これは私が今持っているものです:
提出後にクッキーを作成する。 ここでの私の考えは、クッキーに名前を付けてそれをユニークにするためにポストIDを使うことでした。この後、私はここからどこにもなっていません。
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);
}
そのクッキーが存在するかどうかを確認します。 それで投稿後、ページはリロードされ、設定されているクッキーはブラウザによって検出され、事態が起こります。
add_filter( 'the_content', 'checkingCookie' );
function checkingCookie($content) {
if( !isset( $_COOKIE['cookie'.get_the_ID()] ) ) {
return 'no cookies!';
}
else {
return 'cookies!';
}
}
問題は、特定のページで作成されたこの特定のcookieは、Origin投稿でしか検出できないため、コンテンツを別の投稿に移動した場合でも、コンテンツが解放されるのを制限して独自の投稿を待つことです。
そう、何かアイデアはありますか?
あなたのフォームに隠しフィールドを最初に作成することによってあなたがしていることを達成することができます。現在の埋め込みページに値を設定します。
このデモでは、隠しフィールド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_meta/metaboxのチェックボックスを使って探索することができます。
上記のようにページごとにクッキーを1つずつ保存することも、メインのクッキーを1つ作成することもできます。この場合、値は追加して探すIDのシリアル化された配列です。
クッキーを使用することは絶対に安全ではありません、彼らは偽造することができます。したがって、繊細な情報を隠している場合は、認証、安全なCookieの保存、およびCookie /ユーザーの確認を確認する必要があります。これが私が想定しているものであるとすれば、これは良いアプローチです。
私はアクションで匿名関数を使用しました。もしこれがパブリックプラグイン/テーマであれば、代わりに関数を呼び出したいと思うかもしれません。
コードに触れないようにしたいのであれば、Davidの解決策はこれを代替手段としてここに含めるだけで問題ありません。
https://gravitywiz.com/submit-gravity-form-access-content/ /