Easy to Understand Website Reports with WordPress, Google Analytics & Google Sheets
@1daywebsitech
Problem
Your client likes to know who visits his website but does not understand the typcial web analytics lingo like: "pageviews", "sessions", "bounce rate" and so on.
Solution? Create custom reports your client understands
The Steps to Set Up Web Analytics
Go to google.com/analytics/ and create a Google Analyics account (it's free, all you need is a Google account)
Clean and easy to understand settings page
Go to support.google.com/analytics and select "Get Started with Analytics"
Links to complete this slideshow:
https://wordpress.org/plugins/ga-google-analytics/
https://support.google.com/analytics/answer/1008015?hl=en&ref_topic=3544906
https://support.google.com/analytics#topic=3544906
https://www.blogmojo.de/opt-ins-und-opt-outs-in-wordpress-einbinden/
https://easyrechtssicher.de/opt-out-google-analytics/
https://wordpress.org/plugins/autodescription/
https://yoast.com/google-analytics-dashboards/
https://conceptcreative.club/wp-admin/options-general.php?page=ga-google-analytics
Possible Workflow
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2316824/woomulti-workflow.png)
Polylang & WooCommerce Integration:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2316775/slides-features-1.jpg)
How Complete?
Polylang & WooCommerce Integration:
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2316778/slides-features-2.jpg)
How Complete?
WooCommerce Pages Routing
Directing shoppers to WooCommerce Page in chosen language (Shop, Cart, Checkout, Terms, etc.
/**
* @desc Multilingual WooCommerce Pages Routing -
* Option One: Page Routing with default Shop Page slug from Permalinks Shop Base
* @author woomultilingual.com
* @return int $id
*/
// Woocommerce WooCommerce Pages Routing - Option Shop Base Slug
add_filter ( 'woocommerce_get_shop_page_id','woomulti_woocommerce_get_page_id' );
add_filter ( 'woocommerce_get_cart_page_id','woomulti_woocommerce_get_page_id' );
add_filter ( 'woocommerce_get_checkout_page_id','woomulti_woocommerce_get_page_id' );
add_filter ( 'woocommerce_get_terms_page_id','woomulti_woocommerce_get_page_id' );
add_filter ( 'woocommerce_get_myaccount_page_id','woomulti_woocommerce_get_page_id' );
function woomulti_woocommerce_get_page_id( $id ) {
if ( function_exists ( 'pll_get_post' ) ) {
return pll_get_post( $id );
}
return $id;
}
WooCommerce
Cart Page – Return to Shop & Continue Shopping Redirect
//Cart Page – Return to Shop & Continue Shopping Redirect
function woomulti_woocommerce_return_to_shop_redirect() {
if (function_exists ( 'pll_current_language' ) ) {
$currentlang = pll_current_language();
if ( $currentlang=="de" ) {
return site_url ( '/de/shop/' );
} elseif ( $currentlang=="fr" ){
return site_url ( '/fr/shop/' );
} else {
return get_permalink( woocommerce_get_page_id( 'shop' ) );
}
}
}
add_filter( 'woocommerce_return_to_shop_redirect', 'woomulti_woocommerce_return_to_shop_redirect' );
add_filter( 'woocommerce_continue_shopping_redirect', 'woomulti_woocommerce_return_to_shop_redirect' );
What is wpml-config.xml?
https://wpml.org/documentation/support/language-configuration-files/
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2316802/slides-wpml-config-1.jpg)
Admin Texts / wp_options
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2316812/slides-wpml-config-2.jpg)
Polylang fully supports WPML configuration files
Let's look at how this works
Goal:
Translating "Flat Rate" Label on the Cart Page
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319036/slides-flatrate-1.jpg)
WooCommerce Shipping Options
Flat Rate - Method Title
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319056/slides-flatrate-2.jpg)
WP Options
/wp-admin/options.php
woocommerce_flat_rate_settings
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319074/slides-flatrate-3.jpg)
Create XML File:
wpml-config.xml
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319079/slides-flatrate-4.jpg)
Save file in active theme directory
Polylang – Settings – Strings translation
New String named Flat Rate
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319103/slides-flatrate-5.jpg)
Polylang – Settings – Strings translation
Translate into available languages
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319122/slides-flatrate-6.jpg)
Cart Page
Correct Label (in French) showing up
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319130/slides-flatrate-7.jpg)
WPML Config file
All Standard Shipping Options
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319135/slides-shippingoptions.jpg)
WooCommerce Helper Plugins
WooCommerce Pay for Payment
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319160/slides-helper-1.jpg)
Credit Card Charge – WooCommerce for Stripe
WooCommerce Helper Plugins
WooCommerce Pay for Payment
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319170/slides-helper-2.jpg)
Don't know the settings name? Use your browser's "Inspect Element"
WooCommerce Helper Plugins
WooCommerce Pay for Payment
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319175/slides-helper-3.jpg)
Add correct key name to Stripe for WooCommerce settings:
WooCommerce Helper Plugins
WooChimp Subscribe Widget
Last Name, First Name are dynamic fields
Strings from nested options arrays
Start with an option dump:
var_dump ( get_option('woochimp_options') )
WooCommerce Helper Plugins
WooChimp Subscribe Widget
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319229/slides-helper-5.jpg)
What we need is
the array:
woochimp_widget_fields,
with key 1 and key 2
WooCommerce Helper Plugins
WooChimp Subscribe Widget
<key name="woochimp_options">
<key name="woochimp_widget_fields">
<key name="1">
<key name="name" />
</key>
<key name="2">
<key name="name" />
</key>
</key>
</key>
Complete nested keys for wpml-config.xml
WooCommerce
Product Attributes
Creating Variable Products (for filtering)
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2319280/slides-attributes-1.jpg)
WooCommerce – Product Attributes
Custom function for functions.php
/**
* @desc Register WooCommmerce Product Attributes with Polylang
* @author woomultilingual.com
*/
add_action( 'init', 'woomulti_register_product_attributes', 11, 2 );
function woomulti_register_product_attributes() {
// Global variables to interact with both Polylang and WooCommerce
global $polylang, $woocommerce;
// Quit if Polylang or WooCommerce are not activated and ready
if ( !$polylang || !$woocommerce ) {
return false;
}
// Get the product attributes from WooCommerce
$product_attributes = wc_get_attribute_taxonomies();
// In Polylang Settings - String Translation you can group entries
$group = __( 'Product Attributes' );
// Get taxonomies already ready for translation by Polylang
$taxonomies = $polylang->model->get_translated_taxonomies();
// Create array to hold all product attributes as WooCommerce taxonomies
$attributes = array();
foreach ( $product_attributes as $product_attribute ) {
// Each product attribute label will be registered as a string in Polylang
pll_register_string ( $product_attribute->attribute_label, $product_attribute->attribute_label, $group );
//Add each attribute name (not the label) to the taxonomies array and adding "pa_" in front
$attributes[] = substr_replace( $product_attribute->attribute_name, 'pa_', 0, 0);
}
// Merge the product attributes with the existing taxonomies
$taxonomies = array_merge ( $taxonomies, $attributes );
// Adding array to Polylang's filter 'pll_get_taxonomies' so its values are available for translation
add_filter( 'pll_get_taxonomies', function () use ( $taxonomies ) { return $taxonomies; } );
}
add_filter( 'woocommerce_attribute_label', 'woomulti_translate_attribute_label' );
function woomulti_translate_attribute_label ( $label ) {
return pll__( $label );
}
WooCommerce
Product Attributes
Polylang - Strings translation
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2322141/slides-attributes-2.jpg)
WooCommerce
Product Attributes
Activate taxonomies
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344677/slides-attributes-3.jpg)
WooCommerce
Product Attributes
Configuring Terms
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344683/slides-attributes-4.jpg)
WooCommerce
Product Attributes
Translating each term
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344687/slides-attributes-5.jpg)
WooCommerce
Product Attributes
Select attribute - WooCommerce product
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344688/slides-attributes-6.jpg)
WooCommerce
Product Attributes
Product variations on frontend
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344695/slides-attributes-7.jpg)
WooCommerce
Product Attributes
YITH Ajax Product Filter Widget
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344697/slides-attributes-8.jpg)
WooCommerce
Product Attributes
YITH Ajax Product Filter Widget - Frontend
![](https://s3.amazonaws.com/media-p.slid.es/uploads/460598/images/2344699/slides-attributes-9.jpg)
Questions?
@woomultilingual
Easy to Understand Website Reports with WordPress, Google Analytics & Google Sheets
By onedaywebsite
Easy to Understand Website Reports with WordPress, Google Analytics & Google Sheets
Easy to Understand Website Reports with WordPress, Google Analytics & Google Sheets
- 872