WooCommerce Wishlist Plugin - Version 1.8.10

Version Description

Release Date - 13 August 2018

  • Fixed "wishlist not found" issue when a guest browsing empty wishlist page
  • Fixed "product in wishlist" button state for a variable product type
  • Fixed issue with products counter update on product(s) removed from a wishlist
  • Fixed fatal errors when 3rd party code using global product object outside a loop
  • Fixed fatal error in upgrading method for PHP prior 5.5 versions
Download this release

Release Info

Developer templateinvaders
Plugin Icon 128x128 WooCommerce Wishlist Plugin
Version 1.8.10
Comparing to
See all releases

Code changes from version 1.8.9 to 1.8.10

assets/css/admin-form.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/css/admin-setup.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/css/admin.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/css/public.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/css/theme.min.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/js/admin.min.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
assets/js/public.js CHANGED
@@ -506,19 +506,4 @@
506
$(document.body).on('wc_fragments_refreshed wc_fragments_loaded', function () {
507
$('.wishlist_products_counter').toggleClass('wishlist-counter-with-products', '0' != $('.wishlist_products_counter_number').html());
508
});
509
-
510
- $(window).on('load', function () {
511
- if ($('.tinv-wishlist.woocommerce').length && $('.woocommerce-message').length) {
512
- $(document.body).on('wc_fragments_refreshed.wishlist', function () {
513
- if (typeof wc_cart_fragments_params === 'undefined') {
514
- return false;
515
- }
516
- cart_hash_key = wc_cart_fragments_params.ajax_url.toString() + '-wc_cart_hash';
517
- localStorage.setItem(cart_hash_key, localStorage.getItem(cart_hash_key) + (new Date()).getTime());
518
- sessionStorage.setItem(cart_hash_key, sessionStorage.getItem(cart_hash_key) + (new Date()).getTime());
519
- $(document.body).off('wc_fragments_refreshed.wishlist');
520
- });
521
- $(document.body).trigger('updated_wc_div');
522
- }
523
- });
524
})(jQuery);
506
$(document.body).on('wc_fragments_refreshed wc_fragments_loaded', function () {
507
$('.wishlist_products_counter').toggleClass('wishlist-counter-with-products', '0' != $('.wishlist_products_counter_number').html());
508
});
509
})(jQuery);
assets/js/public.min.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! WooCommerce Wishlist Plugin - version 1.8.9
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
5
6
- !function(r){r.fn.tinvwl_to_wishlist=function(t){var i={api_url:window.location.href,text_create:window.tinvwl_add_to_wishlist.text_create,text_already_in:window.tinvwl_add_to_wishlist.text_already_in,class:{dialogbox:".tinvwl_add_to_select_wishlist",select:".tinvwl_wishlist",newtitle:".tinvwl_new_input",dialogbutton:".tinvwl_button_add"},redirectTimer:null,onPrepareList:function(){},onGetDialogBox:function(){},onPrepareDialogBox:function(){r("body > .tinv-wishlist").length||r("body").append(r("<div>").addClass("tinv-wishlist")),r(this).appendTo("body > .tinv-wishlist")},onCreateWishList:function(t){r(this).append(r("<option>").html(t.title).val(t.ID).toggleClass("tinv_in_wishlist",t.in))},onSelectWishList:function(){},onDialogShow:function(){r(this).addClass("tinv-modal-open")},onDialogHide:function(){r(this).removeClass("tinv-modal-open")},onInited:function(){},onClick:function(){if(r(this).is(".disabled-add-wishlist"))return!1;this.tinvwl_dialog?this.tinvwl_dialog.show_list.call(this):o.onActionProduct.call(this)},onPrepareDataAction:function(){},filterProductAlreadyIn:function(t){t=t||[];var e={};return r("form.cart[method=post], .woocommerce-variation-add-to-cart").find("input, select").each(function(){var t=r(this).attr("name"),i=r(this).attr("type"),n=r(this).val();"checkbox"===i||"radio"===i?r(this).is(":checked")&&(e["form"+t]=n):e["form"+t]=n}),e=e.formvariation_id,t.filter(function(t){if("object"==typeof t.in&&"string"==typeof e){var i=parseInt(e);return 0<=t.in.indexOf(i)}return t.in})},onMultiProductAlreadyIn:function(t){t=t||[];t=o.onPrepareList.call(t)||t,t=o.filterProductAlreadyIn.call(this,t)||t,r(this).parent().parent().find(".already-in").remove();var n="";switch(t.length){case 0:break;default:n=r("<ul>");r.each(t,function(t,i){n.append(r("<li>").html(r("<a>").html(i.title).attr({href:i.url})).val(i.ID))})}n.length&&r(this).closest(".tinv-modal-inner").find("img").after(r("<div>").addClass("already-in").html(o.text_already_in+" ").append(n))},onAction:{redirect:function(t){o.redirectTimer&&clearTimeout(o.redirectTimer),o.redirectTimer=window.setTimeout(function(){window.location.href=t},4e3)},force_redirect:function(t){window.location.href=t},wishlists:function(t){r(this).attr("data-tinv-wl-list",t)},msg:function(t){if(!t)return!1;var i=r(t).eq(0);r("body > .tinv-wishlist").length||r("body").append(r("<div>").addClass("tinv-wishlist")),r("body > .tinv-wishlist").append(i),i.on("click",".tinv-close-modal, .tinvwl_button_close, .tinv-overlay",function(t){t.preventDefault(),i.remove(),o.redirectTimer&&clearTimeout(o.redirectTimer)})},status:function(t){t&&r(this).addClass("tinvwl-product-in-list")},removed:function(t){t&&r(this).removeClass("tinvwl-product-in-list").removeClass("tinvwl-product-make-remove").attr("data-tinv-wl-action","addto")},make_remove:function(t){r(this).toggleClass("tinvwl-product-make-remove",t).attr("data-tinv-wl-action",t?"remove":"addto")},fragments:function(t){if("undefined"==typeof wc_cart_fragments_params)return r.each(t,function(t,i){r(t).replaceWith(i)}),!1;var i;try{i="sessionStorage"in window&&null!==window.sessionStorage,window.sessionStorage.setItem("wc","test"),window.sessionStorage.removeItem("wc"),window.localStorage.setItem("wc","test"),window.localStorage.removeItem("wc")}catch(t){i=!1}if(i)try{var n=r.parseJSON(sessionStorage.getItem(wc_cart_fragments_params.fragment_name)),e=wc_cart_fragments_params.ajax_url.toString()+"-wc_cart_hash",o=sessionStorage.getItem(e),a=Cookies.get("woocommerce_cart_hash"),l=sessionStorage.getItem("wc_cart_created");if(null!=o&&""!==o||(o=""),null!=a&&""!==a||(a=""),o&&(null==l||""===l))throw"No cart_created";if(r.each(t,function(t,i){n[t]=i}),localStorage.setItem(e,localStorage.getItem(e)+(new Date).getTime()),sessionStorage.setItem(e,sessionStorage.getItem(e)+(new Date).getTime()),sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(n)),!n||!n["div.widget_shopping_cart_content"]||o!==a)throw"No fragment";r.each(n,function(t,i){r(t).replaceWith(i)}),r(document.body).trigger("wc_fragments_loaded")}catch(t){r(document.body).trigger("wc_fragment_refresh")}}},onActionProduct:function(t,i){var s={form:{},tinv_wishlist_id:t||"",tinv_wishlist_name:i||"",product_type:r(this).attr("data-tinv-wl-producttype"),product_id:r(this).attr("data-tinv-wl-product")||0,product_variation:r(this).attr("data-tinv-wl-productvariation")||0,product_action:r(this).attr("data-tinv-wl-action")||"addto"},n=this;r(n).closest("form.cart[method=post], .tinvwl-loop-button-wrapper").find("input, select, textarea").each(function(){var t=r(this).attr("name"),i=r(this).attr("type"),n=r(this).val(),e=10,o=function(t,i){if("object"==typeof i){for(var n in void 0===t&&(t={}),i)if(""===n){var e=-1;for(e in t)e=e;t[e=parseInt(e)+1]=o(t[n],i[n])}else t[n]=o(t[n],i[n]);return t}return i};if("button"!==i&&void 0!==t&&"attribute_"!=t.substr(0,10)){for(;/^(.+)\[([^\[\]]*?)\]#x2F;.test(t)&&0<e;){var a=t.match(/^(.+)\[([^\[\]]*?)\]#x2F;);if(3===a.length){var l={};l[a[2]]=n,n=l}t=a[1],e--}"checkbox"===i||"radio"===i?r(this).is(":checked")&&(n.length||"object"==typeof n||(n=!0),s.form[t]=o(s.form[t],n)):s.form[t]=o(s.form[t],n)}}),s=o.onPrepareDataAction.call(n,s)||s,r.post(o.api_url,s,function(t){if(o.onDialogHide.call(n.tinvwl_dialog),"object"==typeof t)for(var i in t)"function"==typeof o.onAction[i]&&o.onAction[i].call(n,t[i]);else"function"==typeof o.onAction.msg&&o.onAction.msg.call(n,t)})}},o=r.extend(!0,{},i,t);return r(this).each(function(){if(!r(this).attr("data-tinv-wl-list"))return!1;if(o.dialogbox&&o.dialogbox.length&&(this.tinvwl_dialog=o.dialogbox),this.tinvwl_dialog||(this.tinvwl_dialog=o.onGetDialogBox.call(this)),!this.tinvwl_dialog){var t=r(this).nextAll(o.class.dialogbox).eq(0);t.length&&(this.tinvwl_dialog=t)}if(this.tinvwl_dialog){o.onPrepareDialogBox.call(this.tinvwl_dialog),"function"!=typeof this.tinvwl_dialog.update_list&&(this.tinvwl_dialog.update_list=function(t){var n=r(this).find(o.class.select).eq(0);r(this).find(o.class.newtitle).hide().val(""),n.html(""),r.each(t,function(t,i){o.onCreateWishList.call(n,i)}),o.text_create&&o.onCreateWishList.call(n,{ID:"",title:o.text_create,in:!1}),o.onMultiProductAlreadyIn.call(n,t),o.onSelectWishList.call(n,t),r(this).find(o.class.newtitle).toggle(""===n.val())}),"function"!=typeof this.tinvwl_dialog.show_list&&(this.tinvwl_dialog.show_list=function(){var t=r.parseJSON(r(this).attr("data-tinv-wl-list"))||[];t.length?(t=o.onPrepareList.call(t)||t,this.tinvwl_dialog.update_list(t),o.onDialogShow.call(this.tinvwl_dialog)):o.onActionProduct.call(this)});var e=this;r(this.tinvwl_dialog).find(o.class.dialogbutton).off("click").on("click",function(){var t,i=r(e.tinvwl_dialog).find(o.class.select),n=r(e.tinvwl_dialog).find(o.class.newtitle);i.val()||n.val()?o.onActionProduct.call(e,i.val(),n.val()):((t=n.is(":visible")?n:i).addClass("empty-name-wishlist"),window.setTimeout(function(){t.removeClass("empty-name-wishlist")},1e3))})}r(this).off("click").on("click",o.onClick),o.onInited.call(this,o)})},r(document).ready(function(){r("body").on("click",".tinvwl_add_to_wishlist_button",function(t){if(r(this).is(".disabled-add-wishlist"))return t.preventDefault(),void window.alert(tinvwl_add_to_wishlist.i18n_make_a_selection_text);r(this).is(".inited-add-wishlist")||r(this).tinvwl_to_wishlist({onInited:function(t){r(this).addClass("inited-add-wishlist"),t.onClick.call(this)}})}),r(".variations_form").each(function(){var t=r(this),s=t.find(".tinvwl_add_to_wishlist_button");s.length&&t.on("hide_variation",function(t){t.preventDefault(),s.addClass("disabled-add-wishlist")}).on("show_variation",function(t,i,n){var e=JSON.parse(s.attr("data-tinv-wl-list")),o=!1,a="1"==window.tinvwl_add_to_wishlist.simple_flow;for(var l in e)e[l].hasOwnProperty("in")&&Array.isArray(e[l].in)&&-1<(e[l].in||[]).indexOf(i.variation_id)&&(o=!0);s.toggleClass("tinvwl-product-in-list",o).toggleClass("tinvwl-product-make-remove",o&&a).attr("data-tinv-wl-action",o&&a?"remove":"addto"),t.preventDefault(),s.removeClass("disabled-add-wishlist")})})})}(jQuery),function(e){e.fn.tinvwl_break_submit=function(t){var i={selector:"input, select, textarea",ifempty:!0,invert:!1,validate:function(){return e(this).val()},rule:function(){var t=e(this).parents("form").eq(0).find(n.selector),i=n.invert;return 0===t.length?n.ifempty:(t.each(function(){i&&!n.invert||!i&&n.invert||(i=Boolean(n.validate.call(e(this))))}),i)}},n=e.extend(!0,{},i,t);return e(this).each(function(){e(this).on("click",function(t){n.rule.call(e(this))||(alert(window.tinvwl_add_to_wishlist.tinvwl_break_submit),t.preventDefault())})})},e(document).ready(function(){e(".tinvwl-break-input").tinvwl_break_submit({selector:".tinvwl-break-input-filed"}),e(".tinvwl-break-checkbox").tinvwl_break_submit({selector:"table td input[type=checkbox]",validate:function(){return e(this).is(":checked")}}),e(".global-cb").on("click",function(){e(this).closest("table").eq(0).find(".product-cb input[type=checkbox], .wishlist-cb input[type=checkbox]").prop("checked",e(this).is(":checked"))})})}(jQuery),function(n){n(document).ready(function(){n("#tinvwl_manage_actions, #tinvwl_product_actions").addClass("form-control").parent().wrapInner('<div class="tinvwl-input-group tinvwl-no-full">').find("button").wrap('<span class="tinvwl-input-group-btn">'),n(".tinv-lists-nav").each(function(){n.trim(n(this).html()).length||n(this).remove()}),n("body").on("click",".social-buttons .social[title!=email]",function(t){var i=window.open(n(this).attr("href"),n(this).attr("title"),"width=420,height=320,resizable=yes,scrollbars=yes,status=yes");i&&(i.focus(),t.preventDefault())}),n("body").on("click",".tinv-wishlist .tinv-overlay, .tinv-wishlist .tinv-close-modal, .tinv-wishlist .tinvwl_button_close",function(t){t.preventDefault(),n(this).parents(".tinv-modal:first").removeClass("tinv-modal-open")}),n("body").on("click",".tinv-wishlist .tinvwl-btn-onclick",function(t){n(this).data("url")&&(t.preventDefault(),window.location=n(this).data("url"))});var t=n(".tinv-wishlist .navigation-button");t.length&&t.each(function(){var t=n(this).find("> li");t.length<5&&t.parent().addClass("tinvwl-btns-count-"+t.length)}),n(".tinv-login .showlogin").unbind("click").on("click",function(t){t.preventDefault(),n(this).closest(".tinv-login").find(".login").toggle()}),n(".tinv-wishlist table.tinvwl-table-manage-list tfoot td").each(function(){n(this).toggle(!!n(this).children().not(".look_in").length||!!n(this).children(".look_in").children().length)})}),n(document.body).on("wc_fragments_refreshed wc_fragments_loaded",function(){n(".wishlist_products_counter").toggleClass("wishlist-counter-with-products","0"!=n(".wishlist_products_counter_number").html())}),n(window).on("load",function(){n(".tinv-wishlist.woocommerce").length&&n(".woocommerce-message").length&&(n(document.body).on("wc_fragments_refreshed.wishlist",function(){if("undefined"==typeof wc_cart_fragments_params)return!1;cart_hash_key=wc_cart_fragments_params.ajax_url.toString()+"-wc_cart_hash",localStorage.setItem(cart_hash_key,localStorage.getItem(cart_hash_key)+(new Date).getTime()),sessionStorage.setItem(cart_hash_key,sessionStorage.getItem(cart_hash_key)+(new Date).getTime()),n(document.body).off("wc_fragments_refreshed.wishlist")}),n(document.body).trigger("updated_wc_div"))})}(jQuery);
1
+ /*! WooCommerce Wishlist Plugin - version 1.8.10
2
* https://wordpress.org/plugins/ti-woocommerce-wishlist/
3
* Copyright (c) 2018;
4
* Licensed GPLv2+ */
5
6
+ !function(r){r.fn.tinvwl_to_wishlist=function(t){var i={api_url:window.location.href,text_create:window.tinvwl_add_to_wishlist.text_create,text_already_in:window.tinvwl_add_to_wishlist.text_already_in,class:{dialogbox:".tinvwl_add_to_select_wishlist",select:".tinvwl_wishlist",newtitle:".tinvwl_new_input",dialogbutton:".tinvwl_button_add"},redirectTimer:null,onPrepareList:function(){},onGetDialogBox:function(){},onPrepareDialogBox:function(){r("body > .tinv-wishlist").length||r("body").append(r("<div>").addClass("tinv-wishlist")),r(this).appendTo("body > .tinv-wishlist")},onCreateWishList:function(t){r(this).append(r("<option>").html(t.title).val(t.ID).toggleClass("tinv_in_wishlist",t.in))},onSelectWishList:function(){},onDialogShow:function(){r(this).addClass("tinv-modal-open")},onDialogHide:function(){r(this).removeClass("tinv-modal-open")},onInited:function(){},onClick:function(){if(r(this).is(".disabled-add-wishlist"))return!1;this.tinvwl_dialog?this.tinvwl_dialog.show_list.call(this):o.onActionProduct.call(this)},onPrepareDataAction:function(){},filterProductAlreadyIn:function(t){t=t||[];var e={};return r("form.cart[method=post], .woocommerce-variation-add-to-cart").find("input, select").each(function(){var t=r(this).attr("name"),i=r(this).attr("type"),n=r(this).val();"checkbox"===i||"radio"===i?r(this).is(":checked")&&(e["form"+t]=n):e["form"+t]=n}),e=e.formvariation_id,t.filter(function(t){if("object"==typeof t.in&&"string"==typeof e){var i=parseInt(e);return 0<=t.in.indexOf(i)}return t.in})},onMultiProductAlreadyIn:function(t){t=t||[];t=o.onPrepareList.call(t)||t,t=o.filterProductAlreadyIn.call(this,t)||t,r(this).parent().parent().find(".already-in").remove();var n="";switch(t.length){case 0:break;default:n=r("<ul>");r.each(t,function(t,i){n.append(r("<li>").html(r("<a>").html(i.title).attr({href:i.url})).val(i.ID))})}n.length&&r(this).closest(".tinv-modal-inner").find("img").after(r("<div>").addClass("already-in").html(o.text_already_in+" ").append(n))},onAction:{redirect:function(t){o.redirectTimer&&clearTimeout(o.redirectTimer),o.redirectTimer=window.setTimeout(function(){window.location.href=t},4e3)},force_redirect:function(t){window.location.href=t},wishlists:function(t){r(this).attr("data-tinv-wl-list",t)},msg:function(t){if(!t)return!1;var i=r(t).eq(0);r("body > .tinv-wishlist").length||r("body").append(r("<div>").addClass("tinv-wishlist")),r("body > .tinv-wishlist").append(i),i.on("click",".tinv-close-modal, .tinvwl_button_close, .tinv-overlay",function(t){t.preventDefault(),i.remove(),o.redirectTimer&&clearTimeout(o.redirectTimer)})},status:function(t){t&&r(this).addClass("tinvwl-product-in-list")},removed:function(t){t&&r(this).removeClass("tinvwl-product-in-list").removeClass("tinvwl-product-make-remove").attr("data-tinv-wl-action","addto")},make_remove:function(t){r(this).toggleClass("tinvwl-product-make-remove",t).attr("data-tinv-wl-action",t?"remove":"addto")},fragments:function(t){if("undefined"==typeof wc_cart_fragments_params)return r.each(t,function(t,i){r(t).replaceWith(i)}),!1;var i;try{i="sessionStorage"in window&&null!==window.sessionStorage,window.sessionStorage.setItem("wc","test"),window.sessionStorage.removeItem("wc"),window.localStorage.setItem("wc","test"),window.localStorage.removeItem("wc")}catch(t){i=!1}if(i)try{var n=r.parseJSON(sessionStorage.getItem(wc_cart_fragments_params.fragment_name)),e=wc_cart_fragments_params.ajax_url.toString()+"-wc_cart_hash",o=sessionStorage.getItem(e),a=Cookies.get("woocommerce_cart_hash"),l=sessionStorage.getItem("wc_cart_created");if(null!=o&&""!==o||(o=""),null!=a&&""!==a||(a=""),o&&(null==l||""===l))throw"No cart_created";if(r.each(t,function(t,i){n[t]=i}),localStorage.setItem(e,localStorage.getItem(e)+(new Date).getTime()),sessionStorage.setItem(e,sessionStorage.getItem(e)+(new Date).getTime()),sessionStorage.setItem(wc_cart_fragments_params.fragment_name,JSON.stringify(n)),!n||!n["div.widget_shopping_cart_content"]||o!==a)throw"No fragment";r.each(n,function(t,i){r(t).replaceWith(i)}),r(document.body).trigger("wc_fragments_loaded")}catch(t){r(document.body).trigger("wc_fragment_refresh")}}},onActionProduct:function(t,i){var s={form:{},tinv_wishlist_id:t||"",tinv_wishlist_name:i||"",product_type:r(this).attr("data-tinv-wl-producttype"),product_id:r(this).attr("data-tinv-wl-product")||0,product_variation:r(this).attr("data-tinv-wl-productvariation")||0,product_action:r(this).attr("data-tinv-wl-action")||"addto"},n=this;r(n).closest("form.cart[method=post], .tinvwl-loop-button-wrapper").find("input, select, textarea").each(function(){var t=r(this).attr("name"),i=r(this).attr("type"),n=r(this).val(),e=10,o=function(t,i){if("object"==typeof i){for(var n in void 0===t&&(t={}),i)if(""===n){var e=-1;for(e in t)e=e;t[e=parseInt(e)+1]=o(t[n],i[n])}else t[n]=o(t[n],i[n]);return t}return i};if("button"!==i&&void 0!==t&&"attribute_"!=t.substr(0,10)){for(;/^(.+)\[([^\[\]]*?)\]#x2F;.test(t)&&0<e;){var a=t.match(/^(.+)\[([^\[\]]*?)\]#x2F;);if(3===a.length){var l={};l[a[2]]=n,n=l}t=a[1],e--}"checkbox"===i||"radio"===i?r(this).is(":checked")&&(n.length||"object"==typeof n||(n=!0),s.form[t]=o(s.form[t],n)):s.form[t]=o(s.form[t],n)}}),s=o.onPrepareDataAction.call(n,s)||s,r.post(o.api_url,s,function(t){if(o.onDialogHide.call(n.tinvwl_dialog),"object"==typeof t)for(var i in t)"function"==typeof o.onAction[i]&&o.onAction[i].call(n,t[i]);else"function"==typeof o.onAction.msg&&o.onAction.msg.call(n,t)})}},o=r.extend(!0,{},i,t);return r(this).each(function(){if(!r(this).attr("data-tinv-wl-list"))return!1;if(o.dialogbox&&o.dialogbox.length&&(this.tinvwl_dialog=o.dialogbox),this.tinvwl_dialog||(this.tinvwl_dialog=o.onGetDialogBox.call(this)),!this.tinvwl_dialog){var t=r(this).nextAll(o.class.dialogbox).eq(0);t.length&&(this.tinvwl_dialog=t)}if(this.tinvwl_dialog){o.onPrepareDialogBox.call(this.tinvwl_dialog),"function"!=typeof this.tinvwl_dialog.update_list&&(this.tinvwl_dialog.update_list=function(t){var n=r(this).find(o.class.select).eq(0);r(this).find(o.class.newtitle).hide().val(""),n.html(""),r.each(t,function(t,i){o.onCreateWishList.call(n,i)}),o.text_create&&o.onCreateWishList.call(n,{ID:"",title:o.text_create,in:!1}),o.onMultiProductAlreadyIn.call(n,t),o.onSelectWishList.call(n,t),r(this).find(o.class.newtitle).toggle(""===n.val())}),"function"!=typeof this.tinvwl_dialog.show_list&&(this.tinvwl_dialog.show_list=function(){var t=r.parseJSON(r(this).attr("data-tinv-wl-list"))||[];t.length?(t=o.onPrepareList.call(t)||t,this.tinvwl_dialog.update_list(t),o.onDialogShow.call(this.tinvwl_dialog)):o.onActionProduct.call(this)});var e=this;r(this.tinvwl_dialog).find(o.class.dialogbutton).off("click").on("click",function(){var t,i=r(e.tinvwl_dialog).find(o.class.select),n=r(e.tinvwl_dialog).find(o.class.newtitle);i.val()||n.val()?o.onActionProduct.call(e,i.val(),n.val()):((t=n.is(":visible")?n:i).addClass("empty-name-wishlist"),window.setTimeout(function(){t.removeClass("empty-name-wishlist")},1e3))})}r(this).off("click").on("click",o.onClick),o.onInited.call(this,o)})},r(document).ready(function(){r("body").on("click",".tinvwl_add_to_wishlist_button",function(t){if(r(this).is(".disabled-add-wishlist"))return t.preventDefault(),void window.alert(tinvwl_add_to_wishlist.i18n_make_a_selection_text);r(this).is(".inited-add-wishlist")||r(this).tinvwl_to_wishlist({onInited:function(t){r(this).addClass("inited-add-wishlist"),t.onClick.call(this)}})}),r(".variations_form").each(function(){var t=r(this),s=t.find(".tinvwl_add_to_wishlist_button");s.length&&t.on("hide_variation",function(t){t.preventDefault(),s.addClass("disabled-add-wishlist")}).on("show_variation",function(t,i,n){var e=JSON.parse(s.attr("data-tinv-wl-list")),o=!1,a="1"==window.tinvwl_add_to_wishlist.simple_flow;for(var l in e)e[l].hasOwnProperty("in")&&Array.isArray(e[l].in)&&-1<(e[l].in||[]).indexOf(i.variation_id)&&(o=!0);s.toggleClass("tinvwl-product-in-list",o).toggleClass("tinvwl-product-make-remove",o&&a).attr("data-tinv-wl-action",o&&a?"remove":"addto"),t.preventDefault(),s.removeClass("disabled-add-wishlist")})})})}(jQuery),function(e){e.fn.tinvwl_break_submit=function(t){var i={selector:"input, select, textarea",ifempty:!0,invert:!1,validate:function(){return e(this).val()},rule:function(){var t=e(this).parents("form").eq(0).find(n.selector),i=n.invert;return 0===t.length?n.ifempty:(t.each(function(){i&&!n.invert||!i&&n.invert||(i=Boolean(n.validate.call(e(this))))}),i)}},n=e.extend(!0,{},i,t);return e(this).each(function(){e(this).on("click",function(t){n.rule.call(e(this))||(alert(window.tinvwl_add_to_wishlist.tinvwl_break_submit),t.preventDefault())})})},e(document).ready(function(){e(".tinvwl-break-input").tinvwl_break_submit({selector:".tinvwl-break-input-filed"}),e(".tinvwl-break-checkbox").tinvwl_break_submit({selector:"table td input[type=checkbox]",validate:function(){return e(this).is(":checked")}}),e(".global-cb").on("click",function(){e(this).closest("table").eq(0).find(".product-cb input[type=checkbox], .wishlist-cb input[type=checkbox]").prop("checked",e(this).is(":checked"))})})}(jQuery),function(n){n(document).ready(function(){n("#tinvwl_manage_actions, #tinvwl_product_actions").addClass("form-control").parent().wrapInner('<div class="tinvwl-input-group tinvwl-no-full">').find("button").wrap('<span class="tinvwl-input-group-btn">'),n(".tinv-lists-nav").each(function(){n.trim(n(this).html()).length||n(this).remove()}),n("body").on("click",".social-buttons .social[title!=email]",function(t){var i=window.open(n(this).attr("href"),n(this).attr("title"),"width=420,height=320,resizable=yes,scrollbars=yes,status=yes");i&&(i.focus(),t.preventDefault())}),n("body").on("click",".tinv-wishlist .tinv-overlay, .tinv-wishlist .tinv-close-modal, .tinv-wishlist .tinvwl_button_close",function(t){t.preventDefault(),n(this).parents(".tinv-modal:first").removeClass("tinv-modal-open")}),n("body").on("click",".tinv-wishlist .tinvwl-btn-onclick",function(t){n(this).data("url")&&(t.preventDefault(),window.location=n(this).data("url"))});var t=n(".tinv-wishlist .navigation-button");t.length&&t.each(function(){var t=n(this).find("> li");t.length<5&&t.parent().addClass("tinvwl-btns-count-"+t.length)}),n(".tinv-login .showlogin").unbind("click").on("click",function(t){t.preventDefault(),n(this).closest(".tinv-login").find(".login").toggle()}),n(".tinv-wishlist table.tinvwl-table-manage-list tfoot td").each(function(){n(this).toggle(!!n(this).children().not(".look_in").length||!!n(this).children(".look_in").children().length)})}),n(document.body).on("wc_fragments_refreshed wc_fragments_loaded",function(){n(".wishlist_products_counter").toggleClass("wishlist-counter-with-products","0"!=n(".wishlist_products_counter_number").html())})}(jQuery);
includes/update.helper.php CHANGED
@@ -170,10 +170,14 @@ class TInvWL_Update {
170
* Clean up empty wishlists.
171
*/
172
function up_p_1_8_9() {
173
- if ( 'button' == tinv_get_option( 'add_to_wishlist_catalog', 'type' ) && empty( tinv_get_option( 'add_to_wishlist_catalog', 'class' ) ) ) {
174
tinv_update_option( 'add_to_wishlist_catalog', 'class', 'button tinvwl-button' );
175
}
176
- if ( 'button' == tinv_get_option( 'add_to_wishlist', 'type' ) && empty( tinv_get_option( 'add_to_wishlist', 'class' ) ) ) {
177
tinv_update_option( 'add_to_wishlist', 'class', 'button tinvwl-button' );
178
}
179
}
170
* Clean up empty wishlists.
171
*/
172
function up_p_1_8_9() {
173
+
174
+ $class = tinv_get_option( 'add_to_wishlist_catalog', 'class' );
175
+ if ( 'button' == tinv_get_option( 'add_to_wishlist_catalog', 'type' ) && empty( $class ) ) {
176
tinv_update_option( 'add_to_wishlist_catalog', 'class', 'button tinvwl-button' );
177
}
178
+
179
+ $class = tinv_get_option( 'add_to_wishlist', 'class' );
180
+ if ( 'button' == tinv_get_option( 'add_to_wishlist', 'type' ) && empty( $class ) ) {
181
tinv_update_option( 'add_to_wishlist', 'class', 'button tinvwl-button' );
182
}
183
}
languages/ti-woocommerce-wishlist.pot CHANGED
@@ -2,10 +2,10 @@
2
# This file is distributed under the GPL-2.0+.
3
msgid ""
4
msgstr ""
5
- "Project-Id-Version: WooCommerce Wishlist Plugin 1.8.9\n"
6
"Report-Msgid-Bugs-To: "
7
"https://wordpress.org/support/plugin/ti-woocommerce-wishlist\n"
8
- "POT-Creation-Date: 2018-07-30 21:53:56+00:00\n"
9
"MIME-Version: 1.0\n"
10
"Content-Type: text/plain; charset=utf-8\n"
11
"Content-Transfer-Encoding: 8bit\n"
@@ -953,7 +953,7 @@ msgstr ""
953
msgid "Action"
954
msgstr ""
955
956
- #: public/wishlist/buttons.class.php:289 public/wishlist/buttons.class.php:393
957
msgid ""
958
"Product %s could not be added to cart because some options are not "
959
"specified. Please, select some product options before adding the products "
@@ -965,41 +965,41 @@ msgid_plural ""
965
msgstr[0] ""
966
msgstr[1] ""
967
968
- #: public/wishlist/buttons.class.php:307
969
msgid "Actions"
970
msgstr ""
971
972
- #: public/wishlist/buttons.class.php:316
973
msgid "Remove"
974
msgstr ""
975
976
- #: public/wishlist/buttons.class.php:437 public/wishlist/view.class.php:295
977
msgid "&ldquo;%s&rdquo;"
978
msgstr ""
979
980
- #: public/wishlist/buttons.class.php:442
981
msgid "%s has been successfully removed from wishlist."
982
msgid_plural "%s have been successfully removed from wishlist."
983
msgstr[0] ""
984
msgstr[1] ""
985
986
- #: public/wishlist/view.class.php:297
987
msgid "%s has been removed from wishlist."
988
msgstr ""
989
990
- #: public/wishlist/view.class.php:299
991
msgid "%s has not been removed from wishlist."
992
msgstr ""
993
994
- #: public/wishlist/view.class.php:390
995
msgid "Return to Wishlist"
996
msgstr ""
997
998
- #: public/wishlist/view.class.php:485
999
msgid "Previous Page"
1000
msgstr ""
1001
1002
- #: public/wishlist/view.class.php:494
1003
msgid "Next Page"
1004
msgstr ""
1005
@@ -1329,7 +1329,7 @@ msgstr ""
1329
msgid "https://templateinvaders.com/"
1330
msgstr ""
1331
1332
- #: public/wishlist/buttons.class.php:286 public/wishlist/buttons.class.php:390
1333
msgctxt "Item name in quotes"
1334
msgid "&ldquo;%s&rdquo;"
1335
msgstr ""
2
# This file is distributed under the GPL-2.0+.
3
msgid ""
4
msgstr ""
5
+ "Project-Id-Version: WooCommerce Wishlist Plugin 1.8.10\n"
6
"Report-Msgid-Bugs-To: "
7
"https://wordpress.org/support/plugin/ti-woocommerce-wishlist\n"
8
+ "POT-Creation-Date: 2018-08-14 07:15:40+00:00\n"
9
"MIME-Version: 1.0\n"
10
"Content-Type: text/plain; charset=utf-8\n"
11
"Content-Transfer-Encoding: 8bit\n"
953
msgid "Action"
954
msgstr ""
955
956
+ #: public/wishlist/buttons.class.php:298 public/wishlist/buttons.class.php:413
957
msgid ""
958
"Product %s could not be added to cart because some options are not "
959
"specified. Please, select some product options before adding the products "
965
msgstr[0] ""
966
msgstr[1] ""
967
968
+ #: public/wishlist/buttons.class.php:316
969
msgid "Actions"
970
msgstr ""
971
972
+ #: public/wishlist/buttons.class.php:325
973
msgid "Remove"
974
msgstr ""
975
976
+ #: public/wishlist/buttons.class.php:457 public/wishlist/view.class.php:308
977
msgid "&ldquo;%s&rdquo;"
978
msgstr ""
979
980
+ #: public/wishlist/buttons.class.php:470
981
msgid "%s has been successfully removed from wishlist."
982
msgid_plural "%s have been successfully removed from wishlist."
983
msgstr[0] ""
984
msgstr[1] ""
985
986
+ #: public/wishlist/view.class.php:318
987
msgid "%s has been removed from wishlist."
988
msgstr ""
989
990
+ #: public/wishlist/view.class.php:320
991
msgid "%s has not been removed from wishlist."
992
msgstr ""
993
994
+ #: public/wishlist/view.class.php:451
995
msgid "Return to Wishlist"
996
msgstr ""
997
998
+ #: public/wishlist/view.class.php:546
999
msgid "Previous Page"
1000
msgstr ""
1001
1002
+ #: public/wishlist/view.class.php:555
1003
msgid "Next Page"
1004
msgstr ""
1005
1329
msgid "https://templateinvaders.com/"
1330
msgstr ""
1331
1332
+ #: public/wishlist/buttons.class.php:295 public/wishlist/buttons.class.php:410
1333
msgctxt "Item name in quotes"
1334
msgid "&ldquo;%s&rdquo;"
1335
msgstr ""
public/addtowishlist.class.php CHANGED
@@ -563,7 +563,7 @@ class TInvWL_Public_AddToWishlist {
563
$icon .= $icon_class;
564
$variation_id = ( ( $this->is_loop && 'variable' === ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $this->product->product_type : $this->product->get_type() ) ) ? $this->variation_id : ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $this->product->variation_id : ( $this->product->is_type( 'variation' ) ? $this->product->get_id() : 0 ) ) );
565
foreach ( $this->wishlist as $value ) {
566
- if ( $value['in'] ) {
567
$icon .= ' tinvwl-product-in-list';
568
if ( tinv_get_option( 'general', 'simple_flow' ) ) {
569
if ( $this->is_loop ) {
563
$icon .= $icon_class;
564
$variation_id = ( ( $this->is_loop && 'variable' === ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $this->product->product_type : $this->product->get_type() ) ) ? $this->variation_id : ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $this->product->variation_id : ( $this->product->is_type( 'variation' ) ? $this->product->get_id() : 0 ) ) );
565
foreach ( $this->wishlist as $value ) {
566
+ if ( $value['in'] && in_array( $variation_id, $value['in'] ) ) {
567
$icon .= ' tinvwl-product-in-list';
568
if ( tinv_get_option( 'general', 'simple_flow' ) ) {
569
if ( $this->is_loop ) {
public/wishlist/buttons.class.php CHANGED
@@ -260,24 +260,33 @@ class TInvWL_Public_Wishlist_Buttons {
260
public static function add_all( $wishlist, $selected = array(), $_quantity = array(), $owner = false ) {
261
$products = self::get_current_products( $wishlist );
262
$result = $errors = array();
263
- foreach ( $products as $product ) {
264
- $product_data = wc_get_product( $product['variation_id'] ? $product['variation_id'] : $product['product_id'] );
265
266
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
267
$redirect_url = $product_data->add_to_cart_url();
268
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
269
270
- if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $product_data, $redirect_url, $product ) ) {
271
- $errors[] = $product['product_id'];
272
continue;
273
}
274
- $product = $product['ID'];
275
- $quantity = array_key_exists( $product, (array) $_quantity ) ? $_quantity[ $product ] : 1;
276
- $add = TInvWL_Public_Cart::add( $wishlist, $product, $quantity );
277
if ( $add ) {
278
$result = tinv_array_merge( $result, $add );
279
} else {
280
- $errors[] = $product['product_id'];
281
}
282
}
283
if ( ! empty( $errors ) ) {
@@ -357,31 +366,42 @@ class TInvWL_Public_Wishlist_Buttons {
357
public static function apply_action_add_selected( $wishlist, $selected = array(), $_quantity = array(), $owner = false ) {
358
if ( ! empty( $selected ) ) {
359
$result = $errors = array();
360
- foreach ( $selected as $product ) {
361
$wlp = null;
362
if ( 0 === $wishlist['ID'] ) {
363
$wlp = TInvWL_Product_Local::instance();
364
} else {
365
$wlp = new TInvWL_Product( $wishlist );
366
}
367
- $_product = $wlp->get_wishlist( array( 'ID' => $product ) );
368
$_product = array_shift( $_product );
369
if ( ! empty( $_product ) && ! empty( $_product['data'] ) ) {
370
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
371
$redirect_url = $_product['data']->add_to_cart_url();
372
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
373
374
if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $_product['data'], $redirect_url, $_product ) ) {
375
$errors[] = $_product['product_id'];
376
continue;
377
}
378
}
379
- $quantity = array_key_exists( $product, (array) $_quantity ) ? $_quantity[ $product ] : 1;
380
- $add = TInvWL_Public_Cart::add( $wishlist, $product, $quantity );
381
if ( $add ) {
382
$result = tinv_array_merge( $result, $add );
383
} else {
384
- $errors[] = $product['product_id'];
385
}
386
}
387
if ( ! empty( $errors ) ) {
@@ -439,13 +459,17 @@ class TInvWL_Public_Wishlist_Buttons {
439
}
440
441
if ( ! empty( $titles ) ) {
442
wc_add_notice( sprintf( _n( '%s has been successfully removed from wishlist.', '%s have been successfully removed from wishlist.', count( $titles ), 'ti-woocommerce-wishlist' ), wc_format_list_of_items( $titles ) ) );
443
}
444
445
- if ( ! is_user_logged_in() && ! empty( $titles2 ) ) {
446
- wp_safe_redirect( tinv_url_wishlist() );
447
- }
448
-
449
return true;
450
}
451
260
public static function add_all( $wishlist, $selected = array(), $_quantity = array(), $owner = false ) {
261
$products = self::get_current_products( $wishlist );
262
$result = $errors = array();
263
+ foreach ( $products as $_product ) {
264
+ $product_data = wc_get_product( $_product['variation_id'] ? $_product['variation_id'] : $_product['product_id'] );
265
+
266
+ global $product;
267
+ // store global product data.
268
+ $_product_tmp = $product;
269
+ // override global product data.
270
+ $product = $product_data;
271
272
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
273
$redirect_url = $product_data->add_to_cart_url();
274
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
275
276
+ // restore global product data.
277
+ $product = $_product_tmp;
278
+
279
+ if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $product_data, $redirect_url, $_product ) ) {
280
+ $errors[] = $_product['product_id'];
281
continue;
282
}
283
+ $_product = $_product['ID'];
284
+ $quantity = array_key_exists( $_product, (array) $_quantity ) ? $_quantity[ $_product ] : 1;
285
+ $add = TInvWL_Public_Cart::add( $wishlist, $_product, $quantity );
286
if ( $add ) {
287
$result = tinv_array_merge( $result, $add );
288
} else {
289
+ $errors[] = $_product['product_id'];
290
}
291
}
292
if ( ! empty( $errors ) ) {
366
public static function apply_action_add_selected( $wishlist, $selected = array(), $_quantity = array(), $owner = false ) {
367
if ( ! empty( $selected ) ) {
368
$result = $errors = array();
369
+ foreach ( $selected as $id ) {
370
$wlp = null;
371
if ( 0 === $wishlist['ID'] ) {
372
$wlp = TInvWL_Product_Local::instance();
373
} else {
374
$wlp = new TInvWL_Product( $wishlist );
375
}
376
+ $_product = $wlp->get_wishlist( array( 'ID' => $id ) );
377
$_product = array_shift( $_product );
378
if ( ! empty( $_product ) && ! empty( $_product['data'] ) ) {
379
+
380
+ global $product;
381
+ // store global product data.
382
+ $_product_tmp = $product;
383
+ // override global product data.
384
+ $product = $_product['data'];
385
+
386
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
387
$redirect_url = $_product['data']->add_to_cart_url();
388
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
389
390
+
391
+ // restore global product data.
392
+ $product = $_product_tmp;
393
+
394
if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $_product['data'], $redirect_url, $_product ) ) {
395
$errors[] = $_product['product_id'];
396
continue;
397
}
398
}
399
+ $quantity = array_key_exists( $id, (array) $_quantity ) ? $_quantity[ $id ] : 1;
400
+ $add = TInvWL_Public_Cart::add( $wishlist, $id, $quantity );
401
if ( $add ) {
402
$result = tinv_array_merge( $result, $add );
403
} else {
404
+ $errors[] = $id['product_id'];
405
}
406
}
407
if ( ! empty( $errors ) ) {
459
}
460
461
if ( ! empty( $titles ) ) {
462
+ add_action( 'tinvwl_before_wishlist', array(
463
+ 'TInvWL_Public_Wishlist_View',
464
+ 'check_cart_hash'
465
+ ), 99, 1 );
466
+ add_action( 'woocommerce_set_cart_cookies', array(
467
+ 'TInvWL_Public_Wishlist_View',
468
+ 'reset_cart_hash'
469
+ ), 199, 1 );
470
wc_add_notice( sprintf( _n( '%s has been successfully removed from wishlist.', '%s have been successfully removed from wishlist.', count( $titles ), 'ti-woocommerce-wishlist' ), wc_format_list_of_items( $titles ) ) );
471
}
472
473
return true;
474
}
475
public/wishlist/view.class.php CHANGED
@@ -72,6 +72,8 @@ class TInvWL_Public_Wishlist_View {
72
* Defined shortcode and hooks
73
*/
74
function define_hooks() {
75
add_action( 'wp', array( $this, 'wishlist_action' ), 0 );
76
77
add_action( 'tinvwl_before_wishlist', array( $this, 'wishlist_header' ) );
@@ -86,6 +88,17 @@ class TInvWL_Public_Wishlist_View {
86
TInvWL_Public_Wishlist_Buttons::init( $this->_name );
87
}
88
89
/**
90
* Change Text for external product
91
*
@@ -294,6 +307,14 @@ class TInvWL_Public_Wishlist_View {
294
}
295
$title = sprintf( __( '&ldquo;%s&rdquo;', 'ti-woocommerce-wishlist' ), $product_data['data']->get_title() );
296
if ( $wlp->remove( $product_data ) ) {
297
wc_add_notice( sprintf( __( '%s has been removed from wishlist.', 'ti-woocommerce-wishlist' ), $title ) );
298
} else {
299
wc_add_notice( sprintf( __( '%s has not been removed from wishlist.', 'ti-woocommerce-wishlist' ), $title ), 'error' );
@@ -304,6 +325,37 @@ class TInvWL_Public_Wishlist_View {
304
do_action( 'tinvwl_action_' . $post['tinvwl-action'], $wishlist, $post['wishlist_pr'], $post['wishlist_qty'], $owner ); // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidHookName.UseUnderscores
305
}
306
307
/**
308
* Apply action add to cart
309
*
@@ -331,18 +383,27 @@ class TInvWL_Public_Wishlist_View {
331
return false;
332
}
333
334
- $product = $wlp->get_wishlist( array( 'ID' => $id ) );
335
- $product = array_shift( $product );
336
- if ( empty( $product ) || empty( $product['data'] ) ) {
337
return false;
338
}
339
340
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
341
- $redirect_url = $product['data']->add_to_cart_url();
342
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
343
344
- if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $product['data'], $redirect_url, $product ) ) {
345
- wp_redirect( apply_filters( 'tinvwl_product_add_to_cart_redirect_url', $redirect_url, $product['data'], $product ) ); // @codingStandardsIgnoreLine WordPress.VIP.RestrictedFunctions.wp_redirect
346
die();
347
} elseif ( apply_filters( 'tinvwl_allow_addtocart_in_wishlist', true, $wishlist, $owner ) ) {
348
$add = TInvWL_Public_Cart::add( $wishlist, $id, $quantity );
@@ -361,14 +422,14 @@ class TInvWL_Public_Wishlist_View {
361
*
362
* @param array $atts Array parameter for shortcode.
363
*
364
- * @return boolean
365
*/
366
function htmloutput( $atts ) {
367
$wishlist = $this->get_current_wishlist();
368
369
if ( empty( $wishlist ) ) {
370
$id = get_query_var( 'tinvwlID', null );
371
- if ( empty( $id ) && ( is_user_logged_in() || tinv_get_option( 'general', 'guests' ) ) ) {
372
return $this->wishlist_empty( array(), array(
373
'ID' => '',
374
'author' => get_current_user_id(),
72
* Defined shortcode and hooks
73
*/
74
function define_hooks() {
75
+ add_action( 'template_redirect', array( $this, 'login_redirect' ) );
76
+
77
add_action( 'wp', array( $this, 'wishlist_action' ), 0 );
78
79
add_action( 'tinvwl_before_wishlist', array( $this, 'wishlist_header' ) );
88
TInvWL_Public_Wishlist_Buttons::init( $this->_name );
89
}
90
91
+
92
+ /**
93
+ * Redirect guests to login page.
94
+ */
95
+ public function login_redirect() {
96
+ if ( is_page( apply_filters( 'wpml_object_id', tinv_get_option( 'page', 'wishlist' ), 'page', true ) ) && ! is_user_logged_in() && tinv_get_option( 'general', 'require_login' ) ) {
97
+ wp_safe_redirect( wc_get_page_permalink( 'myaccount' ) );
98
+ exit;
99
+ }
100
+ }
101
+
102
/**
103
* Change Text for external product
104
*
307
}
308
$title = sprintf( __( '&ldquo;%s&rdquo;', 'ti-woocommerce-wishlist' ), $product_data['data']->get_title() );
309
if ( $wlp->remove( $product_data ) ) {
310
+ add_action( 'tinvwl_before_wishlist', array(
311
+ 'TInvWL_Public_Wishlist_View',
312
+ 'check_cart_hash'
313
+ ), 99, 1 );
314
+ add_action( 'woocommerce_set_cart_cookies', array(
315
+ 'TInvWL_Public_Wishlist_View',
316
+ 'reset_cart_hash'
317
+ ), 99, 1 );
318
wc_add_notice( sprintf( __( '%s has been removed from wishlist.', 'ti-woocommerce-wishlist' ), $title ) );
319
} else {
320
wc_add_notice( sprintf( __( '%s has not been removed from wishlist.', 'ti-woocommerce-wishlist' ), $title ), 'error' );
325
do_action( 'tinvwl_action_' . $post['tinvwl-action'], $wishlist, $post['wishlist_pr'], $post['wishlist_qty'], $owner ); // @codingStandardsIgnoreLine WordPress.NamingConventions.ValidHookName.UseUnderscores
326
}
327
328
+ /**
329
+ * Check cart hash to trigger WC fragments refresh on wishlist update.
330
+ *
331
+ * @param $wishlist
332
+ */
333
+ public static function check_cart_hash( $wishlist ) {
334
+ wp_add_inline_script( 'woocommerce', "
335
+ jQuery(document).ready(function($){
336
+ if ( typeof wc_cart_fragments_params === 'undefined' ) {
337
+ return false;
338
+ }
339
+
340
+ var cart_hash_key = wc_cart_fragments_params.cart_hash_key,
341
+ cart_hash = sessionStorage.getItem( cart_hash_key );
342
+
343
+ if ( cart_hash === null || cart_hash === undefined || cart_hash === '' ) {
344
+ sessionStorage.setItem( cart_hash_key, 'empty' );
345
+ }
346
+ });
347
+ " );
348
+ }
349
+
350
+ /**
351
+ * Reset cart hash to trigger WC fragments refresh on wishlist update.
352
+ *
353
+ * @param bool $set
354
+ */
355
+ public static function reset_cart_hash( $set ) {
356
+ wc_setcookie( 'woocommerce_cart_hash', 'reset', time() - HOUR_IN_SECONDS );
357
+ }
358
+
359
/**
360
* Apply action add to cart
361
*
383
return false;
384
}
385
386
+ $_product = $wlp->get_wishlist( array( 'ID' => $id ) );
387
+ $_product = array_shift( $_product );
388
+ if ( empty( $_product ) || empty( $_product['data'] ) ) {
389
return false;
390
}
391
392
+ global $product;
393
+ // store global product data.
394
+ $_product_tmp = $product;
395
+ // override global product data.
396
+ $product = $_product['data'];
397
+
398
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
399
+ $redirect_url = $_product['data']->add_to_cart_url();
400
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
401
402
+ // restore global product data.
403
+ $product = $_product_tmp;
404
+
405
+ if ( apply_filters( 'tinvwl_product_add_to_cart_need_redirect', false, $_product['data'], $redirect_url, $_product ) ) {
406
+ wp_redirect( apply_filters( 'tinvwl_product_add_to_cart_redirect_url', $redirect_url, $_product['data'], $_product ) ); // @codingStandardsIgnoreLine WordPress.VIP.RestrictedFunctions.wp_redirect
407
die();
408
} elseif ( apply_filters( 'tinvwl_allow_addtocart_in_wishlist', true, $wishlist, $owner ) ) {
409
$add = TInvWL_Public_Cart::add( $wishlist, $id, $quantity );
422
*
423
* @param array $atts Array parameter for shortcode.
424
*
425
+ * @return mixed
426
*/
427
function htmloutput( $atts ) {
428
$wishlist = $this->get_current_wishlist();
429
430
if ( empty( $wishlist ) ) {
431
$id = get_query_var( 'tinvwlID', null );
432
+ if ( empty( $id ) && ( is_user_logged_in() || ! tinv_get_option( 'general', 'require_login' ) ) ) {
433
return $this->wishlist_empty( array(), array(
434
'ID' => '',
435
'author' => get_current_user_id(),
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://templateinvaders.com/?utm_source=wordpressorg&utm_content=d
4
Tags: wishlist, woocommerce, woocommerce wishlist, e-commerce, ecommerce
5
Requires at least: 4.5
6
Tested up to: 4.9
7
- Stable tag: 1.8.9
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
@@ -130,6 +130,15 @@ If you get stuck, you can ask for help in the [Plugin Forum](https://wordpress.o
130
131
132
== Changelog ==
133
= 1.8.9 =
134
*Release Date - 30 July 2018*
135
4
Tags: wishlist, woocommerce, woocommerce wishlist, e-commerce, ecommerce
5
Requires at least: 4.5
6
Tested up to: 4.9
7
+ Stable tag: 1.8.10
8
License: GPLv3
9
License URI: https://www.gnu.org/licenses/gpl-3.0.html
10
130
131
132
== Changelog ==
133
+ = 1.8.10 =
134
+ *Release Date - 13 August 2018*
135
+
136
+ * Fixed "wishlist not found" issue when a guest browsing empty wishlist page
137
+ * Fixed "product in wishlist" button state for a variable product type
138
+ * Fixed issue with products counter update on product(s) removed from a wishlist
139
+ * Fixed fatal errors when 3rd party code using global product object outside a loop
140
+ * Fixed fatal error in upgrading method for PHP prior 5.5 versions
141
+
142
= 1.8.9 =
143
*Release Date - 30 July 2018*
144
templates/ti-wishlist.php CHANGED
@@ -1,161 +1,161 @@
1
- <?php
2
- /**
3
- * The Template for displaying wishlist.
4
- *
5
- * @version 1.8.8
6
- * @package TInvWishlist\Template
7
- */
8
-
9
- if ( ! defined( 'ABSPATH' ) ) {
10
- exit; // Exit if accessed directly.
11
- }
12
- wp_enqueue_script( 'tinvwl' );
13
- ?>
14
- <div class="tinv-wishlist woocommerce tinv-wishlist-clear">
15
- <?php do_action( 'tinvwl_before_wishlist', $wishlist ); ?>
16
- <?php if ( function_exists( 'wc_print_notices' ) ) {
17
- wc_print_notices();
18
- } ?>
19
- <form action="<?php echo esc_url( tinv_url_wishlist() ); ?>" method="post" autocomplete="off">
20
- <?php do_action( 'tinvwl_before_wishlist_table', $wishlist ); ?>
21
- <table class="tinvwl-table-manage-list">
22
- <thead>
23
- <tr>
24
- <?php if ( isset( $wishlist_table['colm_checkbox'] ) && $wishlist_table['colm_checkbox'] ) { ?>
25
- <th class="product-cb"><input type="checkbox" class="global-cb"></th>
26
- <?php } ?>
27
- <th class="product-remove"></th>
28
- <th class="product-thumbnail">&nbsp;</th>
29
- <th class="product-name"><span
30
- class="tinvwl-full"><?php esc_html_e( 'Product Name', 'ti-woocommerce-wishlist' ); ?></span><span
31
- class="tinvwl-mobile"><?php esc_html_e( 'Product', 'ti-woocommerce-wishlist' ); ?></span></th>
32
- <?php if ( isset( $wishlist_table_row['colm_price'] ) && $wishlist_table_row['colm_price'] ) { ?>
33
- <th class="product-price"><?php esc_html_e( 'Unit Price', 'ti-woocommerce-wishlist' ); ?></th>
34
- <?php } ?>
35
- <?php if ( isset( $wishlist_table_row['colm_date'] ) && $wishlist_table_row['colm_date'] ) { ?>
36
- <th class="product-date"><?php esc_html_e( 'Date Added', 'ti-woocommerce-wishlist' ); ?></th>
37
- <?php } ?>
38
- <?php if ( isset( $wishlist_table_row['colm_stock'] ) && $wishlist_table_row['colm_stock'] ) { ?>
39
- <th class="product-stock"><?php esc_html_e( 'Stock Status', 'ti-woocommerce-wishlist' ); ?></th>
40
- <?php } ?>
41
- <?php if ( isset( $wishlist_table_row['add_to_cart'] ) && $wishlist_table_row['add_to_cart'] ) { ?>
42
- <th class="product-action">&nbsp;</th>
43
- <?php } ?>
44
- </tr>
45
- </thead>
46
- <tbody>
47
- <?php do_action( 'tinvwl_wishlist_contents_before' ); ?>
48
-
49
- <?php
50
- foreach ( $products as $wl_product ) {
51
- $product = apply_filters( 'tinvwl_wishlist_item', $wl_product['data'] );
52
- unset( $wl_product['data'] );
53
- if ( $wl_product['quantity'] > 0 && apply_filters( 'tinvwl_wishlist_item_visible', true, $wl_product, $product ) ) {
54
- $product_url = apply_filters( 'tinvwl_wishlist_item_url', $product->get_permalink(), $wl_product, $product );
55
- do_action( 'tinvwl_wishlist_row_before', $wl_product, $product );
56
- ?>
57
- <tr class="<?php echo esc_attr( apply_filters( 'tinvwl_wishlist_item_class', 'wishlist_item', $wl_product, $product ) ); ?>">
58
- <?php if ( isset( $wishlist_table['colm_checkbox'] ) && $wishlist_table['colm_checkbox'] ) { ?>
59
- <td class="product-cb">
60
- <?php
61
- echo apply_filters( 'tinvwl_wishlist_item_cb', sprintf( // WPCS: xss ok.
62
- '<input type="checkbox" name="wishlist_pr[]" value="%d">', esc_attr( $wl_product['ID'] )
63
- ), $wl_product, $product );
64
- ?>
65
- </td>
66
- <?php } ?>
67
- <td class="product-remove">
68
- <button type="submit" name="tinvwl-remove"
69
- value="<?php echo esc_attr( $wl_product['ID'] ); ?>"><i class="ftinvwl ftinvwl-times"></i>
70
- </button>
71
- </td>
72
- <td class="product-thumbnail">
73
- <?php
74
- $thumbnail = apply_filters( 'tinvwl_wishlist_item_thumbnail', $product->get_image(), $wl_product, $product );
75
-
76
- if ( ! $product->is_visible() ) {
77
- echo $thumbnail; // WPCS: xss ok.
78
- } else {
79
- printf( '<a href="%s">%s</a>', esc_url( $product_url ), $thumbnail ); // WPCS: xss ok.
80
- }
81
- ?>
82
- </td>
83
- <td class="product-name">
84
- <?php
85
- if ( ! $product->is_visible() ) {
86
- echo apply_filters( 'tinvwl_wishlist_item_name', $product->get_title(), $wl_product, $product ) . '&nbsp;'; // WPCS: xss ok.
87
- } else {
88
- echo apply_filters( 'tinvwl_wishlist_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_url ), $product->get_title() ), $wl_product, $product ); // WPCS: xss ok.
89
- }
90
-
91
- echo apply_filters( 'tinvwl_wishlist_item_meta_data', tinv_wishlist_get_item_data( $product, $wl_product ), $wl_product, $product ); // WPCS: xss ok.
92
- ?>
93
- </td>
94
- <?php if ( isset( $wishlist_table_row['colm_price'] ) && $wishlist_table_row['colm_price'] ) { ?>
95
- <td class="product-price">
96
- <?php
97
- echo apply_filters( 'tinvwl_wishlist_item_price', $product->get_price_html(), $wl_product, $product ); // WPCS: xss ok.
98
- ?>
99
- </td>
100
- <?php } ?>
101
- <?php if ( isset( $wishlist_table_row['colm_date'] ) && $wishlist_table_row['colm_date'] ) { ?>
102
- <td class="product-date">
103
- <?php
104
- echo apply_filters( 'tinvwl_wishlist_item_date', sprintf( // WPCS: xss ok.
105
- '<time class="entry-date" datetime="%1$s">%2$s</time>', $wl_product['date'], mysql2date( get_option( 'date_format' ), $wl_product['date'] )
106
- ), $wl_product, $product );
107
- ?>
108
- </td>
109
- <?php } ?>
110
- <?php if ( isset( $wishlist_table_row['colm_stock'] ) && $wishlist_table_row['colm_stock'] ) { ?>
111
- <td class="product-stock">
112
- <?php
113
- $availability = (array) $product->get_availability();
114
- if ( ! array_key_exists( 'availability', $availability ) ) {
115
- $availability['availability'] = '';
116
- }
117
- if ( ! array_key_exists( 'class', $availability ) ) {
118
- $availability['class'] = '';
119
- }
120
- $availability_html = empty( $availability['availability'] ) ? '<p class="stock ' . esc_attr( $availability['class'] ) . '"><span><i class="ftinvwl ftinvwl-check"></i></span><span class="tinvwl-txt">' . esc_html__( 'In stock', 'ti-woocommerce-wishlist' ) . '</span></p>' : '<p class="stock ' . esc_attr( $availability['class'] ) . '"><span><i class="ftinvwl ftinvwl-'.(('out-of-stock' === esc_attr( $availability['class'] )? 'times':'check')).'"></i></span><span>' . esc_html( $availability['availability'] ) . '</span></p>';
121
-
122
- echo apply_filters( 'tinvwl_wishlist_item_status', $availability_html, $availability['availability'], $wl_product, $product ); // WPCS: xss ok.
123
- ?>
124
- </td>
125
- <?php } ?>
126
- <?php if ( isset( $wishlist_table_row['add_to_cart'] ) && $wishlist_table_row['add_to_cart'] ) { ?>
127
- <td class="product-action">
128
- <?php
129
- if ( apply_filters( 'tinvwl_wishlist_item_action_add_to_cart', $wishlist_table_row['add_to_cart'], $wl_product, $product ) ) {
130
- ?>
131
- <button class="button alt" name="tinvwl-add-to-cart"
132
- value="<?php echo esc_attr( $wl_product['ID'] ); ?>"><i
133
- class="ftinvwl ftinvwl-shopping-cart"></i><span
134
- class="tinvwl-txt"><?php echo esc_html( apply_filters( 'tinvwl_wishlist_item_add_to_cart', $wishlist_table_row['text_add_to_cart'], $wl_product, $product ) ); ?></span>
135
- </button>
136
- <?php } ?>
137
- </td>
138
- <?php } ?>
139
- </tr>
140
- <?php
141
- do_action( 'tinvwl_wishlist_row_after', $wl_product, $product );
142
- } // End if().
143
- } // End foreach().
144
- ?>
145
- <?php do_action( 'tinvwl_wishlist_contents_after' ); ?>
146
- </tbody>
147
- <tfoot>
148
- <tr>
149
- <td colspan="100">
150
- <?php do_action( 'tinvwl_after_wishlist_table', $wishlist ); ?>
151
- <?php wp_nonce_field( 'tinvwl_wishlist_owner', 'wishlist_nonce' ); ?>
152
- </td>
153
- </tr>
154
- </tfoot>
155
- </table>
156
- </form>
157
- <?php do_action( 'tinvwl_after_wishlist', $wishlist ); ?>
158
- <div class="tinv-lists-nav tinv-wishlist-clear">
159
- <?php do_action( 'tinvwl_pagenation_wishlist', $wishlist ); ?>
160
- </div>
161
- </div>
1
+ <?php
2
+ /**
3
+ * The Template for displaying wishlist.
4
+ *
5
+ * @version 1.8.8
6
+ * @package TInvWishlist\Template
7
+ */
8
+
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit; // Exit if accessed directly.
11
+ }
12
+ wp_enqueue_script( 'tinvwl' );
13
+ ?>
14
+ <div class="tinv-wishlist woocommerce tinv-wishlist-clear">
15
+ <?php do_action( 'tinvwl_before_wishlist', $wishlist ); ?>
16
+ <?php if ( function_exists( 'wc_print_notices' ) ) {
17
+ wc_print_notices();
18
+ } ?>
19
+ <form action="<?php echo esc_url( tinv_url_wishlist() ); ?>" method="post" autocomplete="off">
20
+ <?php do_action( 'tinvwl_before_wishlist_table', $wishlist ); ?>
21
+ <table class="tinvwl-table-manage-list">
22
+ <thead>
23
+ <tr>
24
+ <?php if ( isset( $wishlist_table['colm_checkbox'] ) && $wishlist_table['colm_checkbox'] ) { ?>
25
+ <th class="product-cb"><input type="checkbox" class="global-cb"></th>
26
+ <?php } ?>
27
+ <th class="product-remove"></th>
28
+ <th class="product-thumbnail">&nbsp;</th>
29
+ <th class="product-name"><span
30
+ class="tinvwl-full"><?php esc_html_e( 'Product Name', 'ti-woocommerce-wishlist' ); ?></span><span
31
+ class="tinvwl-mobile"><?php esc_html_e( 'Product', 'ti-woocommerce-wishlist' ); ?></span></th>
32
+ <?php if ( isset( $wishlist_table_row['colm_price'] ) && $wishlist_table_row['colm_price'] ) { ?>
33
+ <th class="product-price"><?php esc_html_e( 'Unit Price', 'ti-woocommerce-wishlist' ); ?></th>
34
+ <?php } ?>
35
+ <?php if ( isset( $wishlist_table_row['colm_date'] ) && $wishlist_table_row['colm_date'] ) { ?>
36
+ <th class="product-date"><?php esc_html_e( 'Date Added', 'ti-woocommerce-wishlist' ); ?></th>
37
+ <?php } ?>
38
+ <?php if ( isset( $wishlist_table_row['colm_stock'] ) && $wishlist_table_row['colm_stock'] ) { ?>
39
+ <th class="product-stock"><?php esc_html_e( 'Stock Status', 'ti-woocommerce-wishlist' ); ?></th>
40
+ <?php } ?>
41
+ <?php if ( isset( $wishlist_table_row['add_to_cart'] ) && $wishlist_table_row['add_to_cart'] ) { ?>
42
+ <th class="product-action">&nbsp;</th>
43
+ <?php } ?>
44
+ </tr>
45
+ </thead>
46
+ <tbody>
47
+ <?php do_action( 'tinvwl_wishlist_contents_before' ); ?>
48
+
49
+ <?php
50
+ foreach ( $products as $wl_product ) {
51
+ $product = apply_filters( 'tinvwl_wishlist_item', $wl_product['data'] );
52
+ unset( $wl_product['data'] );
53
+ if ( $wl_product['quantity'] > 0 && apply_filters( 'tinvwl_wishlist_item_visible', true, $wl_product, $product ) ) {
54
+ $product_url = apply_filters( 'tinvwl_wishlist_item_url', $product->get_permalink(), $wl_product, $product );
55
+ do_action( 'tinvwl_wishlist_row_before', $wl_product, $product );
56
+ ?>
57
+ <tr class="<?php echo esc_attr( apply_filters( 'tinvwl_wishlist_item_class', 'wishlist_item', $wl_product, $product ) ); ?>">
58
+ <?php if ( isset( $wishlist_table['colm_checkbox'] ) && $wishlist_table['colm_checkbox'] ) { ?>
59
+ <td class="product-cb">
60
+ <?php
61
+ echo apply_filters( 'tinvwl_wishlist_item_cb', sprintf( // WPCS: xss ok.
62
+ '<input type="checkbox" name="wishlist_pr[]" value="%d">', esc_attr( $wl_product['ID'] )
63
+ ), $wl_product, $product );
64
+ ?>
65
+ </td>
66
+ <?php } ?>
67
+ <td class="product-remove">
68
+ <button type="submit" name="tinvwl-remove"
69
+ value="<?php echo esc_attr( $wl_product['ID'] ); ?>"><i class="ftinvwl ftinvwl-times"></i>
70
+ </button>
71
+ </td>
72
+ <td class="product-thumbnail">
73
+ <?php
74
+ $thumbnail = apply_filters( 'tinvwl_wishlist_item_thumbnail', $product->get_image(), $wl_product, $product );
75
+
76
+ if ( ! $product->is_visible() ) {
77
+ echo $thumbnail; // WPCS: xss ok.
78
+ } else {
79
+ printf( '<a href="%s">%s</a>', esc_url( $product_url ), $thumbnail ); // WPCS: xss ok.
80
+ }
81
+ ?>
82
+ </td>
83
+ <td class="product-name">
84
+ <?php
85
+ if ( ! $product->is_visible() ) {
86
+ echo apply_filters( 'tinvwl_wishlist_item_name', $product->get_title(), $wl_product, $product ) . '&nbsp;'; // WPCS: xss ok.
87
+ } else {
88
+ echo apply_filters( 'tinvwl_wishlist_item_name', sprintf( '<a href="%s">%s</a>', esc_url( $product_url ), $product->get_title() ), $wl_product, $product ); // WPCS: xss ok.
89
+ }
90
+
91
+ echo apply_filters( 'tinvwl_wishlist_item_meta_data', tinv_wishlist_get_item_data( $product, $wl_product ), $wl_product, $product ); // WPCS: xss ok.
92
+ ?>
93
+ </td>
94
+ <?php if ( isset( $wishlist_table_row['colm_price'] ) && $wishlist_table_row['colm_price'] ) { ?>
95
+ <td class="product-price">
96
+ <?php
97
+ echo apply_filters( 'tinvwl_wishlist_item_price', $product->get_price_html(), $wl_product, $product ); // WPCS: xss ok.
98
+ ?>
99
+ </td>
100
+ <?php } ?>
101
+ <?php if ( isset( $wishlist_table_row['colm_date'] ) && $wishlist_table_row['colm_date'] ) { ?>
102
+ <td class="product-date">
103
+ <?php
104
+ echo apply_filters( 'tinvwl_wishlist_item_date', sprintf( // WPCS: xss ok.
105
+ '<time class="entry-date" datetime="%1$s">%2$s</time>', $wl_product['date'], mysql2date( get_option( 'date_format' ), $wl_product['date'] )
106
+ ), $wl_product, $product );
107
+ ?>
108
+ </td>
109
+ <?php } ?>
110
+ <?php if ( isset( $wishlist_table_row['colm_stock'] ) && $wishlist_table_row['colm_stock'] ) { ?>
111
+ <td class="product-stock">
112
+ <?php
113
+ $availability = (array) $product->get_availability();
114
+ if ( ! array_key_exists( 'availability', $availability ) ) {
115
+ $availability['availability'] = '';
116
+ }
117
+ if ( ! array_key_exists( 'class', $availability ) ) {
118
+ $availability['class'] = '';
119
+ }
120
+ $availability_html = empty( $availability['availability'] ) ? '<p class="stock ' . esc_attr( $availability['class'] ) . '"><span><i class="ftinvwl ftinvwl-check"></i></span><span class="tinvwl-txt">' . esc_html__( 'In stock', 'ti-woocommerce-wishlist' ) . '</span></p>' : '<p class="stock ' . esc_attr( $availability['class'] ) . '"><span><i class="ftinvwl ftinvwl-'.(('out-of-stock' === esc_attr( $availability['class'] )? 'times':'check')).'"></i></span><span>' . esc_html( $availability['availability'] ) . '</span></p>';
121
+
122
+ echo apply_filters( 'tinvwl_wishlist_item_status', $availability_html, $availability['availability'], $wl_product, $product ); // WPCS: xss ok.
123
+ ?>
124
+ </td>
125
+ <?php } ?>
126
+ <?php if ( isset( $wishlist_table_row['add_to_cart'] ) && $wishlist_table_row['add_to_cart'] ) { ?>
127
+ <td class="product-action">
128
+ <?php
129
+ if ( apply_filters( 'tinvwl_wishlist_item_action_add_to_cart', $wishlist_table_row['add_to_cart'], $wl_product, $product ) ) {
130
+ ?>
131
+ <button class="button alt" name="tinvwl-add-to-cart"
132
+ value="<?php echo esc_attr( $wl_product['ID'] ); ?>"><i
133
+ class="ftinvwl ftinvwl-shopping-cart"></i><span
134
+ class="tinvwl-txt"><?php echo esc_html( apply_filters( 'tinvwl_wishlist_item_add_to_cart', $wishlist_table_row['text_add_to_cart'], $wl_product, $product ) ); ?></span>
135
+ </button>
136
+ <?php } ?>
137
+ </td>
138
+ <?php } ?>
139
+ </tr>
140
+ <?php
141
+ do_action( 'tinvwl_wishlist_row_after', $wl_product, $product );
142
+ } // End if().
143
+ } // End foreach().
144
+ ?>
145
+ <?php do_action( 'tinvwl_wishlist_contents_after' ); ?>
146
+ </tbody>
147
+ <tfoot>
148
+ <tr>
149
+ <td colspan="100">
150
+ <?php do_action( 'tinvwl_after_wishlist_table', $wishlist ); ?>
151
+ <?php wp_nonce_field( 'tinvwl_wishlist_owner', 'wishlist_nonce' ); ?>
152
+ </td>
153
+ </tr>
154
+ </tfoot>
155
+ </table>
156
+ </form>
157
+ <?php do_action( 'tinvwl_after_wishlist', $wishlist ); ?>
158
+ <div class="tinv-lists-nav tinv-wishlist-clear">
159
+ <?php do_action( 'tinvwl_pagenation_wishlist', $wishlist ); ?>
160
+ </div>
161
+ </div>
ti-woocommerce-wishlist.php CHANGED
@@ -4,7 +4,7 @@
4
* Plugin Name: WooCommerce Wishlist Plugin
5
* Plugin URI: https://wordpress.org/plugins/ti-woocommerce-wishlist/
6
* Description: Wishlist functionality for your WooCommerce store.
7
- * Version: 1.8.9
8
* Requires at least: 4.5
9
* Tested up to: 4.9
10
* WC requires at least: 2.6
@@ -41,7 +41,7 @@ if ( ! defined( 'TINVWL_DOMAIN' ) ) {
41
}
42
43
if ( ! defined( 'TINVWL_FVERSION' ) ) {
44
- define( 'TINVWL_FVERSION', '1.8.9' );
45
}
46
47
if ( ! defined( 'TINVWL_LOAD_FREE' ) ) {
4
* Plugin Name: WooCommerce Wishlist Plugin
5
* Plugin URI: https://wordpress.org/plugins/ti-woocommerce-wishlist/
6
* Description: Wishlist functionality for your WooCommerce store.
7
+ * Version: 1.8.10
8
* Requires at least: 4.5
9
* Tested up to: 4.9
10
* WC requires at least: 2.6
41
}
42
43
if ( ! defined( 'TINVWL_FVERSION' ) ) {
44
+ define( 'TINVWL_FVERSION', '1.8.10' );
45
}
46
47
if ( ! defined( 'TINVWL_LOAD_FREE' ) ) {
tinv-wishlists-function.php CHANGED
@@ -709,28 +709,41 @@ if ( ! function_exists( 'tinvwl_add_to_cart_need_redirect' ) ) {
709
* Check if the product is third-party, or has another link added to the cart then redirect to the product page.
710
*
711
* @param boolean $redirect Default value to redirect.
712
- * @param \WC_Product $product Product data.
713
* @param string $redirect_url Current url for redirect.
714
*
715
* @return boolean
716
*/
717
- function tinvwl_add_to_cart_need_redirect( $redirect, $product, $redirect_url ) {
718
if ( $redirect ) {
719
return true;
720
}
721
- if ( 'external' === ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $product->product_type : $product->get_type() ) ) {
722
return true;
723
}
724
725
$need_url_data = array_filter( array_merge( array(
726
- 'variation_id' => ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $product->variation_id : ( $product->is_type( 'variation' ) ? $product->get_id() : 0 ) ),
727
- 'add-to-cart' => ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $product->get_id() : ( $product->is_type( 'variation' ) ? $product->get_parent_id() : $product->get_id() ) ),
728
- ), array_map( 'urlencode', ( version_compare( WC_VERSION, '3.0.0', '<' ) ? ( is_array( $product->variation_data ) ? $product->variation_data : array() ) : array() ) ) ) );
729
- $need_url = apply_filters( 'woocommerce_product_add_to_cart_url', remove_query_arg( 'added-to-cart', add_query_arg( $need_url_data ) ), $product );
730
- $need_url_full = apply_filters( 'woocommerce_product_add_to_cart_url', remove_query_arg( 'added-to-cart', add_query_arg( $need_url_data, $product->get_permalink() ) ), $product );
731
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
732
- $_redirect_url = apply_filters( 'tinvwl_product_add_to_cart_redirect_url', $product->add_to_cart_url(), $product );
733
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
734
if ( $_redirect_url !== $need_url && $_redirect_url !== $need_url_full ) {
735
return true;
736
}
709
* Check if the product is third-party, or has another link added to the cart then redirect to the product page.
710
*
711
* @param boolean $redirect Default value to redirect.
712
+ * @param \WC_Product $_product Product data.
713
* @param string $redirect_url Current url for redirect.
714
*
715
* @return boolean
716
*/
717
+ function tinvwl_add_to_cart_need_redirect( $redirect, $_product, $redirect_url ) {
718
if ( $redirect ) {
719
return true;
720
}
721
+
722
+ if ( 'external' === ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $_product->product_type : $_product->get_type() ) ) {
723
return true;
724
}
725
726
$need_url_data = array_filter( array_merge( array(
727
+ 'variation_id' => ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $_product->variation_id : ( $_product->is_type( 'variation' ) ? $_product->get_id() : 0 ) ),
728
+ 'add-to-cart' => ( version_compare( WC_VERSION, '3.0.0', '<' ) ? $_product->get_id() : ( $_product->is_type( 'variation' ) ? $_product->get_parent_id() : $_product->get_id() ) ),
729
+ ), array_map( 'urlencode', ( version_compare( WC_VERSION, '3.0.0', '<' ) ? ( is_array( $_product->variation_data ) ? $_product->variation_data : array() ) : array() ) ) ) );
730
+
731
+ $need_url = apply_filters( 'woocommerce_product_add_to_cart_url1', remove_query_arg( 'added-to-cart', add_query_arg( $need_url_data ) ), $_product );
732
+ $need_url_full = apply_filters( 'woocommerce_product_add_to_cart_url1', remove_query_arg( 'added-to-cart', add_query_arg( $need_url_data, $_product->get_permalink() ) ), $_product );
733
+
734
+ global $product;
735
+ // store global product data.
736
+ $_product_tmp = $product;
737
+ // override global product data.
738
+ $product = $_product;
739
+
740
add_filter( 'clean_url', 'tinvwl_clean_url', 10, 2 );
741
+ $_redirect_url = apply_filters( 'tinvwl_product_add_to_cart_redirect_url1', $_product->add_to_cart_url(), $_product );
742
remove_filter( 'clean_url', 'tinvwl_clean_url', 10 );
743
+
744
+ // restore global product data.
745
+ $product = $_product_tmp;
746
+
747
if ( $_redirect_url !== $need_url && $_redirect_url !== $need_url_full ) {
748
return true;
749
}