Major Update: Event Espresso 4.3

This release brings many improvements to existing core features and a few new features, such as duplicate events, iCal integration, batch email/newsletter system, registration form and payment system optimizations.

An Important Calendar Update is Available!
If you use the 1-click update feature, please be sure to update the EE4 Calendar to 3.1 BEFORE updating the EE4 core plugin.

New Features

  • Duplicate Event
  • Ticket Required Option
  • Added iCal Integration
  • Drag-n-drop Answer Values
  • Order Questions by Question Group
  • Question Editor Style Changes (thanks to Matt Van Andel)
  • Re-order Datetimes in Ticket Editor and Single Page Checkout
  • New Hooks and Filters for Developers Added to the Registration Process

Fixes

  • Gateways
  • Messages System
  • Migration Issues
  • Miscellaneous Spelling Errors

ImageSupport for “Ticket Bundles” & “Graduated Pricing”
Starting with Event Espresso 4.3 you can offer discount pricing and/or graduated pricing based on ticket quantities.

  • Ticket Bundles
    Can be used to set a per ticket price, based on a pre-defined quantity of tickets. This article shows how to create a ticket bundle where you can set a lower price per ticket when purchased in a bundle.
  • Graduated Ticket Pricing
    Can be used to set a per ticket price, based on a quantity range of tickets, similar to a tiered pricing structure. This article shows how to set graduated ticket pricing where you can set a lower price per ticket for larger quantity ticket purchases.

Messages System Changes/Fixes
We’ve improved the Custom Template System, added a “Newsletter” Message Type for sending batch emails, and made a couple of minor updates.

  • Message Type – Newsletter message type
  • Messages Admin – Updated to implement a new Custom Template creation/edit process
  • Event Editor – Modify Messages metabox in event editor to use new custom template system
  • Messages System – Default ‘From’ Email shortcode changed to [CO_FORMATTED_EMAIL]

acf-home-panel-fieldsAdvanced Custom Fields Integration
Fully customize WordPress edit screens with powerful custom fields, using the Advanced Custom Fields plugin for WordPress. We’ve added several new hooks and filters throughout the Single Page Checkout system to give developers the ability to integrate with this awesome plugin.

Payment Gateway Fixes
This time around we’ve spent some time making sure the payment processing features work better, faster, and are easier to understand for your customers. We’ve also added better support for tracking partial payments.

  • Send address fields to Mijireh
  • Show failed payments in payment response
  • Thank You page now uses the WordPress Heartbeat API to automatically display payment status updates
  • Fix for Single Page Checkout so it displays the correct amount owed based on when a payment has already been entered into the system

Related Articles

6 thoughts on “Major Update: Event Espresso 4.3

  1. Great news!

    However the links above “developers corner” etc. does not work (404) 🙂
    Also, It would be soooooooooooooooo great and much easier for us developer if you had a fairly complete list of these wonderful hooks and filters you keep adding in! A section in the documentation would be absolutely friggin swhunging fraggletasticly wonderful!
    You don’t need to provide example of each one but a list with the hooks name and parameters (and type of those parameters) would be so friggin helpful I’m all but weeping of joy at the mere idea!

    Thanks

    • Hi Jonathan, Sorry about that, and thanks for pointing it out. It was scheduled for 12pm today (MST I believe), but I have brought it forward so it should be accessible now. We do have http://code.eventespresso.com/ which is a script generated list of functions etc. It’s not perfect, but may assist in the interim. While a search in the code would reveal the filters and hooks, I’ll add a request for more formal documentation in the future.

  2. Hey Jonathan,

    Keep your eyes on developer.eventespresso.com. We are using that as the space to created developer centric documentation and are slowly adding to it over time.

    In the meantime, we follow a consistent naming schema for all our filters and actions. All our filters are prefixed with “FHEE” and all our actions are prefixed with “AHEE”. Most IDE’s or text editors have fairly good search tools, so you can use that to generate a list of all actions and filters available in the code.

    Hope that helps!

Share a Reply or Comment

Your email address will not be published.

Need help with Event Espresso? Create a support post in our support forums

