Data protection, privacy, the GDPR, right to be forgotten, etc.

To this end, we have been doing a lot of work on GDPR and data protection issues. One of the fruits of this is our “data protection and privacy centre”. This has quite a number of useful links giving information on what data we have (and usually, don’t have, because we didn’t collect it in the first place), and what we do with it (and what we don’t do with it).

We want to assure all our users that we see being “best of breed” in this area as a priority, and that we are continuously and energetically pursuing that goal

David Anderson (lead developer)

The post Data protection, privacy, the GDPR, right to be forgotten, etc. appeared first on UpdraftPlusUpdraftPlus – Backup, restore and migration plugin for WordPress.

WP-Optimize to release new Minify feature

We are happy to share with you that WP-Optimize will soon be adding an all new feature to our popular WordPress optimization plugin. In an upcoming release, users will soon be able to use an all-new Minify feature that will help make their websites run even faster.

How does minification work?

The minify process works by removing all the unnecessary characters from a piece of code, such as line breaks, white spaces etc. The minified code still works exactly the same as it did before the minification process, but the files now take up less space due to the removal of unnecessary information. This process has proved to have been very popular when being used on scripts, stylesheets and and other components on your website which can benefit from faster loading times. The Minify feature will further reduce HTTP requests to help speed up your site. This works by merging CSS and Javascript files into a group of files and attempting to use as few of these files as possible.

Our new Minify feature will be simple to use and intuitive. Most users just need to set it to default settings and let it do it’s thing. This new feature will be launched soon, so be sure to keep an eye out for it in an upcoming release of WP-Optimize

 

The post WP-Optimize to release new Minify feature appeared first on UpdraftPlus. UpdraftPlus – Backup, restore and migration plugin for WordPress.

Powered by WPeMatico

How to integrate Slack reminder notification with WordPress

With so many different demands vying for your attention in modern life, it can be easy to lose track of the many important tasks you are supposed to carry out and hopefully be reminded of. After all, there is only so much a desk full of scribbled post-it notes can do to ensure you are reminded about something important, so there is a good chance you have forgotten about something recently. However, there is a way to get Slack to remind you of all these tasks as and when you require, and the good news is we are going to show you how to set it up!   

There can be a large number of things you may need Slack to remind you of. The who, what, when and why of a reminder is hugely important and can cover anything from setting a reminder of a meeting with your bank manager, submitting your travelling expenses on time or a reminder for a deadline of an important project coming up. The reminder example we will be using in this blog is setting up a “blog post Slack reminder” message. Though feel free to substitute this for any kind of reminder that is more appropriate to you and your situation.     

Given the importance of SEO, most people who run websites are aware of vital regularly updating and posting new blogs is. While the tasks needed to succeed at SEO are a closely guarded secret, we do know that regularly posting a new blog is a great way to move up the Google SEO ranking. As such, website owners may be interested in an app for Slack that will send a notification to your Slack channel if you have not posted a new article on your blog within the last 7 days. These reminders will hopefully help you manage your articles and blogs better and also help to remind you to publish them on time.

In this article, we show you how you can integrate Slack notification with your WordPress blog using an app you can create yourself.

Getting started – Create a Slack application

To get started, you first need to create an application within your Slack account. To do this, go to the Slack API page and hit the ‘Create New App’ button.

This will create a popup window. Complete your details requested and you will be redirected to a ”settings page”. In this settings page, click on the ‘Incoming Webhooks’ from the left section. Toggle this option to “On”.

Scroll down to the bottom and click on the ‘Request to Add New Webhook’ button. If you are not an Admin then you need to get admin approval to access this option.

Once the app is approved, click on the ‘Install APP’ from the left side menu. And then press the ‘Install App to Workspace’ button.

Choose the desired channel on the next page and click on the ‘Allow’ button. You will then be redirected to a page where you will get your Webhook URL. Copy this URL as you will require it shortly.

Send notification on Slack channel from WordPress

You are now ready to proceed as you have the Webhook URL and have also configured the Slack channel, where the notification will be sent. Next, you need to write a code that sends a POST request along with a message to the webhook URL. This webhook URL will automatically post the received message to the chosen Slack channel. 

So, let’s do some coding.

Calculate days when last article is posted

When sending a notification to the Slack channel, you first need to calculate days from when the last article was posted. The below code will go inside your active themes:functions.php file.

