你有想過不管是追蹤資料或是cookie這些的利用,其實在很多地方的法規上都是需要表明註記的,尤其是在歐盟的國家,GDPR更是嚴苛,而我在的國家本身也是需要標明網站使用到的資料,不管是進GA也好,或是給投廣告,你都必須在一開頭就寫得清清楚楚,而每一個外掛都會有不同的privacy,老實說比較聰明的方式並不是每個開發的外掛都寫在這,而是在自己的網站加上了這一段。
/**
* 增加隱私權的說明與consent
*/
function wporg_add_privacy_policy_content() {
if ( ! function_exists( 'wp_add_privacy_policy_content' ) ) {
return;
}
$content = '<p class="privacy-policy-tutorial">' . __( 'Some introductory content for the suggested text.', 'text-domain' ) . '</p>'
. '<strong class="privacy-policy-tutorial">' . __( 'Suggested Text:', 'my_plugin_textdomain' ) . '</strong> '
. sprintf(
__( 'When you leave a comment on this site, we send your name, email address, IP address and comment text to example.com. Example.com does not retain your personal data. The example.com privacy policy is <a href="%1$s" target="_blank">here</a>.', 'text-domain' ),
'https://example.com/privacy-policy'
);
wp_add_privacy_policy_content( 'Example Plugin', wp_kses_post( wpautop( $content, false ) ) );
}
add_action( 'admin_init', 'wporgmy_example_plugin_add_privacy_policy_content' );
在4.9.6版之後wordpress有提供一個exporter可以串接,一個套件能增加很多的exporter來匯出與加入到自己的外掛之中,但大多的外掛只需要一個,我們照著官網的範例來將地方資料加近評論者的評論之中,而我們需要使用到add_comment_meta來增加我們所需的資料,而我們需要增加的是經緯度。
function wporg_export_user_data_by_email( $email_address, $page = 1 ) {
$number = 500; // Limit us to avoid timing out
$page = (int) $page;
$export_items = array();
$comments = get_comments(
array(
'author_email' => $email_address,
'number' => $number,
'paged' => $page,
'order_by' => 'comment_ID',
'order' => 'ASC',
)
);
foreach ( (array) $comments as $comment ) {
$latitude = get_comment_meta( $comment->comment_ID, 'latitude', true );
$longitude = get_comment_meta( $comment->comment_ID, 'longitude', true );
// Only add location data to the export if it is not empty.
if ( ! empty( $latitude ) ) {
// Most item IDs should look like postType-postID. If you don't have a post, comment or other ID to work with,
// use a unique value to avoid having this item's export combined in the final report with other items
// of the same id.
$item_id = "comment-{$comment->comment_ID}";
// Core group IDs include 'comments', 'posts', etc. But you can add your own group IDs as needed
$group_id = 'comments';
// Optional group label. Core provides these for core groups. If you define your own group, the first
// exporter to include a label will be used as the group label in the final exported report.
$group_label = __( 'Comments', 'text-domain' );
// Plugins can add as many items in the item data array as they want.
$data = array(
array(
'name' => __( 'Commenter Latitude', 'text-domain' ),
'value' => $latitude,
),
array(
'name' => __( 'Commenter Longitude', 'text-domain' ),
'value' => $longitude,
),
);
$export_items[] = array(
'group_id' => $group_id,
'group_label' => $group_label,
'item_id' => $item_id,
'data' => $data,
);
}
}
// Tell core if we have more comments to work on still.
$done = count( $comments ) > $number;
return array(
'data' => $export_items,
'done' => $done,
);
}
再者之後我們加上了wp_privacy_personal_data_exporters
這個filter來加上exporters並且回傳。
function wporg_register_user_data_exporters( $exporters ) {
$exporters['my-plugin-slug'] = array(
'exporter_friendly_name' => __( 'Comment Location Plugin', 'text-domain' ),
'callback' => 'my_plugin_exporter',
);
return $exporters;
}
add_filter( 'wp_privacy_personal_data_exporters', 'wporg_register_user_data_exporters' );
寫了十天,每天花了不少時間寫這些,不過今天算是做的最隨便的一天了,老實說寫到後面有點徬徨,不知道自己在寫什麼,或是原本自己排定有系統的寫法,總覺得不是個好辦法,按著官網的進度在學習寫程式,這感覺是個最慢的方式來學習了,我總想著應該將介紹的篇幅減少多些,把每一章的小型外掛整理得更完整些,是不是會讓做中學的效率更加快捷呢?
這幾天寫下來,寫最快的是程式碼,再加上有範例程式碼可以參照,基本上弄完差不多是幾十分鐘,但難是難在之後的那些解釋與讓文章更加流暢,這些真的很惱人,而在解釋的同時我又不經意感覺自己是不是在當一個翻譯人士,或是向大學助教一樣,像拿著教材去教學生該嘴怎麼看那些人家已經整理好的資料與教學,感覺這點的意義不是很大,我覺得應該盡快結束這種按本宣課的講解,之後更希望在解釋的部分,我會使用連結的方式來做主要,然後用些簡述的方式為他做個介紹,並且把每一章的實作做的更貼近使用層面。
不過要改變也不是那麼容易,有些基礎該說的還是得提,明天依舊是講該怎麼匯入那些靜態檔案與hook的應用,現在回頭想想,講解那些action與filter該是怎麼用與interface,那些在codeX找就信手捻來的解釋,把每一段節錄出來,不讓看到這些字眼教大家直接去CodeX去搜尋更加直接。
後面是很想找StackOverflow上面wordpress 外掛開發的問題來探討與寫些自己的做法,不過總覺得這樣不夠意思,畢竟當初片名就是寫著外掛開發不是一百萬個為什麼,學習開發很容易,不過寫得很膩,真的。
Wordpress - Privacy
How to Add a Privacy Policy in WordPress
The Difference Between is_singular() and is_single()