Event Espresso
[gravityform id=116 title=false description=false]
<script type="text/javascript">var gform;gform||(document.addEventListener("gform_main_scripts_loaded",function(){gform.scriptsLoaded=!0}),window.addEventListener("DOMContentLoaded",function(){gform.domLoaded=!0}),gform={domLoaded:!1,scriptsLoaded:!1,initializeOnLoaded:function(o){gform.domLoaded&&gform.scriptsLoaded?o():!gform.domLoaded&&gform.scriptsLoaded?window.addEventListener("DOMContentLoaded",o):document.addEventListener("gform_main_scripts_loaded",o)},hooks:{action:{},filter:{}},addAction:function(o,n,r,t){gform.addHook("action",o,n,r,t)},addFilter:function(o,n,r,t){gform.addHook("filter",o,n,r,t)},doAction:function(o){gform.doHook("action",o,arguments)},applyFilters:function(o){return gform.doHook("filter",o,arguments)},removeAction:function(o,n){gform.removeHook("action",o,n)},removeFilter:function(o,n,r){gform.removeHook("filter",o,n,r)},addHook:function(o,n,r,t,i){null==gform.hooks[o][n]&&(gform.hooks[o][n]=[]);var e=gform.hooks[o][n];null==i&&(i=n+"_"+e.length),gform.hooks[o][n].push({tag:i,callable:r,priority:t=null==t?10:t})},doHook:function(n,o,r){var t;if(r=Array.prototype.slice.call(r,1),null!=gform.hooks[n][o]&&((o=gform.hooks[n][o]).sort(function(o,n){return o.priority-n.priority}),o.forEach(function(o){"function"!=typeof(t=o.callable)&&(t=window[t]),"action"==n?t.apply(null,r):r[0]=t.apply(null,r)})),"filter"==n)return r[0]},removeHook:function(o,n,t,i){var r;null!=gform.hooks[o][n]&&(r=(r=gform.hooks[o][n]).filter(function(o,n,r){return!!(null!=i&&i!=o.tag||null!=t&&t!=o.priority)}),gform.hooks[o][n]=r)}});</script> <div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_116' ><form method='post' enctype='multipart/form-data' id='gform_116' action='/2014/08/major-update-event-espresso-4-3/' novalidate> <div class='gform_body gform-body'><ul id='gform_fields_116' class='gform_fields top_label form_sublabel_below description_below'><li id="field_116_5" class="gfield gfield_contains_required field_sublabel_hidden_label field_description_below gfield_visibility_visible" ><label class='gfield_label gfield_label_before_complex' >What is your first name?<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_116_5'> <span id='input_116_5_3_container' class='name_first' > <input type='text' name='input_5.3' id='input_116_5_3' value='' aria-required='true' placeholder='First name' /> <label for='input_116_5_3' class='hidden_sub_label screen-reader-text'>First name</label> </span> </div></li><li id="field_116_1" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_116_1' >What is your email address so we can follow up with you?<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_text'><input name='input_1' id='input_116_1' type='text' value='' class='medium' placeholder='hello@example.com' aria-required="true" aria-invalid="false" /> </div></li><li id="field_116_2" class="gfield gfield_contains_required field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_116_2' >Tell us about your concerns below<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_textarea'><textarea name='input_2' id='input_116_2' class='textarea medium' placeholder='What kind of events are you planning?' aria-required="true" aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id="field_116_6" class="gfield field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label gfield_label_before_complex' >GDPR Agreement</label><div class='ginput_container ginput_container_checkbox'><ul class='gfield_checkbox' id='input_116_6'><li class='gchoice gchoice_116_6_1'> <input class='gfield-choice-input' name='input_6.1' type='checkbox' value='I consent to have this website store my submitted information so they can respond to my inquiry.' id='choice_116_6_1' /> <label for='choice_116_6_1' id='label_116_6_1'>I consent to have this website store my submitted information so they can respond to my inquiry.</label> </li></ul></div></li><li id="field_116_3" class="gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input name='input_3' id='input_116_3' type='hidden' class='gform_hidden' aria-invalid="false" value='' /></div></li><li id="field_116_4" class="gfield gform_hidden field_sublabel_below field_description_below gfield_visibility_visible" ><div class='ginput_container ginput_container_text'><input name='input_4' id='input_116_4' type='hidden' class='gform_hidden' aria-invalid="false" value='https://eventespresso.com/2014/08/major-update-event-espresso-4-3/' /></div></li><li id="field_116_7" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" ><label class='gfield_label' for='input_116_7' >Phone</label><div class='ginput_container'><input name='input_7' id='input_116_7' type='text' value='' autocomplete='new-password'/></div><div class='gfield_description' id='gfield_description_116_7'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_116' class='gform_button button' value='Send my message' onclick='if(window["gf_submitting_116"]){return false;} if( !jQuery("#gform_116")[0].checkValidity || jQuery("#gform_116")[0].checkValidity()){window["gf_submitting_116"]=true;} ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_116"]){return false;} if( !jQuery("#gform_116")[0].checkValidity || jQuery("#gform_116")[0].checkValidity()){window["gf_submitting_116"]=true;} jQuery("#gform_116").trigger("submit",[true]); }' /> <input type='hidden' class='gform_hidden' name='is_submit_116' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='116' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_116' value='WyJbXSIsIjBiNjdjZjkyMDUzOWUxOWY5Y2NiZjIwMzM4YjA1Mjk4Il0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_116' id='gform_target_page_number_116' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_116' id='gform_source_page_number_116' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_2" name="ak_js" value="166"/><script>document.getElementById( "ak_js_2" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div>