function get_daycount_of_last_blog_posted(){
   $args=array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => 1,       
    );  

    $datediff = 0;
    $blog_posts = new WP_Query( $args );
    if ( $blog_posts->have_posts() ) :
 
 while ( $blog_posts->have_posts() ) : $blog_posts->the_post();

   $datediff = time() - strtotime(get_the_date());
      endwhile;
        wp_reset_postdata();
    endif;

    if ($datediff) return round($datediff / (60 * 60 * 24));

   return $datediff;
}

This code and method will get the last added post from the WordPress database and calculate the days between when you requested it and when the last article was posted.

Send POST request to Webhook

WordPress provides a function wp_remote_post() that performs an HTTP request and receives the response. Using this method we will send our custom message to the webhook.

Create a file notification.php in the root directory of your WordPress project and add the below code to it.

require_once('wp-load.php');
$slack_webhook_url = 'YOUR_WEBHOOK_URL';
$last_blog_day_count = get_daycount_of_last_blog_posted();
if($last_blog_day_count > 5) {

 $msg = 'Hey team, our app found that we have not added new article on UpdraftPlus
 for more than 5 days. Please look into it.';

    // Prepare the data / payload to be posted to Slack
  $data = array(
        'payload'   => json_encode( array(
                "text" =>  $msg,
            )
        )
    );

    // Post our data via the slack webhook endpoint using wp_remote_post
  wp_remote_post( $slack_webhook_url, array(
            'method' => 'POST',
            'body' => $data,
        )
    );
}

This code will post a message to Webhook URL if a new article is not added for more than 5 days on your blog. As a result, you get a notification on your selected Slack channel.

Set cron on your server

Our goal is to create an automated system which will notify the team about this task on a specific Slack channel. Because of this, we created a PHP file in the root folder of the WordPress project. By setting cron with this file on your server, you can set up your Slack app to run automatically.

Setting cron on the server may differ on the basis of your hosting provider. For the sake of this tutorial, we will give an example on how to set cron on Media Temple web hosting’s CPanel.

Login to your CPanel. Select ‘Cron Jobs’ under the “Advanced” section.

On the next page, choose the ‘Once Per Day(0 0 * * *)’ option from the ‘Common Settings’ dropdown. This means the cron will execute the script once a day.

Finally, in the Command field add the below statement by adjusting your notification.php file path.

/usr/local/bin/php /home/xyz/public_html/notification.php


That’s it! 

By following this tutorial, you are now able to create your own Slack app for you and your team. This will certainly help everyone keep up to date with scheduled blogs and ensure you do not miss out on any important dates. 

The post How to integrate Slack reminder notification with WordPress appeared first on UpdraftPlus. UpdraftPlus – Backup, restore and migration plugin for WordPress.

Powered by WPeMatico

Easy Updates Manager 9.0.0 and 9.0.1 released

We are pleased to announce an updated version of Easy Updates Manager with the releases of 9.0.0 and 9.0.1. The new updates includes a range of new features, tweaks and fixes.

As part of the update you will see that we have developed the main admin user interface. This gives the user a much more clear and easier way to use and make the most of all the features of Easy Updates Manager. The update also lets Premium users check for unmaintained plugins, so there will be no nasty surprises when a plugin that you rely on stops updating and potentially becomes unsecured.

We recommend the update for all Easy Updates Manager users.

9.0.1

  • FIX: (Premium feature) UpdraftPlus will only take one backup during the auto-update process.
  • FIX: Update translations after an auto-update has completed.

9.0.0

  • FEATURE: Admin user interface has been cleaned up, providing more straightforward options.
  • FEATURE: (Premium) Check for unmaintained plugins.
  • TWEAK: Constants can now be used to disable the outdated browser warning (EUM_ENABLE_BROWSER_NAG), the WordPress version in the footer (EUM_ENABLE_WORDPRESS_FOOTER_VERSION), and the ratings prompt on the General screen (EUM_ENABLE_RATINGS_NAG).
  • FIX: Prevent Force Updates from deactivating plugins.
  • FIX: (Premium feature) UpdraftPlus will now take a backup during an auto-update
  • FIX: (Premium feature) Fix cron schedules so they are run at the correct time.

The post Easy Updates Manager 9.0.0 and 9.0.1 released appeared first on UpdraftPlus. UpdraftPlus – Backup, restore and migration plugin for WordPress.

Powered by WPeMatico

UpdraftPlus CCPA privacy notice

