
內容簡介
Cookie Connector for (Beaver) Themer
外掛描述
Cookie Connector for Beaver Themer 是一個非官方的外掛,它可以與常見的Beaver Themer外掛搭配使用。此外掛使用Beaver Themer Connector讀取cookie值,並使用條件邏輯根據cookie值來隱藏/顯示不同的節點(模塊,列和/或行)。
Cookie Connector還可以通過AJAX調用創建cookie。由於安全措施,您需要自行編寫AJAX,但可以在此處的示例文件夾中找到如何操作的示例文件:
https://github.com/badabingbreda/cookie-connector-for-themer/
使用Cookie Connector
您可以像字符串一樣在任何位置顯示Cookie Connector,使用連接或插入按鈕。
使用條件邏輯過濾器
由於cookie有一定的有效性,當cookie不存在或已失效時,該過濾器無法返回任何值。條件邏輯過濾器有一個額外的參數,用於設置當它無法返回任何值時的默認值。設置此參數將在不存在時返回該值。
編寫cookie值
在編寫cookie值之前,必須先編寫任何標頭發送給訪問者的瀏覽器。這樣做的缺點是,在訪問者發送請求之前就只能讀取cookie,因為它們是隨請求一起發送的。這意味著您不能寫入cookie的值,並立即在單次頁面調用中讀取那個cookie的新值。
為了解決這個問題,可以使用AJAX調用來編寫cookie。
“Cookie Connector for 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>
第一個參數是要在PHP腳本中調用的“動作名”,因此在此示例中(參見下文)是“wp_ajax_”和“wp_ajax_nopriv_”之後的部分。
您還可以添加一個可選的第三個參數“debug”,它將添加響應的console.log dump,以便您知道正在回答什麼:
<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代碼
單擊鏈接將觸發AJAX調用,該調用將在訪問者設備上設置cookie(如果其瀏覽器允許)。
在服務器端,您需要添加一個或兩個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
// 略
}
?>
外掛標籤
開發者團隊
原文外掛簡介
Cookie Connector for (Beaver) Themer
Plugin description
Cookie Connector for Beaver Themer is an unofficial addon-plugin for the popular Beaver Themer plugin. It allows you to read cookie-values using the Beaver Themer Connector and use Conditional Logic to hide/show seperate nodes (modules, columns and/or rows) using cookie values.
Cookie Connector also allows you to create cookies using an AJAX call. For security measures you will need to write the AJAX yourself, but an example file on how to do that can be found here, in the example folder:
https://github.com/badabingbreda/cookie-connector-for-themer/
Using the Cookie Connector
You can display the Cookie Connector wherever you’d normally insert it as a string, using either the connect or insert button.
Using the Conditional Logic filter
Because cookies have a certain validity, it can’t return a value when the cookie isn’t there or has become invalid. The Conditional Logic filter has an extra parameter to set a default value for whenever it doesn’t return anything. Setting this parameter return that value whenever it doesn’t exist.
Writing cookies values
Cookies are written before any headers are written to the visitor’s browser. The downside to that is that cookies can only be read when the visitor’s sends a request, since they are sent over WITH the request. This means that you can’t write a cookie’s value and immediately read that cookies new value, within a single run of a page-call.
To work around that, cookies can be written using an AJAX call.
“Cookie Connector for Themer” enqueues a script that registers the cookieConnector object, which handles the security and sending of requests.
Let’s consider the following html-code that is used in a HTML module:
The first parameter is the actionname that is going to be called in the PHP script, so in this example (see below) the part after ‘wp_ajax_’ and ‘wp_ajax_nopriv_’.
You can also add an extra, optional, third parameter debug that will add a console.log dump of the response, should you need to know what’s being answered:
Adding the PHP code to create/change/delete the cookie
Clicking the link wil trigger an AJAX call that will set a cookie on the visitor’s device, if their browser allows it.
On the server-side, you will need to add one or two ajax callbacks, depending if the call can be made without being logged in.
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();
}
It is advised to use wp_send_json with a ‘success’ parameter (either true or false) so that you check it in your javascript and add actions after sending the cookieConnector() command, for instance a reload of the page or forwarding to an url that you received from the server based on the click.
For instance, the javascript below will try to create the cookie. When successful it will display an alert on the browser and reload the page after 1.5 seconds.
Special thanks
Thanks to 10UP for creating this github action for easy deployment. https://github.com/marketplace/actions/wordpress-plugin-deploy
version history
1.3.1
Forgot to update readme.md (this file). Small fix for isset because it’s not the value that we want (could be falsy) but return if the cookie is set.
1.3.0
Rewrite of plugin using Autoloader. Fixed isset error.
1.2.0
Removed admin_notice so that plugin can be used without Beaver Themer and Beaver Builder too (scripts), for ajax calls.
1.1.0
Updated the version because it works on WP 5.4 too
1.0.1
Updated example code
1.0.0
Initial release (January 18th, 2019)
