ThemerのCookieコネクタ | Didou Schol
ThemerのCookieコネクタ

ThemerのCookieコネクタ | Didou Schol

説明

(ビーバー)テーマのCookieコネクタ

プラグインの説明

BeaverThemerのCookieConnectorは、人気のあるBeaverThemerプラグインの非公式アドオンプラグインです。これにより、Beaver Themerコネクタを使用してCookie値を読み取り、条件付きロジックを使用して、Cookie値を使用して個別のノード(モジュール、列、行)を表示/非表示にすることができます。

Cookie Connectorを使用すると、AJAX呼び出しを使用してCookieを作成することもできます。セキュリティ対策のために、AJAXを自分で作成する必要がありますが、その方法に関するサンプルファイルは、サンプルフォルダにあります。

https://github.com/badabingbreda/cookie-connector-for-themer/

Cookieコネクタの使用接続ボタンまたは挿入ボタン
を使用して、通常は文字列として挿入する場所にCookieコネクタを表示できます。

条件付きロジックフィルターの使用
Cookieには一定の有効性があるため、Cookieが存在しないか無効になった場合、値を返すことはできません。条件付きロジックフィルターには、何も返さない場合にデフォルト値を設定するための追加のパラメーターがあります。このパラメータを設定すると、値が存在しない場合は常にその値が返されます。

Cookie値の書き込み
Cookieは、ヘッダーが訪問者のブラウザに書き込まれる前に書き込まれます。その欠点は、Cookieはリクエストとともに送信されるため、訪問者がリクエストを送信したときにのみ読み取ることができることです。これは、ページ呼び出しの1回の実行内で、Cookieの値を書き込んですぐにそのCookieの新しい値を読み取ることができないことを意味します。

これを回避するために、AJAX呼び出しを使用してCookieを書き込むことができます。
「CookieConnectorfor Themer」cookieConnectorは、セキュリティとリクエストの送信を処理するオブジェクトを登録するスクリプトをキューに入れます。
HTMLモジュールで使用される次のhtmlコードについて考えてみましょう。

<p><a href="javascript:cookieConnector.set( 'setmycookie' , { cv: 'my cookie value' , valid: 3600 } );">Set cookie value</a></p>
<p><a href="javascript:cookieConnector.set( 'unsetmycookie' );">Unset cookie value</a></p>

最初のパラメーターは、actionnamePHPスクリプトで呼び出されるパラメーターであるため、この例(以下を参照)では、「wp_ajax_」および「wp_ajax_nopriv_」の後の部分です。何が回答されているかを知る必要がある場合は、応答のconsole.logダンプを追加する
オプションの3番目のパラメーターdebugを追加することもできます。

<p><a href="javascript:cookieConnector.set( 'setmycookie' , { cv: 'my cookie value' , valid: 3600 } , true );">Set cookie value</a></p>
<p><a href="javascript:cookieConnector.set( 'unsetmycookie', {} , true );">Unset cookie value</a></p>

Cookieを作成/変更/削除するためのPHPコードの追加
リンクをクリックすると、ブラウザで許可されている場合、訪問者のデバイスにCookieを設定するAJAX呼び出しがトリガーされます。

サーバー側では、ログインせずに呼び出しを行うことができるかどうかに応じて、1つまたは2つのajaxコールバックを追加する必要があります。

<?php
    add_action( 'wp_ajax_setmycookie' , 'callback_setmycookie' );
    add_action( 'wp_ajax_nopriv_setmycookie' , 'callback_setmycookie' );
    add_action( 'wp_ajax_unsetmycookie' , 'callback_setmycookie' );
    add_action( 'wp_ajax_nopriv_unsetmycookie' , 'callback_setmycookie' );

    function callback_setmycookie() {
        // first check if this ajax call is
        // done using the script belonging to the installation
        //
        if( ! check_ajax_referer( 'cookie-security-nonce' , 'security' ) ) {
            wp_send_json_error( 'Invalid security token sent.' );
            wp_die();
        }

        // Check if visitor has accepted the cookies from Cookie Notice plugin
        // If you're using another plugin, you should write your own check here
        if ( !function_exists('cn_cookies_accepted') || !cn_cookies_accepted() ) {
            wp_die();
        }
        if ( !defined( 'DOING_AJAX' ) ) define( 'DOING_AJAX' , TRUE );

        // set your cookie name here
        $cookie_name = 'mylanguage';
        $default_validity = 60 * 60; // = 60 minutes

        // try to get the cookie_value
        $cookie_value = isset( $_GET['cv'] ) ? $_GET['cv'] : false;
        // try to get the cookie validity period. If not default to default validity
        $cookie_valid = isset( $_GET['valid'] ) ? $_GET['valid'] : $default_validity;

        // if the action is setmycookie we need a cookie_value (cv) because else it will fail. Check for it and return an error if there isn't one.
        if ( ! $cookie_value && $_GET['action'] == 'setmycookie' ) {
            wp_send_json_error( array( 'success' => false, 'error' => '402', 'message' => 'cookie not set, no value given. ( cv )' ) );
        }

        // check action parameter
        // UNSET mycookie
        if ( 'unsetmycookie' == $_GET['action'] ) {
            setcookie( $cookie_name , 'unset value' , time() - 1 , COOKIEPATH, COOKIE_DOMAIN , isset($_SERVER["HTTPS"]) );
            wp_send_json( array( 'success' => true, 'message' => "Done unsetting cookie '{$cookie_name}'." ) );
        } else if ( 'setmycookie' == $_GET['action'] ) {
            setcookie( $cookie_name , $cookie_value , time() + $cookie_valid , COOKIEPATH, COOKIE_DOMAIN , isset($_SERVER["HTTPS"]), true );
            wp_send_json( array( 'success' => true, 'message' => "Done setting cookie '{$cookie_name}' to value '{$cookie_value}' with validity $cookie_valid seconds." ) );

        }
        wp_die();
    }

wp_send_jsonを「success」パラメーター(trueまたはfalse)とともに使用して、JavaScriptでチェックし、cookieConnector()コマンドの送信後にアクションを追加することをお勧めします。たとえば、ページのリロードやURLへの転送などです。クリックに基づいてサーバーから受信しました。
たとえば、以下のJavaScriptはCookieを作成しようとします。成功すると、ブラウザにアラートが表示され、1.5秒後にページがリロードされます。

<script>
        function cookie_trigger() {
            jQuery.when( cookieConnector.set( 'setmycookie', { cv: jQuery( '#selectlanguage' ).val(), valid: 5 * 60 }, 1 ))
            .done( function( data ) {
                if ( data.success ) {
                    alert( data.message + '\r You can now safely shut down your browser, restart and visit this URL. This selectbox will reflect the last cookie value.' );
                    setTimeout( function() { location.reload(); }, 1500);
                }
            });
        }
</script>

バージョン履歴

1.2.0

admin_noticeを削除して、プラグインをBeaverThemerおよびBeaverBuilderなしで(スクリプト)ajax呼び出しに使用できるようにしました。

1.1.0

WP 5.4でも動作するため、バージョンを更新しました

1.0.1

更新されたサンプルコード

1.0.0

初期リリース(2019年1月18日)

 

プラグインの作者

Didou Schol

プラグインの公式ウェブサイトアドレス

https://wordpress.org/plugins/cookie-connector-for-themer/
ThemerのCookieコネクタプラグインの使用で問題が発生した場合は、以下にコメントしてください。問題の解決に最善を尽くします

コメントを残す