On January 1st 2020, the California Consumer Privacy Act (CCPA) introduced new data privacy rights for California residents – forcing companies that conduct business in the state of California to implement structural changes to their privacy programs. The new law is a response to the increasing role personal data plays in business practices and the personal privacy implications surrounding the collection, use, and protection of personal information.

Though UpdraftPlus may not necessarily meet the criteria necessary in order to comply with the CCPA law (1. Have $25 million or more in annual sales – 2. Buys, sells, or shares information on 50,000 or more individuals, households, or devices – 3. Derives more than half of our annual revenue from selling personal information), we have made every effort to meet and achieve CCPA compliance for the privacy rights of our California based customers. As such, we are providing this CCPA-specific privacy notice to supplement the information and disclosures already contained in our Data Protection and Privacy Centre. This notice applies only to individuals residing in California with an UpdraftPlus account from whom we collect personal information.

What is the CCPA?

The CCPA allows any California consumer to demand to see all the information a company has saved on them, as well as a full list of all the third parties that data is shared with. In addition, the California law allows consumers to sue companies if the privacy guidelines are violated, even if there is no breach.

Much like the GDPR law that was enacted in May 2018, many of the same rules on the use of customer data are represented in the CCPA. However the CCPA does takes a broader view than the GDPR of what constitutes private data.

How does CCPA differ from GDPR?

GDPR applies to the processing of all personal data, regardless of what that data is intended for or how it will be processed.

The CCPA is more specific regarding what kinds of data are protected and under what circumstances. While GDPR has strict user “opt-in” consent options before companies can access any of your data, CCPA only requires companies to supply the option to “opt-out” when user information is going to be actively sold or shared.

The CCPA does not provide the same protection to a wider range of user data types that the GDPR does. These include:

  • Data that is already legally available to the public
  • Medical information that’s protected under California’s Confidentiality of Medical Information Act (CMIA) or the federal Health Insurance Portability and Accountability Act (HIPPA)
  • Personal information covered by California’s Driver’s Privacy Protection Act

And other similar data sets.

UpdraftPlus does not sell personal information

The following categories of personal information have been defined by the CCPA. This information may have been collected and/or disclosed for a business purpose by ourselves in the last twelve months. The examples of the personal information provided in each category are taken from the CCPA and are included so you can better understand the specific information contained within a category. More information about the specific information UpdraftPlus gathers and how that information is used and processed can be found here.

 

Category We Collect We Sell
A. Identifiers Yes                                No                               
Examples: Name, alias, postal address, unique personal identifier, online identifier, internet protocol address, email address, account name, social security number, driver’s license number, passport number, or other similar identifiers.                                                              
B. Categories of personal information in Cal. Civ. Code 1798.80(e) Yes                                No                               
Examples: Name, signature, social security number, physical characteristics or description, address, telephone number, passport number, driver’s license or state identification card number, insurance policy number, education, employment, employment history, bank account number, credit card number, debit card number, or any other financial information, medical information, or health insurance information.                                                              
C. Characteristics of protected classifications under California or Federal law No                                N/A                               
Examples: Race or color, ancestry or national origin, religion or creed, age (over 40), mental or physical disability, sex (including gender and pregnancy, childbirth, breastfeeding or related medical conditions), sexual orientation, gender identity or expression, medical condition, genetic information, marital status, military and veteran status.                                                              
D. Commercial information Yes                                No                               
Examples: Records of personal property, products or services purchased, obtained, or considered, or other purchasing or consuming histories or tendencies.                                                              
E. Biometric information No                                N/A                               
Examples: Physiological, biological, or behavioral characteristics, including DNA, that can be used, singly or in combination with each other or with other identifying data, to establish individual identity, such as imagery of the iris, retina, fingerprint, face, hand, palm, vein patterns, and voice recordings, from which an identifier template, such as a faceprint, a minutiae template, or a voiceprint, can be extracted, and keystroke patterns or rhythms, gait patterns or rhythms, and sleep, health, or exercise data that contain identifying information.                                                              
F. Internet or other electronic network activity information Yes                                No                               
Examples: Browsing history, search history, and information regarding a consumer’s interaction with an internet website, application or advertisement.                                                              
G. Geolocation data Yes                                No
Example: Precise physical location.                                                              
H. Sensory information No                                N/A                               
Examples: Audio, electronic, visual, thermal, olfactory, or similar information.                                                              
I. Professional or employment-related information No                                N/A
Examples: Job application or resume information, past and current job history, and job performance information.                                                              
J. Non-Public education information (as defined in 20 U.S.C. 1232g; 34 C.F.R. Part 99) No                                N/A                               
Examples: Records that are directly related to a student maintained by an educational agency or institution or by a party acting for the agency or institution.                                                              
K. Inferences drawn from personal information No                                N/A
Examples: Consumer profiles reflecting a consumer’s preferences, characteristics, psychological trends, preferences, predispositions, behavior, attitudes, intelligence, abilities, and aptitudes.                                                              


