Version Description
Download this release
Release Info
Developer | mordauk |
Plugin | Easy Digital Downloads |
Version | 2.7.7 |
Comparing to | |
See all releases |
Code changes from version 2.7.6 to 2.7.7
- assets/js/edd-ajax.js +4 -4
- assets/js/edd-ajax.min.js +1 -1
- easy-digital-downloads.php +3 -3
- includes/EDD_SL_Plugin_Updater.php +5 -5
- includes/admin/customers/customers.php +1 -1
- includes/admin/import/class-batch-import-payments.php +6 -0
- includes/checkout/template.php +2 -2
- includes/class-edd-html-elements.php +1 -1
- includes/class-edd-stats.php +1 -1
- includes/country-functions.php +1 -1
- includes/discount-functions.php +5 -0
- includes/process-purchase.php +9 -2
- includes/shortcodes.php +9 -2
- includes/user-functions.php +17 -1
- readme.txt +77 -43
assets/js/edd-ajax.js
CHANGED
@@ -312,7 +312,7 @@ jQuery(document).ready(function ($) {
|
|
312 |
|
313 |
$(this).val(edd_global_vars.purchase_loading);
|
314 |
|
315 |
-
$(this).after('<span class="edd-
|
316 |
|
317 |
var data = {
|
318 |
action : 'edd_process_checkout_login',
|
@@ -328,7 +328,7 @@ jQuery(document).ready(function ($) {
|
|
328 |
window.location = edd_scripts.checkout_page;
|
329 |
} else {
|
330 |
$('#edd_login_fields input[type=submit]').val(complete_purchase_val);
|
331 |
-
$('.edd-
|
332 |
$('.edd_errors').remove();
|
333 |
$('#edd-user-login-submit').before(data);
|
334 |
}
|
@@ -377,7 +377,7 @@ jQuery(document).ready(function ($) {
|
|
377 |
|
378 |
$(this).prop( 'disabled', true );
|
379 |
|
380 |
-
$(this).after('<span class="edd-
|
381 |
|
382 |
$.post(edd_global_vars.ajaxurl, $('#edd_purchase_form').serialize() + '&action=edd_process_checkout&edd_ajax=true', function(data) {
|
383 |
if ( $.trim(data) == 'success' ) {
|
@@ -386,7 +386,7 @@ jQuery(document).ready(function ($) {
|
|
386 |
$(eddPurchaseform).submit();
|
387 |
} else {
|
388 |
$('#edd-purchase-button').val(complete_purchase_val);
|
389 |
-
$('.edd-
|
390 |
$('.edd_errors').remove();
|
391 |
$('.edd-error').hide();
|
392 |
$('#edd_purchase_submit').before(data);
|
312 |
|
313 |
$(this).val(edd_global_vars.purchase_loading);
|
314 |
|
315 |
+
$(this).after('<span class="edd-loading-ajax edd-loading"></span>');
|
316 |
|
317 |
var data = {
|
318 |
action : 'edd_process_checkout_login',
|
328 |
window.location = edd_scripts.checkout_page;
|
329 |
} else {
|
330 |
$('#edd_login_fields input[type=submit]').val(complete_purchase_val);
|
331 |
+
$('.edd-loading-ajax').remove();
|
332 |
$('.edd_errors').remove();
|
333 |
$('#edd-user-login-submit').before(data);
|
334 |
}
|
377 |
|
378 |
$(this).prop( 'disabled', true );
|
379 |
|
380 |
+
$(this).after('<span class="edd-loading-ajax edd-loading"></span>');
|
381 |
|
382 |
$.post(edd_global_vars.ajaxurl, $('#edd_purchase_form').serialize() + '&action=edd_process_checkout&edd_ajax=true', function(data) {
|
383 |
if ( $.trim(data) == 'success' ) {
|
386 |
$(eddPurchaseform).submit();
|
387 |
} else {
|
388 |
$('#edd-purchase-button').val(complete_purchase_val);
|
389 |
+
$('.edd-loading-ajax').remove();
|
390 |
$('.edd_errors').remove();
|
391 |
$('.edd-error').hide();
|
392 |
$('#edd_purchase_submit').before(data);
|
assets/js/edd-ajax.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
function edd_load_gateway(a){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var b=edd_scripts.ajaxurl;b+=b.indexOf("?")>0?"&":"?",b=b+"payment-mode="+a,jQuery.post(b,{action:"edd_load_gateway",edd_payment_mode:a},function(b){jQuery("#edd_purchase_form_wrap").html(b),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[a])})}var edd_scripts;jQuery(document).ready(function(a){function c(){var c,b=a(this),d="undefined"!=typeof edd_global_vars;if("card_state"!=b.attr("id")){var e={action:"edd_get_shop_states",country:b.val(),field_name:"card_state"};a.ajax({type:"POST",data:e,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){c=d?a("#edd_purchase_form"):b.closest("form");var f='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==a.trim(e)){var g='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';c.find(f).replaceWith(g)}else c.find(f).replaceWith(e);d&&a("body").trigger("edd_cart_billing_address_updated",[e])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){d&&recalculate_taxes()})}else d&&recalculate_taxes();return!1}if(a(".edd-no-js").hide(),a("a.edd-add-to-cart").addClass("edd-has-js"),a("body").on("click.eddRemoveFromCart",".edd-remove-from-cart",function(b){var c=a(this),d=c.data("cart-item"),e=c.data("action"),f=c.data("download-id"),g={action:e,cart_item:d};return a.ajax({type:"POST",data:g,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){if(b.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(d,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;a(".edd-cart").each(function(){a(this).find("[data-cart-item='"+d+"']").parent().remove()}),a(".edd-cart").each(function(){var b=0;a(this).find("[data-cart-item]").each(function(){a(this).attr("data-cart-item",b),b+=1})}),a("[id^=edd_purchase_"+f+"]").length&&(a("[id^=edd_purchase_"+f+"] .edd_go_to_checkout").hide(),a("[id^=edd_purchase_"+f+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&a("[id^=edd_purchase_"+f+"] .edd_download_quantity_wrapper").show()),a("span.edd-cart-quantity").text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity]),edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal span").html(b.subtotal),a(".cart_item.edd_cart_tax span").html(b.tax)),a(".cart_item.edd_total span").html(b.total),0==b.cart_quantity&&(a(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),a(".edd-cart").each(function(){var b=a(this).parent();b&&(b.addClass("cart-empty"),b.removeClass("cart-not-empty")),a(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),a("body").trigger("edd_cart_item_removed",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("body").on("click.eddAddToCart",".edd-add-to-cart",function(b){b.preventDefault();var c=a(this),d=c.closest("form");c.prop("disabled",!0);var f=(c.find(".edd-loading"),c.closest("div"));c.attr("data-edd-loading","");var d=c.parents("form").last(),g=c.data("download-id"),h=c.data("variable-price"),i=c.data("price-mode"),j=[],k=!0;if("yes"==h)if(d.find(".edd_price_option_"+g+'[type="hidden"]').length>0)j[0]=a(".edd_price_option_"+g,d).val(),d.find(".edd-submit").data("price")&&d.find(".edd-submit").data("price")>0&&(k=!1);else{if(!d.find(".edd_price_option_"+g+":checked",d).length)return c.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),b.stopPropagation(),c.prop("disabled",!1),!1;d.find(".edd_price_option_"+g+":checked",d).each(function(b){if(j[b]=a(this).val(),!0===k){var c=a(this).data("price");c&&c>0&&(k=!1)}})}else j[0]=g,c.data("price")&&c.data("price")>0&&(k=!1);if(k&&d.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==d.find(".edd_action_input").val())return d.submit(),!0;var l=c.data("action"),m={action:l,download_id:g,price_ids:j,post_data:a(d).serialize()};return a.ajax({type:"POST",data:m,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){var e="1"==edd_scripts.redirect_to_checkout,j="1"==d.find("#edd_redirect_to_checkout").val();if(e&&j||!e&&j)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal").show(),a(".cart_item.edd_cart_tax").show()),a(".cart_item.edd_total").show(),a(".cart_item.edd_checkout").show(),a(".cart_item.empty").length&&a(".cart_item.empty").hide(),a(".widget_edd_cart_widget .edd-cart").each(function(c){var d=a(this).find(".edd-cart-meta:first");a(b.cart_item).insertBefore(d);var e=a(this).parent();e&&(e.addClass("cart-not-empty"),e.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(a(".edd-cart-meta.edd_subtotal span").html(b.subtotal),a(".edd-cart-meta.edd_cart_tax span").html(b.tax)),a(".edd-cart-meta.edd_total span").html(b.total);a(".edd-cart-item-title",b.cart_item).length;if(a("span.edd-cart-quantity").each(function(){a(this).text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity])}),"none"==a(".edd-cart-number-of-items").css("display")&&a(".edd-cart-number-of-items").show("slow"),"no"!=h&&"multi"==i||(a("a.edd-add-to-cart",f).toggle(),a(".edd_go_to_checkout",f).css("display","inline-block")),"multi"==i&&c.removeAttr("data-edd-loading"),a(".edd_download_purchase_form").length&&("no"==h||!d.find(".edd_price_option_"+g).is("input:hidden"))){var l=a('.edd_download_purchase_form *[data-download-id="'+g+'"]').parents("form");a("a.edd-add-to-cart",l).hide(),"multi"!=i&&l.find(".edd_download_quantity_wrapper").slideUp(),a(".edd_go_to_checkout",l).show().removeAttr("data-edd-loading")}"incart"!=b&&(a(".edd-cart-added-alert",f).fadeIn(),setTimeout(function(){a(".edd-cart-added-alert",f).fadeOut()},3e3)),c.prop("disabled",!1),a("body").trigger("edd_cart_item_added",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var b=a(this),c={action:b.data("action")};return a(".edd-cart-ajax").show(),a.post(edd_scripts.ajaxurl,c,function(b){a("#edd_checkout_login_register").html(edd_scripts.loading),a("#edd_checkout_login_register").html(b),a(".edd-cart-ajax").hide()}),!1}),a(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(b){b.preventDefault();var c=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).after('<span class="edd-
|
1 |
+
function edd_load_gateway(a){jQuery(".edd-cart-ajax").show(),jQuery("#edd_purchase_form_wrap").html('<span class="edd-loading-ajax edd-loading"></span>');var b=edd_scripts.ajaxurl;b+=b.indexOf("?")>0?"&":"?",b=b+"payment-mode="+a,jQuery.post(b,{action:"edd_load_gateway",edd_payment_mode:a},function(b){jQuery("#edd_purchase_form_wrap").html(b),jQuery(".edd-no-js").hide(),jQuery("body").trigger("edd_gateway_loaded",[a])})}var edd_scripts;jQuery(document).ready(function(a){function c(){var c,b=a(this),d="undefined"!=typeof edd_global_vars;if("card_state"!=b.attr("id")){var e={action:"edd_get_shop_states",country:b.val(),field_name:"card_state"};a.ajax({type:"POST",data:e,url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(e){c=d?a("#edd_purchase_form"):b.closest("form");var f='input[name="card_state"], select[name="card_state"], input[name="edd_address_state"], select[name="edd_address_state"]';if("nostates"==a.trim(e)){var g='<input type="text" name="card_state" class="card-state edd-input required" value=""/>';c.find(f).replaceWith(g)}else c.find(f).replaceWith(e);d&&a("body").trigger("edd_cart_billing_address_updated",[e])}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){d&&recalculate_taxes()})}else d&&recalculate_taxes();return!1}if(a(".edd-no-js").hide(),a("a.edd-add-to-cart").addClass("edd-has-js"),a("body").on("click.eddRemoveFromCart",".edd-remove-from-cart",function(b){var c=a(this),d=c.data("cart-item"),e=c.data("action"),f=c.data("download-id"),g={action:e,cart_item:d};return a.ajax({type:"POST",data:g,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){if(b.removed){if(parseInt(edd_scripts.position_in_cart,10)===parseInt(d,10)||edd_scripts.has_purchase_links)return window.location=window.location,!1;a(".edd-cart").each(function(){a(this).find("[data-cart-item='"+d+"']").parent().remove()}),a(".edd-cart").each(function(){var b=0;a(this).find("[data-cart-item]").each(function(){a(this).attr("data-cart-item",b),b+=1})}),a("[id^=edd_purchase_"+f+"]").length&&(a("[id^=edd_purchase_"+f+"] .edd_go_to_checkout").hide(),a("[id^=edd_purchase_"+f+"] a.edd-add-to-cart").show().removeAttr("data-edd-loading"),"1"==edd_scripts.quantities_enabled&&a("[id^=edd_purchase_"+f+"] .edd_download_quantity_wrapper").show()),a("span.edd-cart-quantity").text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity]),edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal span").html(b.subtotal),a(".cart_item.edd_cart_tax span").html(b.tax)),a(".cart_item.edd_total span").html(b.total),0==b.cart_quantity&&(a(".cart_item.edd_subtotal,.edd-cart-number-of-items,.cart_item.edd_checkout,.cart_item.edd_cart_tax,.cart_item.edd_total").hide(),a(".edd-cart").each(function(){var b=a(this).parent();b&&(b.addClass("cart-empty"),b.removeClass("cart-not-empty")),a(this).append('<li class="cart_item empty">'+edd_scripts.empty_cart_message+"</li>")})),a("body").trigger("edd_cart_item_removed",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("body").on("click.eddAddToCart",".edd-add-to-cart",function(b){b.preventDefault();var c=a(this),d=c.closest("form");c.prop("disabled",!0);var f=(c.find(".edd-loading"),c.closest("div"));c.attr("data-edd-loading","");var d=c.parents("form").last(),g=c.data("download-id"),h=c.data("variable-price"),i=c.data("price-mode"),j=[],k=!0;if("yes"==h)if(d.find(".edd_price_option_"+g+'[type="hidden"]').length>0)j[0]=a(".edd_price_option_"+g,d).val(),d.find(".edd-submit").data("price")&&d.find(".edd-submit").data("price")>0&&(k=!1);else{if(!d.find(".edd_price_option_"+g+":checked",d).length)return c.removeAttr("data-edd-loading"),alert(edd_scripts.select_option),b.stopPropagation(),c.prop("disabled",!1),!1;d.find(".edd_price_option_"+g+":checked",d).each(function(b){if(j[b]=a(this).val(),!0===k){var c=a(this).data("price");c&&c>0&&(k=!1)}})}else j[0]=g,c.data("price")&&c.data("price")>0&&(k=!1);if(k&&d.find(".edd_action_input").val("add_to_cart"),"straight_to_gateway"==d.find(".edd_action_input").val())return d.submit(),!0;var l=c.data("action"),m={action:l,download_id:g,price_ids:j,post_data:a(d).serialize()};return a.ajax({type:"POST",data:m,dataType:"json",url:edd_scripts.ajaxurl,xhrFields:{withCredentials:!0},success:function(b){var e="1"==edd_scripts.redirect_to_checkout,j="1"==d.find("#edd_redirect_to_checkout").val();if(e&&j||!e&&j)window.location=edd_scripts.checkout_page;else{"1"===edd_scripts.taxes_enabled&&(a(".cart_item.edd_subtotal").show(),a(".cart_item.edd_cart_tax").show()),a(".cart_item.edd_total").show(),a(".cart_item.edd_checkout").show(),a(".cart_item.empty").length&&a(".cart_item.empty").hide(),a(".widget_edd_cart_widget .edd-cart").each(function(c){var d=a(this).find(".edd-cart-meta:first");a(b.cart_item).insertBefore(d);var e=a(this).parent();e&&(e.addClass("cart-not-empty"),e.removeClass("cart-empty"))}),"1"===edd_scripts.taxes_enabled&&(a(".edd-cart-meta.edd_subtotal span").html(b.subtotal),a(".edd-cart-meta.edd_cart_tax span").html(b.tax)),a(".edd-cart-meta.edd_total span").html(b.total);a(".edd-cart-item-title",b.cart_item).length;if(a("span.edd-cart-quantity").each(function(){a(this).text(b.cart_quantity),a("body").trigger("edd_quantity_updated",[b.cart_quantity])}),"none"==a(".edd-cart-number-of-items").css("display")&&a(".edd-cart-number-of-items").show("slow"),"no"!=h&&"multi"==i||(a("a.edd-add-to-cart",f).toggle(),a(".edd_go_to_checkout",f).css("display","inline-block")),"multi"==i&&c.removeAttr("data-edd-loading"),a(".edd_download_purchase_form").length&&("no"==h||!d.find(".edd_price_option_"+g).is("input:hidden"))){var l=a('.edd_download_purchase_form *[data-download-id="'+g+'"]').parents("form");a("a.edd-add-to-cart",l).hide(),"multi"!=i&&l.find(".edd_download_quantity_wrapper").slideUp(),a(".edd_go_to_checkout",l).show().removeAttr("data-edd-loading")}"incart"!=b&&(a(".edd-cart-added-alert",f).fadeIn(),setTimeout(function(){a(".edd-cart-added-alert",f).fadeOut()},3e3)),c.prop("disabled",!1),a("body").trigger("edd_cart_item_added",[b])}}}).fail(function(a){window.console&&window.console.log&&console.log(a)}).done(function(a){}),!1}),a("#edd_checkout_form_wrap").on("click",".edd_checkout_register_login",function(){var b=a(this),c={action:b.data("action")};return a(".edd-cart-ajax").show(),a.post(edd_scripts.ajaxurl,c,function(b){a("#edd_checkout_login_register").html(edd_scripts.loading),a("#edd_checkout_login_register").html(b),a(".edd-cart-ajax").hide()}),!1}),a(document).on("click","#edd_purchase_form #edd_login_fields input[type=submit]",function(b){b.preventDefault();var c=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).after('<span class="edd-loading-ajax edd-loading"></span>');var d={action:"edd_process_checkout_login",edd_ajax:1,edd_user_login:a("#edd_login_fields #edd_user_login").val(),edd_user_pass:a("#edd_login_fields #edd_user_pass").val()};a.post(edd_global_vars.ajaxurl,d,function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),window.location=edd_scripts.checkout_page):(a("#edd_login_fields input[type=submit]").val(c),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a("#edd-user-login-submit").before(b))})}),a("select#edd-gateway, input.edd-gateway").change(function(b){var c=a("#edd-gateway option:selected, input.edd-gateway:checked").val();return"0"!=c&&(edd_load_gateway(c),!1)}),"1"==edd_scripts.is_checkout&&a("select#edd-gateway, input.edd-gateway").length){var b=a("meta[name='edd-chosen-gateway']").attr("content");b||(b=edd_scripts.default_gateway),setTimeout(function(){edd_load_gateway(b)},200)}a(document).on("click","#edd_purchase_form #edd_purchase_submit input[type=submit]",function(b){var c=document.getElementById("edd_purchase_form");if("function"!=typeof c.checkValidity||!1!==c.checkValidity()){b.preventDefault();var d=a(this).val();a(this).val(edd_global_vars.purchase_loading),a(this).prop("disabled",!0),a(this).after('<span class="edd-loading-ajax edd-loading"></span>'),a.post(edd_global_vars.ajaxurl,a("#edd_purchase_form").serialize()+"&action=edd_process_checkout&edd_ajax=true",function(b){"success"==a.trim(b)?(a(".edd_errors").remove(),a(".edd-error").hide(),a(c).submit()):(a("#edd-purchase-button").val(d),a(".edd-loading-ajax").remove(),a(".edd_errors").remove(),a(".edd-error").hide(),a("#edd_purchase_submit").before(b),a("#edd-purchase-button").prop("disabled",!1))})}}),a("body").on("change","#edd_cc_address input.card_state, #edd_cc_address select, #edd_address_country",c),a("body").on("change","#edd_cc_address input[name=card_zip]",function(){"undefined"!=typeof edd_global_vars&&recalculate_taxes()})});
|
easy-digital-downloads.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Description: The easiest way to sell digital products with WordPress.
|
6 |
* Author: Easy Digital Downloads
|
7 |
* Author URI: https://easydigitaldownloads.com
|
8 |
-
* Version: 2.7.
|
9 |
* Text Domain: easy-digital-downloads
|
10 |
* Domain Path: languages
|
11 |
*
|
@@ -25,7 +25,7 @@
|
|
25 |
* @package EDD
|
26 |
* @category Core
|
27 |
* @author Pippin Williamson
|
28 |
-
* @version 2.7.
|
29 |
*/
|
30 |
|
31 |
// Exit if accessed directly.
|
@@ -206,7 +206,7 @@ final class Easy_Digital_Downloads {
|
|
206 |
|
207 |
// Plugin version.
|
208 |
if ( ! defined( 'EDD_VERSION' ) ) {
|
209 |
-
define( 'EDD_VERSION', '2.7.
|
210 |
}
|
211 |
|
212 |
// Plugin Folder Path.
|
5 |
* Description: The easiest way to sell digital products with WordPress.
|
6 |
* Author: Easy Digital Downloads
|
7 |
* Author URI: https://easydigitaldownloads.com
|
8 |
+
* Version: 2.7.7
|
9 |
* Text Domain: easy-digital-downloads
|
10 |
* Domain Path: languages
|
11 |
*
|
25 |
* @package EDD
|
26 |
* @category Core
|
27 |
* @author Pippin Williamson
|
28 |
+
* @version 2.7.7
|
29 |
*/
|
30 |
|
31 |
// Exit if accessed directly.
|
206 |
|
207 |
// Plugin version.
|
208 |
if ( ! defined( 'EDD_VERSION' ) ) {
|
209 |
+
define( 'EDD_VERSION', '2.7.7' );
|
210 |
}
|
211 |
|
212 |
// Plugin Folder Path.
|
includes/EDD_SL_Plugin_Updater.php
CHANGED
@@ -7,7 +7,7 @@ if ( ! defined( 'ABSPATH' ) ) exit;
|
|
7 |
* Allows plugins to use their own update API.
|
8 |
*
|
9 |
* @author Easy Digital Downloads
|
10 |
-
* @version 1.6.
|
11 |
*/
|
12 |
class EDD_SL_Plugin_Updater {
|
13 |
|
@@ -279,8 +279,8 @@ class EDD_SL_Plugin_Updater {
|
|
279 |
// Convert sections into an associative array, since we're getting an object, but Core expects an array.
|
280 |
if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
|
281 |
$new_sections = array();
|
282 |
-
foreach ( $_data->sections as $key => $
|
283 |
-
$new_sections[ $key ] = $
|
284 |
}
|
285 |
|
286 |
$_data->sections = $new_sections;
|
@@ -289,8 +289,8 @@ class EDD_SL_Plugin_Updater {
|
|
289 |
// Convert banners into an associative array, since we're getting an object, but Core expects an array.
|
290 |
if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
|
291 |
$new_banners = array();
|
292 |
-
foreach ( $_data->banners as $key => $
|
293 |
-
$new_banners[ $key ] = $
|
294 |
}
|
295 |
|
296 |
$_data->banners = $new_banners;
|
7 |
* Allows plugins to use their own update API.
|
8 |
*
|
9 |
* @author Easy Digital Downloads
|
10 |
+
* @version 1.6.12
|
11 |
*/
|
12 |
class EDD_SL_Plugin_Updater {
|
13 |
|
279 |
// Convert sections into an associative array, since we're getting an object, but Core expects an array.
|
280 |
if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) {
|
281 |
$new_sections = array();
|
282 |
+
foreach ( $_data->sections as $key => $value ) {
|
283 |
+
$new_sections[ $key ] = $value;
|
284 |
}
|
285 |
|
286 |
$_data->sections = $new_sections;
|
289 |
// Convert banners into an associative array, since we're getting an object, but Core expects an array.
|
290 |
if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) {
|
291 |
$new_banners = array();
|
292 |
+
foreach ( $_data->banners as $key => $value ) {
|
293 |
+
$new_banners[ $key ] = $value;
|
294 |
}
|
295 |
|
296 |
$_data->banners = $new_banners;
|
includes/admin/customers/customers.php
CHANGED
@@ -126,7 +126,7 @@ function edd_render_customer_view( $view, $callbacks ) {
|
|
126 |
|
127 |
<div id="edd-item-wrapper" class="edd-item-has-tabs edd-clearfix">
|
128 |
<div id="edd-item-tab-wrapper" class="customer-tab-wrapper">
|
129 |
-
<ul id="edd-item-tab-wrapper-list" class="
|
130 |
<?php foreach ( $customer_tabs as $key => $tab ) : ?>
|
131 |
<?php $active = $key === $view ? true : false; ?>
|
132 |
<?php $class = $active ? 'active' : 'inactive'; ?>
|
126 |
|
127 |
<div id="edd-item-wrapper" class="edd-item-has-tabs edd-clearfix">
|
128 |
<div id="edd-item-tab-wrapper" class="customer-tab-wrapper">
|
129 |
+
<ul id="edd-item-tab-wrapper-list" class="customer-tab-wrapper-list">
|
130 |
<?php foreach ( $customer_tabs as $key => $tab ) : ?>
|
131 |
<?php $active = $key === $view ? true : false; ?>
|
132 |
<?php $class = $active ? 'active' : 'inactive'; ?>
|
includes/admin/import/class-batch-import-payments.php
CHANGED
@@ -204,6 +204,12 @@ class EDD_Batch_Payments_Import extends EDD_Batch_Import {
|
|
204 |
|
205 |
$payment->user_id = $user->ID;
|
206 |
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
}
|
208 |
|
209 |
}
|
204 |
|
205 |
$payment->user_id = $user->ID;
|
206 |
|
207 |
+
$customer = new EDD_Customer( $payment->customer_id );
|
208 |
+
|
209 |
+
if( empty( $customer->user_id ) ) {
|
210 |
+
$customer->update( array( 'user_id' => $user->ID ) );
|
211 |
+
}
|
212 |
+
|
213 |
}
|
214 |
|
215 |
}
|
includes/checkout/template.php
CHANGED
@@ -541,12 +541,12 @@ function edd_get_login_fields() {
|
|
541 |
<?php do_action('edd_checkout_login_fields_before'); ?>
|
542 |
<p id="edd-user-login-wrap">
|
543 |
<label class="edd-label" for="edd-username">
|
544 |
-
<?php _e( 'Username', 'easy-digital-downloads' ); ?>
|
545 |
<?php if( edd_no_guest_checkout() ) { ?>
|
546 |
<span class="edd-required-indicator">*</span>
|
547 |
<?php } ?>
|
548 |
</label>
|
549 |
-
<input class="<?php if(edd_no_guest_checkout()) { echo 'required '; } ?>edd-input" type="text" name="edd_user_login" id="edd_user_login" value="" placeholder="<?php _e( 'Your username', 'easy-digital-downloads' ); ?>"/>
|
550 |
</p>
|
551 |
<p id="edd-user-pass-wrap" class="edd_login_password">
|
552 |
<label class="edd-label" for="edd-password">
|
541 |
<?php do_action('edd_checkout_login_fields_before'); ?>
|
542 |
<p id="edd-user-login-wrap">
|
543 |
<label class="edd-label" for="edd-username">
|
544 |
+
<?php _e( 'Username or Email', 'easy-digital-downloads' ); ?>
|
545 |
<?php if( edd_no_guest_checkout() ) { ?>
|
546 |
<span class="edd-required-indicator">*</span>
|
547 |
<?php } ?>
|
548 |
</label>
|
549 |
+
<input class="<?php if(edd_no_guest_checkout()) { echo 'required '; } ?>edd-input" type="text" name="edd_user_login" id="edd_user_login" value="" placeholder="<?php _e( 'Your username or email address', 'easy-digital-downloads' ); ?>"/>
|
550 |
</p>
|
551 |
<p id="edd-user-pass-wrap" class="edd_login_password">
|
552 |
<label class="edd-label" for="edd-password">
|
includes/class-edd-html-elements.php
CHANGED
@@ -547,7 +547,7 @@ class EDD_HTML_Elements {
|
|
547 |
foreach ( $args['options'] as $key => $option ) {
|
548 |
if ( $args['multiple'] && is_array( $args['selected'] ) ) {
|
549 |
$selected = selected( true, in_array( (string) $key, $args['selected'] ), false );
|
550 |
-
} elseif ( isset( $args['selected'] ) && !
|
551 |
$selected = selected( $args['selected'], $key, false );
|
552 |
}
|
553 |
|
547 |
foreach ( $args['options'] as $key => $option ) {
|
548 |
if ( $args['multiple'] && is_array( $args['selected'] ) ) {
|
549 |
$selected = selected( true, in_array( (string) $key, $args['selected'] ), false );
|
550 |
+
} elseif ( isset( $args['selected'] ) && ! is_array( $args['selected'] ) ) {
|
551 |
$selected = selected( $args['selected'], $key, false );
|
552 |
}
|
553 |
|
includes/class-edd-stats.php
CHANGED
@@ -111,7 +111,7 @@ class EDD_Stats {
|
|
111 |
}
|
112 |
|
113 |
if( empty( $_end_date ) ) {
|
114 |
-
$_end_date =
|
115 |
}
|
116 |
|
117 |
$this->start_date = $this->convert_date( $_start_date );
|
111 |
}
|
112 |
|
113 |
if( empty( $_end_date ) ) {
|
114 |
+
$_end_date = $_start_date;
|
115 |
}
|
116 |
|
117 |
$this->start_date = $this->convert_date( $_start_date );
|
includes/country-functions.php
CHANGED
@@ -200,7 +200,7 @@ function edd_get_country_list() {
|
|
200 |
'CU' => 'Cuba',
|
201 |
'CW' => 'CuraÇao',
|
202 |
'CY' => 'Cyprus',
|
203 |
-
'CZ' => '
|
204 |
'DK' => 'Denmark',
|
205 |
'DJ' => 'Djibouti',
|
206 |
'DM' => 'Dominica',
|
200 |
'CU' => 'Cuba',
|
201 |
'CW' => 'CuraÇao',
|
202 |
'CY' => 'Cyprus',
|
203 |
+
'CZ' => 'Czechia',
|
204 |
'DK' => 'Denmark',
|
205 |
'DJ' => 'Djibouti',
|
206 |
'DM' => 'Dominica',
|
includes/discount-functions.php
CHANGED
@@ -1049,7 +1049,12 @@ function edd_discount_status_cleanup() {
|
|
1049 |
}
|
1050 |
|
1051 |
}
|
|
|
|
|
|
|
|
|
1052 |
add_action( 'edd_daily_scheduled_events', 'edd_discount_status_cleanup' );
|
|
|
1053 |
|
1054 |
/**
|
1055 |
* Used during edd_discount_status_cleanup to filter out a meta query properly
|
1049 |
}
|
1050 |
|
1051 |
}
|
1052 |
+
/**
|
1053 |
+
* Disabled until https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5619 is completed
|
1054 |
+
* See https://github.com/easydigitaldownloads/easy-digital-downloads/issues/5631
|
1055 |
+
*
|
1056 |
add_action( 'edd_daily_scheduled_events', 'edd_discount_status_cleanup' );
|
1057 |
+
*/
|
1058 |
|
1059 |
/**
|
1060 |
* Used during edd_discount_status_cleanup to filter out a meta query properly
|
includes/process-purchase.php
CHANGED
@@ -597,8 +597,15 @@ function edd_purchase_form_validate_user_login() {
|
|
597 |
return $valid_user_data;
|
598 |
}
|
599 |
|
600 |
-
|
601 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
602 |
|
603 |
// Check if user exists
|
604 |
if ( $user_data ) {
|
597 |
return $valid_user_data;
|
598 |
}
|
599 |
|
600 |
+
$login_or_email = strip_tags( $_POST['edd_user_login'] );
|
601 |
+
|
602 |
+
if ( is_email( $login_or_email ) ) {
|
603 |
+
// Get the user by email
|
604 |
+
$user_data = get_user_by( 'email', $login_or_email );
|
605 |
+
} else {
|
606 |
+
// Get the user by login
|
607 |
+
$user_data = get_user_by( 'login', $login_or_email );
|
608 |
+
}
|
609 |
|
610 |
// Check if user exists
|
611 |
if ( $user_data ) {
|
includes/shortcodes.php
CHANGED
@@ -582,7 +582,7 @@ function edd_downloads_query( $atts, $content = null ) {
|
|
582 |
<?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
|
583 |
<?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
|
584 |
<div <?php echo $schema; ?>class="<?php echo apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $atts, $i ); ?>" id="edd_download_<?php echo get_the_ID(); ?>">
|
585 |
-
<div class="edd_download_inner">
|
586 |
<?php
|
587 |
|
588 |
do_action( 'edd_download_before' );
|
@@ -750,6 +750,13 @@ function edd_receipt_shortcode( $atts, $content = null ) {
|
|
750 |
return $login_form;
|
751 |
}
|
752 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
753 |
/*
|
754 |
* Check if the user has permission to view the receipt
|
755 |
*
|
@@ -762,7 +769,7 @@ function edd_receipt_shortcode( $atts, $content = null ) {
|
|
762 |
*/
|
763 |
|
764 |
|
765 |
-
if ( !
|
766 |
return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>';
|
767 |
}
|
768 |
|
582 |
<?php while ( $downloads->have_posts() ) : $downloads->the_post(); ?>
|
583 |
<?php $schema = edd_add_schema_microdata() ? 'itemscope itemtype="http://schema.org/Product" ' : ''; ?>
|
584 |
<div <?php echo $schema; ?>class="<?php echo apply_filters( 'edd_download_class', 'edd_download', get_the_ID(), $atts, $i ); ?>" id="edd_download_<?php echo get_the_ID(); ?>">
|
585 |
+
<div class="<?php echo apply_filters( 'edd_download_inner_class', 'edd_download_inner', get_the_ID(), $atts, $i ); ?>">
|
586 |
<?php
|
587 |
|
588 |
do_action( 'edd_download_before' );
|
750 |
return $login_form;
|
751 |
}
|
752 |
|
753 |
+
$user_can_view = apply_filters( 'edd_user_can_view_receipt', $user_can_view, $edd_receipt_args );
|
754 |
+
|
755 |
+
// If this was a guest checkout and the purchase session is empty, output a relevant error message
|
756 |
+
if ( empty( $session ) && ! is_user_logged_in() && ! $user_can_view ) {
|
757 |
+
return '<p class="edd-alert edd-alert-error">' . apply_filters( 'edd_receipt_guest_error_message', __( 'Receipt could not be retrieved, your purchase session has expired.', 'easy-digital-downloads' ) ) . '</p>';
|
758 |
+
}
|
759 |
+
|
760 |
/*
|
761 |
* Check if the user has permission to view the receipt
|
762 |
*
|
769 |
*/
|
770 |
|
771 |
|
772 |
+
if ( ! $user_can_view ) {
|
773 |
return '<p class="edd-alert edd-alert-error">' . $edd_receipt_args['error'] . '</p>';
|
774 |
}
|
775 |
|
includes/user-functions.php
CHANGED
@@ -204,6 +204,13 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
|
|
204 |
return false;
|
205 |
}
|
206 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
207 |
$users_purchases = edd_get_users_purchases( $user_id );
|
208 |
|
209 |
$return = false;
|
@@ -223,12 +230,14 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
|
|
223 |
$variable_prices = edd_has_variable_prices( $download['id'] );
|
224 |
if ( $variable_prices && ! is_null( $variable_price_id ) && $variable_price_id !== false ) {
|
225 |
if ( isset( $download['item_number']['options']['price_id'] ) && $variable_price_id == $download['item_number']['options']['price_id'] ) {
|
226 |
-
return true;
|
|
|
227 |
} else {
|
228 |
$return = false;
|
229 |
}
|
230 |
} else {
|
231 |
$return = true;
|
|
|
232 |
}
|
233 |
}
|
234 |
}
|
@@ -236,6 +245,13 @@ function edd_has_user_purchased( $user_id, $downloads, $variable_price_id = null
|
|
236 |
}
|
237 |
}
|
238 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
239 |
return $return;
|
240 |
}
|
241 |
|
204 |
return false;
|
205 |
}
|
206 |
|
207 |
+
/**
|
208 |
+
* @since 2.7.7
|
209 |
+
*
|
210 |
+
* Allow 3rd parties to take actions before the history is queried.
|
211 |
+
*/
|
212 |
+
do_action( 'edd_has_user_purchased_before', $user_id, $downloads, $variable_price_id );
|
213 |
+
|
214 |
$users_purchases = edd_get_users_purchases( $user_id );
|
215 |
|
216 |
$return = false;
|
230 |
$variable_prices = edd_has_variable_prices( $download['id'] );
|
231 |
if ( $variable_prices && ! is_null( $variable_price_id ) && $variable_price_id !== false ) {
|
232 |
if ( isset( $download['item_number']['options']['price_id'] ) && $variable_price_id == $download['item_number']['options']['price_id'] ) {
|
233 |
+
$return = true;
|
234 |
+
break 2; // Get out to prevent this value being overwritten if the customer has purchased item twice
|
235 |
} else {
|
236 |
$return = false;
|
237 |
}
|
238 |
} else {
|
239 |
$return = true;
|
240 |
+
break 2; // Get out to prevent this value being overwritten if the customer has purchased item twice
|
241 |
}
|
242 |
}
|
243 |
}
|
245 |
}
|
246 |
}
|
247 |
|
248 |
+
/**
|
249 |
+
* @since 2.7.7
|
250 |
+
*
|
251 |
+
* Filter has purchased result
|
252 |
+
*/
|
253 |
+
$return = apply_filters( 'edd_has_user_purchased', $return, $user_id, $downloads, $variable_price_id );
|
254 |
+
|
255 |
return $return;
|
256 |
}
|
257 |
|
readme.txt
CHANGED
@@ -1,59 +1,82 @@
|
|
1 |
=== Easy Digital Downloads ===
|
2 |
Author URI: https://easydigitaldownloads.com
|
3 |
Plugin URI: https://easydigitaldownloads.com
|
4 |
-
Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip
|
5 |
Donate link: https://easydigitaldownloads.com/donate/
|
6 |
-
Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce
|
7 |
Requires at least: 4.0
|
8 |
Tested up to: 4.8
|
9 |
-
Stable Tag: 2.7.
|
10 |
-
|
11 |
License: GNU Version 2 or Any Later Version
|
12 |
|
13 |
The easiest way to sell digital products with WordPress.
|
14 |
|
15 |
== Description ==
|
16 |
|
17 |
-
Easy Digital Downloads is a complete
|
|
|
|
|
|
|
|
|
18 |
|
19 |
-
|
20 |
|
21 |
-
|
22 |
-
* Complete promotional code system
|
23 |
-
* Many payment gateways. PayPal, Amazon, Test Payments are included by default with Stripe, PayPal Pro, PayPal Express, and others available as [extensions](https://easydigitaldownloads.com/downloads/category/extensions/gateways/?utm_source=gateways&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme)
|
24 |
-
* Complete payment history
|
25 |
-
* User purchase history and ability to redownload files
|
26 |
-
* Multiple files per downloadable product
|
27 |
-
* Variable prices for multiple price options per product
|
28 |
-
* Bundled products
|
29 |
-
* Customizable purchase receipts
|
30 |
-
* Earnings and sales charts
|
31 |
-
* Detailed purchase and file download logs
|
32 |
-
* Data export options for CSV and PDF
|
33 |
-
* Add functionality with many [extensions](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme)
|
34 |
-
* Developer friendly with dozens of actions and filters. [View developer documentation](http://docs.easydigitaldownloads.com/collection/174-developer-docs?utm_source=docs&utm_medium=description_tab&utm_content=developer_docs&utm_campaign=readme)
|
35 |
|
36 |
-
|
37 |
|
38 |
-
|
39 |
|
40 |
-
|
41 |
|
42 |
-
|
|
|
43 |
|
44 |
-
|
45 |
|
46 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
|
48 |
-
|
49 |
|
50 |
-
|
51 |
|
52 |
-
|
53 |
|
54 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
56 |
-
|
|
|
|
|
|
|
|
|
57 |
|
58 |
== Installation ==
|
59 |
|
@@ -69,6 +92,10 @@ Would you like to help translate the plugin into more languages? [Join our WP-Tr
|
|
69 |
|
70 |
Full searchable docs can be found at [http://docs.easydigitaldownloads.com/](http://docs.easydigitaldownloads.com/?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
|
71 |
|
|
|
|
|
|
|
|
|
72 |
= Is an SSL certificate required? =
|
73 |
|
74 |
Easy Digital Downloads can function without one just fine, making it easy to set up in a testing or development environment. We still strongly recommend you have an SSL certificate for your production web site, both for security and for the peace of mind of your customers. [Documentation here](http://docs.easydigitaldownloads.com/article/994-how-to-set-up-ssl?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
|
@@ -81,14 +108,6 @@ That said, we have a nice collection of free themes that come with support for E
|
|
81 |
|
82 |
[See the free themes here.](https://easydigitaldownloads.com/themes/?utm_source=docs&utm_medium=faq_tab&utm_term=free_themes&utm_content=faqs&utm_campaign=readme)
|
83 |
|
84 |
-
= How do I Show My Shopping Cart? =
|
85 |
-
|
86 |
-
There are two ways you can show the downloads shopping cart:
|
87 |
-
|
88 |
-
1. Use the shortcode and simply place [download_cart] on a page or within a text widget.
|
89 |
-
|
90 |
-
2. Use the included widget. Go to Appearance > Widgets and place the "Downloads Cart" widget into any widget area available.
|
91 |
-
|
92 |
= Is there a sample import file I can use to setup a demo store? =
|
93 |
|
94 |
Yes! Simply go to Tools > Import and install the WordPress Importer, then navigate to wp-content/plugins/easy-digital-downloads/assets/ and select the sample-products-import.xml file. This will create several sample products and plugin pages for you.
|
@@ -130,9 +149,9 @@ Yes, EDD has an extension that allows for downloadable invoices to be generated
|
|
130 |
|
131 |
Yes, through the use of our commercial addon called [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme). [Full documentation here](http://docs.easydigitaldownloads.com/article/1142-recurring-payments---overview?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme)
|
132 |
|
133 |
-
= Can
|
134 |
|
135 |
-
Yes
|
136 |
|
137 |
* [Stripe](https://easydigitaldownloads.com/downloads/stripe-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=stripe-payment-gateway&utm_campaign=readme)
|
138 |
* [PayPal Pro/Express](https://easydigitaldownloads.com/downloads/paypal-pro-express/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-pro-express&utm_campaign=readme)
|
@@ -194,10 +213,25 @@ Yes, through the addition of one or more of the add-on payment gateways, you can
|
|
194 |
|
195 |
== Changelog ==
|
196 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
197 |
= 2.7.6, March 24, 2017 =
|
198 |
|
199 |
* New: Added new hooks to customer details page
|
200 |
-
* New: Email tags are now
|
201 |
* Fix: User dropdown field does not always show selected user
|
202 |
* Fix: Payment field for Amazon Payments gateway not properly shown after authenticating with Amazon
|
203 |
* Fix: edd-page class improperly added to all site pages when Test Mode is enabled
|
@@ -211,7 +245,7 @@ Yes, through the addition of one or more of the add-on payment gateways, you can
|
|
211 |
* Fix: Custom "Complete Purchase Text" not used if payment submission results in error
|
212 |
* Fix: Incorrect date set for "end_date" in EDD_Stats class
|
213 |
* Fix: Price option not properly added when using custom add to cart links for variable priced product and not price ID is supplied
|
214 |
-
* Fix: Fees that are
|
215 |
|
216 |
= 2.7.5, March 6, 2017 =
|
217 |
|
1 |
=== Easy Digital Downloads ===
|
2 |
Author URI: https://easydigitaldownloads.com
|
3 |
Plugin URI: https://easydigitaldownloads.com
|
4 |
+
Contributors: easydigitaldownloads, mordauk, sunnyratilal, chriscct7, section214, sumobi, sdavis2702, cklosows, mindctrl, sksmatt, SpencerFinnell, johnstonphilip, brashrebel
|
5 |
Donate link: https://easydigitaldownloads.com/donate/
|
6 |
+
Tags: download, downloads, e-store, eshop, digital downloads, e-commerce, wp-ecommerce, wp ecommerce, ecommerce, ebook
|
7 |
Requires at least: 4.0
|
8 |
Tested up to: 4.8
|
9 |
+
Stable Tag: 2.7.7
|
|
|
10 |
License: GNU Version 2 or Any Later Version
|
11 |
|
12 |
The easiest way to sell digital products with WordPress.
|
13 |
|
14 |
== Description ==
|
15 |
|
16 |
+
Easy Digital Downloads is a complete eCommerce solution for selling digital products on WordPress. Learn more at [Easy Digital Downloads.com](https://easydigitaldownloads.com/?utm_source=home&utm_medium=description_tab&utm_content=home&utm_campaign=readme).
|
17 |
+
|
18 |
+
= Sell effortlessly =
|
19 |
+
|
20 |
+
Whether it is software, documents, photos, ebooks, songs, graphics, or any other type of media file, Easy Digtal Downloads provides a complete system for effortlessly selling your digital products.
|
21 |
|
22 |
+
= Localized for your language =
|
23 |
|
24 |
+
Easy Digital Downloads has been translated into more than two dozen languages and new translation are being added all the time, letting you have a natural, native experience, regardless of where you live. If your language is not available, we welcome translation contributions! See our [FAQ](http://docs.easydigitaldownloads.com/article/1082-what-spoken-languages-does-easy-digital-downloads-support?utm_source=docs&utm_medium=description_tab&utm_content=languages&utm_campaign=readme).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
|
26 |
+
= Payment gateways for everyone =
|
27 |
|
28 |
+
The internet has made it possible for anyone to sell their products to a world-wide audience. No matter where you live, Easy Digital Downloads can work for you. We offer integrations for the most common merchant processors and, through 3rd party extensions, support for many, many more as well.
|
29 |
|
30 |
+
Payment gateways supported in the core, free plugin:
|
31 |
|
32 |
+
* PayPal Standard
|
33 |
+
* Amazon Payments
|
34 |
|
35 |
+
Payment gateways supported through free or premium extension:
|
36 |
|
37 |
+
* Stripe
|
38 |
+
* PayPal Pro
|
39 |
+
* PayPal Express
|
40 |
+
* PayPal Payments Advanced
|
41 |
+
* PayPal Adaptive Payments
|
42 |
+
* Braintree
|
43 |
+
* Authorize.net
|
44 |
+
* 2Checkout
|
45 |
+
* Recurly
|
46 |
+
* SOFORT Banking
|
47 |
+
* NETbilling
|
48 |
+
* BitPay
|
49 |
+
* Coinbase
|
50 |
+
* Moneybookers / Skrill
|
51 |
+
* Payza
|
52 |
+
* MercadoPago
|
53 |
+
* PagSeguro
|
54 |
|
55 |
+
See our [gateways category](https://easydigitaldownloads.com/downloads/category/gateways/?utm_source=extensions&utm_medium=description_tab&utm_content=gateways&utm_campaign=readme) in the extensions catalogue for a complete list of supported gateways. There are also a large number of additional gateways developed and supported by [3rd party developers](https://easydigitaldownloads.com/3rd-party-extensions/#gateways).
|
56 |
|
57 |
+
= Go further with extensions =
|
58 |
|
59 |
+
With add-on plugins from our [extensions catalogue](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme) you can super-charge your digital store. Some of our extension highlights include:
|
60 |
|
61 |
+
* [Software Licensing](https://easydigitaldownloads.com/downloads/software-licensing/?utm_source=extension&utm_medium=description_tab&utm_content=software-licensing&utm_campaign=readme) provides a complete solution for selling software license keys
|
62 |
+
* [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=extension&utm_medium=description_tab&utm_content=recurring-payments&utm_campaign=readme) allows store owners to sell recurring subscriptions for digital products
|
63 |
+
* [Frontend Submissions](https://easydigitaldownloads.com/downloads/frontend-submissions/?utm_source=extension&utm_medium=description_tab&utm_content=frontend-submissions&utm_campaign=readme) transforms your store into a full-featured multi-vendor marketplace
|
64 |
+
* [Commissions](https://easydigitaldownloads.com/downloads/commissions/?utm_source=extension&utm_medium=description_tab&utm_content=commissions&utm_campaign=readme) enables store owners to easily track earnings for product vendors
|
65 |
+
* [Free Downloads](https://easydigitaldownloads.com/downloads/free-downloads/?utm_source=extension&utm_medium=description_tab&utm_content=free-downloads&utm_campaign=readme) allows free products to be purchased more easily by bypassing the standard checkout process
|
66 |
+
* [Zapier](https://easydigitaldownloads.com/downloads/zapier/?utm_source=extension&utm_medium=description_tab&utm_content=zapier&utm_campaign=readme) automates your store by connecting Easy Digital Downloads with more than 700 other web services and products
|
67 |
+
* [Reviews](https://easydigitaldownloads.com/downloads/product-reviews/?utm_source=extension&utm_medium=description_tab&utm_content=reviews&utm_campaign=readme) allows customers to leave reviews and feedback on the products they have purchased
|
68 |
+
* [Recommended Products](https://easydigitaldownloads.com/downloads/recommended-products/?utm_source=extension&utm_medium=description_tab&utm_content=recommended-products&utm_campaign=readme) increases revenue by showing customers recommendations on additional products to purchase based on real sales data
|
69 |
+
* [Content Restriction](https://easydigitaldownloads.com/downloads/content-restriction/?utm_source=extension&utm_medium=description_tab&utm_content=content-restriction&utm_campaign=readme) allows site owners to restrict access to page content to paying customers
|
70 |
+
* [MailChimp](https://easydigitaldownloads.com/downloads/mailchimp/?utm_source=extension&utm_medium=description_tab&utm_content=mailchimp&utm_campaign=readme) connects your store to your MailChimp account so you can easily subscribe customers to email lists based on what they purchase
|
71 |
+
* [AWeber](https://easydigitaldownloads.com/downloads/aweber/?utm_source=extension&utm_medium=description_tab&utm_content=aweber&utm_campaign=readme) connects your store to your AWeber account so you can easily subscribe customers to email lists based on what they purchase
|
72 |
+
* [Amazon S3](https://easydigitaldownloads.com/downloads/amazon-s3/?utm_source=extension&utm_medium=description_tab&utm_content=amazon-s3&utm_campaign=readme) lets you securely host files on Amazon S3 for more reliable and secure file delivery
|
73 |
+
* [Dropbox File Store](https://easydigitaldownloads.com/downloads/dropbox-file-store//?utm_source=extension&utm_medium=description_tab&utm_content=dropbox-file-store/&utm_campaign=readme) lets you securely host files in your Dropbox account for more reliable and secure file delivery
|
74 |
|
75 |
+
These are just a few of the extensions we offer to help super-charge your digital store. See our complete [extensions catalogue](https://easydigitaldownloads.com/downloads/?utm_source=extensions&utm_medium=description_tab&utm_content=extensions&utm_campaign=readme) for more. There are also hundreds of extensions created by Easy Digital Downloads community members, which can be found on our [3rd Party Extensions page](https://easydigitaldownloads.com/3rd-party-extensions/?utm_source=3rd-party-extensions&utm_medium=description_tab&utm_content=3rd-party-extensions&utm_campaign=readme).
|
76 |
+
|
77 |
+
= Built with developers in mind =
|
78 |
+
|
79 |
+
Extendable, adaptable, and open source -- Easy Digital Downloads is created with developers in mind. Contribute on [GitHub](https://github.com/easydigitaldownloads/easy-digital-downloads).
|
80 |
|
81 |
== Installation ==
|
82 |
|
92 |
|
93 |
Full searchable docs can be found at [http://docs.easydigitaldownloads.com/](http://docs.easydigitaldownloads.com/?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
|
94 |
|
95 |
+
= Where can I ask for help? =
|
96 |
+
|
97 |
+
You can submit a support ticket or pre-sale question from our [support page](http://docs.easydigitaldownloads.com/support?utm_source=docs&utm_medium=faq_tab&utm_content=support&utm_campaign=readme) at anytime.
|
98 |
+
|
99 |
= Is an SSL certificate required? =
|
100 |
|
101 |
Easy Digital Downloads can function without one just fine, making it easy to set up in a testing or development environment. We still strongly recommend you have an SSL certificate for your production web site, both for security and for the peace of mind of your customers. [Documentation here](http://docs.easydigitaldownloads.com/article/994-how-to-set-up-ssl?utm_source=docs&utm_medium=faq_tab&utm_content=documentation&utm_campaign=readme)
|
108 |
|
109 |
[See the free themes here.](https://easydigitaldownloads.com/themes/?utm_source=docs&utm_medium=faq_tab&utm_term=free_themes&utm_content=faqs&utm_campaign=readme)
|
110 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111 |
= Is there a sample import file I can use to setup a demo store? =
|
112 |
|
113 |
Yes! Simply go to Tools > Import and install the WordPress Importer, then navigate to wp-content/plugins/easy-digital-downloads/assets/ and select the sample-products-import.xml file. This will create several sample products and plugin pages for you.
|
149 |
|
150 |
Yes, through the use of our commercial addon called [Recurring Payments](https://easydigitaldownloads.com/downloads/recurring-payments/?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme). [Full documentation here](http://docs.easydigitaldownloads.com/article/1142-recurring-payments---overview?utm_source=docs&utm_medium=faq_tab&utm_term=recurring_addon&utm_content=faqs&utm_campaign=readme)
|
151 |
|
152 |
+
= Can customers purchase products without using PayPal? =
|
153 |
|
154 |
+
Yes. Easy Digital Downloads also includes default support for Amazon Payments and support for numerous other payment methods through add-on payment gateways. Here are some of the gateways [currently available](https://easydigitaldownloads.com/downloads/category/extensions/gateways/?utm_source=docs&utm_medium=faq_tab&utm_term=gateways&utm_content=faqs&utm_campaign=readme):
|
155 |
|
156 |
* [Stripe](https://easydigitaldownloads.com/downloads/stripe-payment-gateway/?utm_source=gateway&utm_medium=faq_tab&utm_content=stripe-payment-gateway&utm_campaign=readme)
|
157 |
* [PayPal Pro/Express](https://easydigitaldownloads.com/downloads/paypal-pro-express/?utm_source=gateway&utm_medium=faq_tab&utm_content=paypal-pro-express&utm_campaign=readme)
|
213 |
|
214 |
== Changelog ==
|
215 |
|
216 |
+
= 2.7.7, April 3, 2017 =
|
217 |
+
|
218 |
+
* Fix: User ID not properly assigned during some payment imports
|
219 |
+
* Fix: Discount codes sometimes changed to inactive improperly
|
220 |
+
* Fix: Incorrect variable name in add-on updater
|
221 |
+
* Fix: edd_has_user_purchased() can return false incorrectly
|
222 |
+
* Fix: File price assignment fails when set to the first price on old products
|
223 |
+
* Fix: Last Month report showing incorrect numbers
|
224 |
+
* Fix: Incorrect class name on customer details page
|
225 |
+
* Tweak: Improved error message shown when viewing a receipt after purchase session has expired
|
226 |
+
* Tweak: Added new filter and action to edd_has_user_purchased()
|
227 |
+
* Tweak: Renamed Czech Republic to Czechia
|
228 |
+
* Tweak: Log in form on checkout now accepts log-in by email
|
229 |
+
* Tweak: Addewd new edd_download_inner_class filter
|
230 |
+
|
231 |
= 2.7.6, March 24, 2017 =
|
232 |
|
233 |
* New: Added new hooks to customer details page
|
234 |
+
* New: Email tags are now processed in the Purchase Email heading
|
235 |
* Fix: User dropdown field does not always show selected user
|
236 |
* Fix: Payment field for Amazon Payments gateway not properly shown after authenticating with Amazon
|
237 |
* Fix: edd-page class improperly added to all site pages when Test Mode is enabled
|
245 |
* Fix: Custom "Complete Purchase Text" not used if payment submission results in error
|
246 |
* Fix: Incorrect date set for "end_date" in EDD_Stats class
|
247 |
* Fix: Price option not properly added when using custom add to cart links for variable priced product and not price ID is supplied
|
248 |
+
* Fix: Fees that are taxed get counted twice in tax total
|
249 |
|
250 |
= 2.7.5, March 6, 2017 =
|
251 |
|