Post Status Excerpt (No. 6) – Scope Creep, Full Site Editing • Post Status[] – 1; } /* Disable tracking if the opt-out cookie exists. */ if ( __gtagTrackerIsOptedOut() ) { window[disableStr] = true; } /* Opt-out function */ function __gtagTrackerOptout() { document.cookie = disableStr + ‘=true; expires=Thu, 31 Dec 2099 23:59:59 UTC; path=/’; window[disableStr] = true; } if ( ‘undefined’ === typeof gaOptout ) { function gaOptout() { __gtagTrackerOptout(); } } window.dataLayer = window.dataLayer || []; if ( mi_track_user ) { function __gtagTracker() {dataLayer.push( arguments );} __gtagTracker( ‘js’, new Date() ); __gtagTracker( ‘set’, { ‘developer_id.dZGIzZG’ : true, ‘dimension1’ : ‘post’,’dimension2′ : ‘false’,’dimension3′ : ‘David Bisset’,’dimension4′ : ‘2021-04-15T16:53:09-05:00′,’dimension5’ : ‘ok’, }); __gtagTracker( ‘config’, ‘UA-37840849-1’, { forceSSL:true, } ); window.gtag = __gtagTracker; ( function () { /* https://developers.google.com/analytics/devguides/collection/analyticsjs/ */ /* ga and __gaTracker compatibility shim. */ var noopfn = function () { return null; }; var newtracker = function () { return new Tracker(); }; var Tracker = function () { return null; }; var p = Tracker.prototype; p.get = noopfn; p.set = noopfn; p.send = function (){ var args = Array.prototype.slice.call(arguments); args.unshift( ‘send’ ); __gaTracker.apply(null, args); }; var __gaTracker = function () { var len = arguments.length; if ( len === 0 ) { return; } var f = arguments[len – 1]; if ( typeof f !== ‘object’ || f === null || typeof f.hitCallback !== ‘function’ ) { if ( ‘send’ === arguments[0] ) { var hitConverted, hitObject = false, action; if ( ‘event’ === arguments[1] ) { if ( ‘undefined’ !== typeof arguments[3] ) { hitObject = { ‘eventAction’: arguments[3], ‘eventCategory’: arguments[2], ‘eventLabel’: arguments[4], ‘value’: arguments[5] ? arguments[5] : 1, } } } if ( typeof arguments[2] === ‘object’ ) { hitObject = arguments[2]; } if ( typeof arguments[5] === ‘object’ ) { Object.assign( hitObject, arguments[5] ); } if ( ‘undefined’ !== typeof ( arguments[1].hitType ) ) { hitObject = arguments[1]; } if ( hitObject ) { action = ‘timing’ === arguments[1].hitType ? ‘timing_complete’ : hitObject.eventAction; hitConverted = mapArgs( hitObject ); __gtagTracker( ‘event’, action, hitConverted ); } } return; } function mapArgs( args ) { var gaKey, hit = {}; var gaMap = { ‘eventCategory’: ‘event_category’, ‘eventAction’: ‘event_action’, ‘eventLabel’: ‘event_label’, ‘eventValue’: ‘event_value’, ‘nonInteraction’: ‘non_interaction’, ‘timingCategory’: ‘event_category’, ‘timingVar’: ‘name’, ‘timingValue’: ‘value’, ‘timingLabel’: ‘event_label’, }; for ( gaKey in gaMap ) { if ( ‘undefined’ !== typeof args[gaKey] ) { hit[gaMap[gaKey]] = args[gaKey]; } } return hit; } try { f.hitCallback(); } catch ( ex ) { } }; __gaTracker.create = newtracker; __gaTracker.getByName = newtracker; __gaTracker.getAll = function () { return []; }; __gaTracker.remove = noopfn; __gaTracker.loaded = true; window[‘__gaTracker’] = __gaTracker; } )(); } else { console.log( “” ); ( function () { function __gtagTracker() { return null; } window[‘__gtagTracker’] = __gtagTracker; window[‘gtag’] = __gtagTracker; } )(); } ]]> -1; } function monsterinsights_forms_record_conversion( event ) { var monsterinsights_form_conversion_id = event.target.id; var monsterinsights_form_action = event.target.getAttribute(“miforms-action”); if ( monsterinsights_form_conversion_id && ! monsterinsights_form_action ) { document.getElementById(monsterinsights_form_conversion_id).setAttribute(“miforms-action”, “submitted”); __gtagTracker(‘event’, ‘conversion’, { event_category: ‘form’, event_label: monsterinsights_form_conversion_id, value: 1, }); } } /* Attach the events to all clicks in the document after page and GA has loaded */ function monsterinsights_forms_load() { if ( typeof(__gaTracker) !== ‘undefined’ && __gaTracker && __gaTracker.hasOwnProperty( “loaded” ) && __gaTracker.loaded == true ) { var __gaFormsTrackerWindow = window; if ( __gaFormsTrackerWindow.addEventListener ) { __gaFormsTrackerWindow.addEventListener( “load”, monsterinsights_forms_record_impression, false ); } else { if ( __gaFormsTrackerWindow.attachEvent ) { __gaFormsTrackerWindow.attachEvent(“onload”, monsterinsights_forms_record_impression ); } } } else if ( typeof(__gtagTracker) !== ‘undefined’ && __gtagTracker ) { var __gtagFormsTrackerWindow = window; if ( __gtagFormsTrackerWindow.addEventListener ) { __gtagFormsTrackerWindow.addEventListener( “load”, monsterinsights_forms_record_impression, false ); } else { if ( __gtagFormsTrackerWindow.attachEvent ) { __gtagFormsTrackerWindow.attachEvent(“onload”, monsterinsights_forms_record_impression ); } } } else { setTimeout(monsterinsights_forms_load, 200); } } /* Custom Ninja Forms impression tracking */ if (window.jQuery) { jQuery(document).on( ‘nfFormReady’, function( e, layoutView ) { var label = layoutView.el; label = label.substring(1, label.length); label = label.split(‘-‘).slice(0,3).join(‘-‘); __gtagTracker(‘event’, ‘impression’, { event_category: ‘form’, event_label: label, value: 1, non_interaction: true }); }); } /* Custom Bloom Form tracker */ function monsterinsights_add_bloom_forms_ids() { var bloom_forms = document.querySelectorAll( ‘.et_bloom_form_content form’ ); if ( bloom_forms.length > 0 ) { for ( var i = 0; i < bloom_forms.length; i++ ) { if ( '' === bloom_forms[i].id ) { var form_parent_root = monsterinsights_find_parent_with_class( bloom_forms[i], 'et_bloom_optin' ); if ( form_parent_root ) { var classes = form_parent_root.className.split( ' ' ); for ( var j = 0; j = 0 ) { return element.parentNode; } else { return monsterinsights_find_parent_with_class( element.parentNode, className ); } } return false; } monsterinsights_forms_load(); ]]>

This week David and Cory talk about an upcoming Post Status webinar on scope creep with Natasha Golinsky, and Full-Site Editing in WordPress.

In this episode of Post Status Excerpt, David Bisset and Cory Miller talk about some upcoming Post Status webinars. One will feature Natasha Golinsky from On Purpose Projects. (You can RSVP here.) Natasha has a great take on scope creep and what she has done to obliterate it. WordPress freelancers and agencies live and die by setting their project estimates on target, so this is really valuable information in that line of work.

Also covered: David touches on the latest Full Site Editing news.

Every week Post Status Excerpt will brief you on important WordPress news — in about 15 minutes or less! Learn what’s new in WordPress in a flash.

Mentioned in the show:

envelope Post Status Excerpt (No. 6) design tipsGrab the Newsletter

= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find(‘#gform_wrapper_3’);var is_confirmation = jQuery(this).contents().find(‘#gform_confirmation_wrapper_3’).length > 0;var is_redirect = contents.indexOf(‘gformRedirect(){‘) >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery(‘html’).css(‘margin-top’), 10) + parseInt(jQuery(‘body’).css(‘margin-top’), 10) + 100;if(is_form){jQuery(‘#gform_wrapper_3’).html(form_content.html());if(form_content.hasClass(‘gform_validation_error’)){jQuery(‘#gform_wrapper_3’).addClass(‘gform_validation_error’);} else {jQuery(‘#gform_wrapper_3’).removeClass(‘gform_validation_error’);}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery(‘#gform_wrapper_3’).offset().top – mt); }, 50 );if(window[‘gformInitDatepicker’]) {gformInitDatepicker();}if(window[‘gformInitPriceFields’]) {gformInitPriceFields();}var current_page = jQuery(‘#gform_source_page_number_3’).val();gformInitSpinner( 3, ‘https://cdn.poststatus.com/wp-content/plugins/gravityforms/images/spinner.gif’ );jQuery(document).trigger(‘gform_page_loaded’, [3, current_page]);window[‘gf_submitting_3’] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find(‘.GF_AJAX_POSTBACK’).html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery(‘#gform_wrapper_3’).replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery(‘#gf_3’).offset().top – mt);jQuery(document).trigger(‘gform_confirmation_loaded’, [3]);window[‘gf_submitting_3’] = false;}, 50);}else{jQuery(‘#gform_3’).append(contents);if(window[‘gformRedirect’]) {gformRedirect();}}jQuery(document).trigger(‘gform_post_render’, [3, current_page]);} );} );]]>

star Post Status Excerpt (No. 6) design tips Featured WordPress Job Openings

{“cart_token”:””,”hash”:””,”cart_data”:””}

3) { var type = ‘event’; var eventName = ‘timing_complete’; fieldsArray = { event_category : ‘Scroll Depth’, name : action, event_label : label, value : timing, non_interaction: 1 }; MonsterInsightsObject.sendEvent( type, eventName, fieldsArray ); } } function calculateMarks(docHeight) { return { ‘25%’ : parseInt(docHeight * 0.25, 10), ‘50%’ : parseInt(docHeight * 0.50, 10), ‘75%’ : parseInt(docHeight * 0.75, 10), /* Cushion to trigger 100% event in iOS */ ‘100%’: docHeight – 5 }; } function checkMarks(marks, scrollDistance, timing) { /* Check each active mark */ $.each(marks, function(key, val) { if ( $.inArray(key, cache) === -1 && scrollDistance >= val ) { sendEvent(‘Percentage’, key, scrollDistance, timing); cache.push(key); } }); } function rounded(scrollDistance) { /* Returns String */ return (Math.floor(scrollDistance/250) * 250).toString(); } function init() { bindScrollDepth(); } /* * Public Methods */ /* Reset Scroll Depth with the originally initialized options */ $.scrollDepth.reset = function() { cache = []; lastPixelDepth = 0; $window.off(‘scroll.scrollDepth’); bindScrollDepth(); }; /* Add DOM elements to be tracked */ $.scrollDepth.addElements = function(elems) { if (typeof elems == “undefined” || !$.isArray(elems)) { return; } $.merge(options.elements, elems); /* If scroll event has been unbound from window, rebind */ if (!scrollEventBound) { bindScrollDepth(); } }; /* Remove DOM elements currently tracked */ $.scrollDepth.removeElements = function(elems) { if (typeof elems == “undefined” || !$.isArray(elems)) { return; } $.each(elems, function(index, elem) { var inElementsArray = $.inArray(elem, options.elements); var inCacheArray = $.inArray(elem, cache); if (inElementsArray != -1) { options.elements.splice(inElementsArray, 1); } if (inCacheArray != -1) { cache.splice(inCacheArray, 1); } }); }; /* * Throttle function borrowed from: * Underscore.js 1.5.2 * http://underscorejs.org * (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Underscore may be freely distributed under the MIT license. */ function throttle(func, wait) { var context, args, result; var timeout = null; var previous = 0; var later = function() { previous = new Date; timeout = null; result = func.apply(context, args); }; return function() { var now = new Date; if (!previous) previous = now; var remaining = wait – (now – previous); context = this; args = arguments; if (remaining

Source