Use of personal information

As the new CCPA has now come into force we wanted to clarify that UpdraftPlus meets the criteria necessary to be in accordance with the specific CCPA business and commercial purposes, as detailed below:

  1. Auditing related to a current interaction with you and concurrent transactions, including, but not limited to auditing compliance with this specification and other standards.
  2. Detecting security incidents, protecting against malicious, deceptive, fraudulent, or illegal activity, and prosecuting those responsible for that activity.
  3. Debugging to identify and repair errors that impair existing intended functionality.
  4. Short-term, transient use.
  5. Contracting with service providers to perform services on our behalf, including maintaining or servicing accounts, providing customer service, processing or fulfilling orders and transactions, verifying customer information, processing payments, providing advertising or marketing services, providing analytic services, or providing similar services on behalf of the business or service provider.
  6. Undertaking internal research for technological development and demonstration.
  7. Undertaking activities to verify or maintain the quality or safety of our services, and to improve, upgrade, or enhance our services.
  8. Otherwise enabling or effecting, directly or indirectly, a commercial transaction.
  9. For other purposes for which we provide specific notice at the time the information is collected.

UpdraftPlus’ collection and disclosure of personal information

In the last year UpdraftPlus have collected personal information from general sources including you, your use of our services, your devices, our affiliates, our vendors, and our service providers. More specific information about the personal information we collect is laid out in this in our GDPR and  Data Protection and Privacy Centre.

Your California privacy rights

If you are a California resident, the CCPA allows you to exercise the following rights. 

Right to know and access. You may submit a verifiable request for information regarding the: (1) categories of personal information collected or disclosed by us; (2) purposes for which categories of personal information are collected by us; (3) categories of sources from which we collect personal information; and (4) specific pieces of personal information we have collected about you during the past twelve months.

Right to Delete. Subject to certain exceptions, you have the option to delete personal information about you that we have collected from you.

Verification. Requests for access to or deletion of personal information are subject to our ability to reasonably verify your identity in light of the information requested and pursuant to relevant CCPA requirements, limitations, and regulations.

Right to Equal Service and Price. You have the right not to receive discriminatory treatment for the exercise of your CCPA privacy rights, subject to certain limitations.

Shine the Light. We do not rent, sell, or share your personal information with non affiliated companies for their direct marketing purposes, unless we have your permission.

Submit Requests. To exercise your rights under the CCPA, you can deactivate and purge your account (similar to the GDPR “right to erasure” – “right to be forgotten”) by sending us a customer support request under “This is a GDPR/CCPA-related query” in the “What kind of support request is this?” option. 

If you have any further questions or queries, please leave a comment below and we will get back to you as soon as possible.

The post UpdraftPlus CCPA privacy notice appeared first on UpdraftPlus. UpdraftPlus – Backup, restore and migration plugin for WordPress.

Powered by WPeMatico

How to localize and translate a WordPress plugin – an in depth guide for plugin developers

When developing a plugin, it’s always good idea to make it translation ready as it could additionally reach audiences who do not use English as their first language. If you were wondering how important a translation option is, you can check the repository and see that every single popular plugin is available for language localization. You will find this option is available with UpdraftPlus, MetaSlider, WP-Optimize, Contact Form 7 and WooCommerce, as well as many more. These are some of the most popular plugins available and are coded in a way that allows anyone to translate them easily into their native language.

The purpose of this blog is to demonstrate to our readers how they can code a plugin so that it will be localized and translated into any supported WordPress language. For example, if we wanted to translate a plugin into French, the following steps will allow plugin translation and also make it ready for all supported WordPress languages.

Getting Started

When creating a plugin, we should make sure that we load the plugin text domain. WordPress provides this function:

load_plugin_textdomain()

This code will load the plugin’s translated strings. It may seem a little confusing, but keep reading and we’ll explain how it works shortly.

First, let’s take a look at how to add this function to our plugin code. In your plugin folder, create a directory called ‘languages’. Next, add the below code to your plugin main file.

