Files
sage/lib/assets.php
Scott Walkinshaw 4467d41325 Improve Google Analytics conditional loading
The current logic for condtionally including the GA snippet is confusing
and bit inconsistent. In development you would see logging when the
snippet wasn't included but this wouldn't happen if you were a logged in
admin.

Now there's only two cases:

1. Production non admin user: GA snippet is loaded.
2. Anything else (development or admin user): log output
2015-01-20 23:35:01 -05:00

109 lines
3.5 KiB
PHP

<?php
namespace Roots\Sage\Assets;
/**
* Scripts and stylesheets
*
* Enqueue stylesheets in the following order:
* 1. /theme/dist/styles/main.css
*
* Enqueue scripts in the following order:
* 1. Latest jQuery via Google CDN (if enabled in config.php)
* 2. /theme/dist/scripts/modernizr.js
* 3. /theme/dist/scripts/main.js
*
* Google Analytics is loaded after enqueued scripts if:
* - An ID has been defined in config.php
* - You're not logged in as an administrator
*/
function asset_path($filename) {
if (WP_ENV === 'development') {
return get_template_directory_uri() . '/dist/' . $filename;
}
$manifest_path = get_template_directory() . '/dist/rev-manifest.json';
if (file_exists($manifest_path)) {
$manifest = json_decode(file_get_contents($manifest_path), true);
} else {
$manifest = [];
}
if (array_key_exists($filename, $manifest)) {
return get_template_directory_uri() . '/dist/' . $manifest[$filename];
}
}
function assets() {
wp_enqueue_style('sage_css', asset_path('styles/main.css'), false, null);
/**
* Grab Google CDN's latest jQuery with a protocol relative URL; fallback to local if offline
* jQuery & Modernizr load in the footer per HTML5 Boilerplate's recommendation: http://goo.gl/nMGR7P
* If a plugin enqueues jQuery-dependent scripts in the head, jQuery will load in the head to meet the plugin's dependencies
* To explicitly load jQuery in the head, change the last wp_enqueue_script parameter to false
*/
if (!is_admin() && current_theme_supports('jquery-cdn')) {
wp_deregister_script('jquery');
wp_register_script('jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js', [], null, true);
add_filter('script_loader_src', __NAMESPACE__ . '\\jquery_local_fallback', 10, 2);
}
if (is_single() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
wp_enqueue_script('modernizr', asset_path('scripts/modernizr.js'), [], null, true);
wp_enqueue_script('jquery');
wp_enqueue_script('sage_js', asset_path('scripts/main.js'), [], null, true);
}
add_action('wp_enqueue_scripts', __NAMESPACE__ . '\\assets', 100);
// http://wordpress.stackexchange.com/a/12450
function jquery_local_fallback($src, $handle = null) {
static $add_jquery_fallback = false;
if ($add_jquery_fallback) {
echo '<script>window.jQuery || document.write(\'<script src="' . get_template_directory_uri() . '/dist/scripts/jquery.js"><\/script>\')</script>' . "\n";
$add_jquery_fallback = false;
}
if ($handle === 'jquery') {
$add_jquery_fallback = true;
}
return $src;
}
add_action('wp_head', __NAMESPACE__ . '\\jquery_local_fallback');
/**
* Google Analytics snippet from HTML5 Boilerplate
*
* Cookie domain is 'auto' configured. See: http://goo.gl/VUCHKM
*/
function google_analytics() {
?>
<script>
<?php if (WP_ENV === 'production' && !current_user_can('manage_options')) : ?>
(function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]=
function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date;
e=o.createElement(i);r=o.getElementsByTagName(i)[0];
e.src='//www.google-analytics.com/analytics.js';
r.parentNode.insertBefore(e,r)}(window,document,'script','ga'));
<?php else: ?>
function ga() {
console.log('Google Analytics: ' + [].slice.call(arguments));
}
<?php endif; ?>
ga('create','<?= GOOGLE_ANALYTICS_ID; ?>','auto');ga('send','pageview');
</script>
<?php
}
if (GOOGLE_ANALYTICS_ID) {
add_action('wp_footer', __NAMESPACE__ . '\\google_analytics', 20);
}