* Load plugin textdomain.
*/
function plugin_load_textdomain() {
load_plugin_textdomain( 'udp', false, basename( dirname( __FILE__ ) ) . '/languages/' );
}
add_action( 'init', 'plugin_load_textdomain' );

In the above code, we keep the first parameter (domain) as ‘udp’. We should keep this domain name as per our name of the plugin. The second parameter defaults to false. The third parameter is the path of our ‘languages’ directory. This code keeps our translation files ready on the WordPress initialization.

Use of __() and _e() Methods

As we are aiming to make our plugin available in all languages, we should wrap all our plugin text inside either:

__() or _e() functions.

It is very easy to use these methods. Both methods work exactly the same but there is a rule for using both.

In our plugin code, we normally have two types of text. The first is wrapped in HTML directly and the second is displayed using PHP echo function. Below are examples of both types:

Type 1

My Plugin Title

Type 2

The general rule is that if you are printing text using PHP echo then you should wrap text in the following code:

__()

If it is in HTML then use the code: _e().

The above code should be written in the following way:

and

As can be seen in the above examples, the second parameter was written as ‘udp’, which is our plugin text domain. By using this domain, it will allow us to later translate our text into any language. This is how other plugins make their plugins translation ready.

If you wish, you can check our plugin:

UpdraftPlus

If you search for the text domain ‘updraftplus’, you will see how our plugin’s text is wrapped inside __() and _e() functions.

Create a Sample Plugin

The next stage is to create a sample plugin with the some text so we can test our translations. First, create an ‘udp’ folder in your plugin directory. Inside this folder create the file: udp.php and the folder languages. Next, add the below code to the plugin file.

udp.php


Create the Translation Files

To generate our translation files, we will use the following translation editor software:

POEDIT

Translation files (.po and .mo) contain the string to translate and the translated string. While creating the .po file we need to save it in ‘{domain}-language code’ format. In this example, the file will be udp-fr_FR.po.

Next, install the POEDIT software on your system. This software is available for all platforms and can be installed on Windows, Linux or Mac.

Once installed, open POEDIT and go to File->New, where we will enter our language code in the window prompt.

Click on the ‘Save’ icon, after which, the file explorer will open. Head over to the plugins languages directory and save it as the following: udp-fr_FR.po.

Now we are able to add the French translation for our plugin text. To do so, click on the ‘Extract from sources’ section.

This will open a catalog properties popup. We now need to configure the three following tabs: Translation Properties, Source Paths and Source Keywords. In the Translation Properties tab, add our domain ‘udp’ as the project name. Source Paths will be our plugin folder and we will add ‘__ and _e’ inside Source Keywords.

If you have multiple folders inside the plugin, then we will need to choose each directory individually.

After selecting the plugin folder you should see ‘.’ in the Paths section. Repeat the same process for other folders inside your plugin directory if necessary.

Under the Source Keywords, click on the + icon and add ‘__’ and ‘_e’ as a keyword and click the OK button.

In the next window, under Source text, you will have all strings available to translate from your plugin. Choose the string one by one and add your French translation to the string.

Once you add all translations, click on the Save icon. This will automatically save all your string translation in your udp-ft_FR.po file. Your .po file will now contain the following code:

#: udp.php:24 udp.php:25
msgid "UDP Setting Page"
msgstr "Page de configuration UDP"

#: udp.php:37
msgid "My Plugin Title"
msgstr "Titre de mon plugin"

Test Our Plugin Translation

We have now completed the task of creating .po and .mo files for our plugin. Now it’s time to test our plugin and check the French language translation.

First, download our language file from the following address:

WordPress Language repository.

For the French language, the path is as follows:

French WordPress Language repository.
fr_FR.mo and fr_FR.po

Download files from this link and store it in the wp-content/languages directory. Create the ‘languages’ folder, if it does not already exist.

Next, we need to change the default language of our WordPress installation. Open the wp-config.php file and add the language as follows:

define('WPLANG', 'fr_FR');

Now if you go to the dashboard, your plugin should be displaying in the French language.

In conclusion

Creating a localized translation for your WordPress plugin can seem a little daunting and complicated at first. However the potential benefits of offering large non English speaking countries like Brazil, France and Germany your plugin in their native language can help open your plugin up to a whole new, appreciate audience. While it may seem like a lot of work, the rewards could be considerable.

The post How to localize and translate a WordPress plugin – an in depth guide for plugin developers appeared first on UpdraftPlus. UpdraftPlus - Backup, restore and migration plugin for WordPress.

Powered by WPeMatico