Tim Gieseking
Forum Replies Created
-
Forum: Plugins
In reply to: [Polylang] SiteOrigin Page Builder + Polylang 2.2 speed issuesI’m still seeing this problem in 2.2.1 and have some additional information.
While the problem is related to SiteOrigin Widgets in my case, I’m wondering if there is possibly a larger problem with sidebar widgets. Here is my minimum setup that I used to reproduce:
– Plugins enabled: Polylang, PageBuilder by SiteOrigin, SiteOrigin Widgets Bundled
– My theme loads 13 custom SiteOrigin widgets via the code in the original post.With this setup, Query Monitor shows a load time (on average) of 12 seconds, but does not show any slow queries. Deactivating Polylang or SiteOrigin drops the load time to around 1. Here is where the problem gets more specific:
– I narrowed the problem down to just 2 of my custom widgets, and removing all code from them does not fix the problem. Just the existence of these 2 widget files – with no code in them – slows the site. But removing the widget folders entirely drops the load time significantly.
The thing that these two widgets have in common is that they are the two custom SiteOrigin widgets used heavily throughout the site’s sidebars. I believe there’s only 1 other custom widget that is used once, but these are used frequently. The other widgets are used within page content. I do use other plugin widgets (when activated) and native WP widgets as well. Turning those on and off does not seem to change performance.
One other important piece of information — I have built a lot of custom sidebars using the Custom Sidebars by WPMU Dev. It is not enabled during these tests, so only my themes three sidebars exist, but I am not sure if that changes how data is stored in the database. The sidebars_widget option in wp_options is rather large:
a:77:{s:27:"primary-sidebar-widget-area";a:6:{i:0;s:8:"search-2";i:1;s:14:"recent-posts-2";i:2;s:17:"recent-comments-2";i:3;s:10:"archives-2";i:4;s:12:"categories-2";i:5;s:6:"meta-2";}s:19:"wp_inactive_widgets";a:4:{i:0;s:10:"nav_menu-7";i:1;s:29:"XXXXXXXXX-contactus-widget-12";i:2;s:31:"tribe-events-adv-list-widget-20";i:3;s:21:"tribe-mini-calendar-2";}s:5:"cs-21";a:1:{i:0;s:11:"nav_menu-21";}s:5:"cs-20";a:2:{i:0;s:11:"nav_menu-22";i:1;s:24:"bt-gravity-form-widget-3";}s:5:"cs-22";a:2:{i:0;s:11:"nav_menu-23";i:1;s:25:"bt-gravity-form-widget-51";}s:4:"cs-2";a:5:{i:0;s:10:"nav_menu-3";i:1;s:30:"tribe-events-adv-list-widget-7";i:2;s:7:"text-30";i:3;s:28:"XXXXXXXXX-contactus-widget-2";i:4;s:25:"bt-gravity-form-widget-15";}s:5:"cs-63";a:6:{i:0;s:10:"polylang-2";i:1;s:11:"nav_menu-53";i:2;s:31:"tribe-events-adv-list-widget-48";i:3;s:29:"XXXXXXXXX-contactus-widget-45";i:4;s:7:"text-24";i:5;s:25:"bt-gravity-form-widget-57";}s:5:"cs-65";a:5:{i:0;s:11:"nav_menu-59";i:1;s:31:"tribe-events-adv-list-widget-55";i:2;s:7:"text-36";i:3;s:29:"XXXXXXXXX-contactus-widget-47";i:4;s:25:"bt-gravity-form-widget-68";}s:5:"cs-44";a:4:{i:0;s:11:"nav_menu-39";i:1;s:31:"tribe-events-adv-list-widget-31";i:2;s:28:"XXXXXXXXX-contactus-widget-3";i:3;s:25:"bt-gravity-form-widget-16";}s:5:"cs-27";a:5:{i:0;s:11:"nav_menu-27";i:1;s:31:"tribe-events-adv-list-widget-40";i:2;s:31:"tribe-events-adv-list-widget-63";i:3;s:28:"XXXXXXXXX-contactus-widget-4";i:4;s:25:"bt-gravity-form-widget-23";}s:5:"cs-28";a:8:{i:0;s:10:"polylang-5";i:1;s:11:"nav_menu-26";i:2;s:31:"tribe-events-adv-list-widget-41";i:3;s:7:"text-17";i:4;s:28:"XXXXXXXXX-contactus-widget-5";i:5;s:29:"XXXXXXXXX-contactus-widget-46";i:6;s:7:"text-27";i:7;s:25:"bt-gravity-form-widget-24";}s:5:"cs-72";a:3:{i:0;s:31:"tribe-events-adv-list-widget-65";i:1;s:7:"text-40";i:2;s:29:"XXXXXXXXX-contactus-widget-54";}s:5:"cs-29";a:6:{i:0;s:10:"polylang-3";i:1;s:11:"nav_menu-28";i:2;s:31:"tribe-events-adv-list-widget-42";i:3;s:28:"XXXXXXXXX-contactus-widget-6";i:4;s:7:"text-25";i:5;s:25:"bt-gravity-form-widget-25";}s:5:"cs-43";a:5:{i:0;s:11:"nav_menu-38";i:1;s:31:"tribe-events-adv-list-widget-30";i:2;s:28:"XXXXXXXXX-contactus-widget-7";i:3;s:25:"bt-gravity-form-widget-14";i:4;s:25:"bt-gravity-form-widget-56";}s:5:"cs-40";a:6:{i:0;s:10:"polylang-4";i:1;s:31:"tribe-events-adv-list-widget-28";i:2;s:28:"XXXXXXXXX-contactus-widget-8";i:3;s:7:"text-26";i:4;s:25:"bt-gravity-form-widget-50";i:5;s:25:"bt-gravity-form-widget-75";}s:5:"cs-17";a:2:{i:0;s:11:"nav_menu-18";i:1;s:25:"bt-gravity-form-widget-36";}s:5:"cs-10";a:4:{i:0;s:11:"nav_menu-10";i:1;s:31:"tribe-events-adv-list-widget-12";i:2;s:28:"XXXXXXXXX-contactus-widget-9";i:3;s:25:"bt-gravity-form-widget-37";}s:5:"cs-66";a:3:{i:0;s:11:"nav_menu-60";i:1;s:31:"tribe-events-adv-list-widget-56";i:2;s:25:"bt-gravity-form-widget-69";}s:5:"cs-11";a:3:{i:0;s:11:"nav_menu-12";i:1;s:31:"tribe-events-adv-list-widget-13";i:2;s:25:"bt-gravity-form-widget-38";}s:4:"cs-6";a:3:{i:0;s:10:"nav_menu-5";i:1;s:29:"XXXXXXXXX-contactus-widget-10";i:2;s:25:"bt-gravity-form-widget-39";}s:4:"cs-9";a:4:{i:0;s:10:"nav_menu-9";i:1;s:31:"tribe-events-adv-list-widget-11";i:2;s:29:"XXXXXXXXX-contactus-widget-11";i:3;s:25:"bt-gravity-form-widget-40";}s:4:"cs-8";a:3:{i:0;s:10:"nav_menu-8";i:1;s:29:"XXXXXXXXX-contactus-widget-13";i:2;s:25:"bt-gravity-form-widget-41";}s:5:"cs-14";a:3:{i:0;s:11:"nav_menu-15";i:1;s:29:"XXXXXXXXX-contactus-widget-14";i:2;s:25:"bt-gravity-form-widget-42";}s:4:"cs-1";a:5:{i:0;s:10:"nav_menu-2";i:1;s:31:"tribe-events-adv-list-widget-25";i:2;s:29:"XXXXXXXXX-contactus-widget-15";i:3;s:6:"text-4";i:4;s:25:"bt-gravity-form-widget-43";}s:5:"cs-71";a:4:{i:0;s:11:"nav_menu-65";i:1;s:31:"tribe-events-adv-list-widget-61";i:2;s:29:"XXXXXXXXX-contactus-widget-48";i:3;s:25:"bt-gravity-form-widget-74";}s:5:"cs-18";a:4:{i:0;s:11:"nav_menu-19";i:1;s:31:"tribe-events-adv-list-widget-44";i:2;s:29:"XXXXXXXXX-contactus-widget-17";i:3;s:25:"bt-gravity-form-widget-45";}s:5:"cs-19";a:4:{i:0;s:11:"nav_menu-20";i:1;s:29:"XXXXXXXXX-contactus-widget-16";i:2;s:31:"tribe-events-adv-list-widget-43";i:3;s:25:"bt-gravity-form-widget-44";}s:5:"cs-13";a:3:{i:0;s:11:"nav_menu-14";i:1;s:29:"XXXXXXXXX-contactus-widget-18";i:2;s:25:"bt-gravity-form-widget-46";}s:5:"cs-12";a:4:{i:0;s:11:"nav_menu-13";i:1;s:31:"tribe-events-adv-list-widget-14";i:2;s:29:"XXXXXXXXX-contactus-widget-19";i:3;s:25:"bt-gravity-form-widget-47";}s:5:"cs-15";a:3:{i:0;s:11:"nav_menu-16";i:1;s:29:"XXXXXXXXX-contactus-widget-20";i:2;s:25:"bt-gravity-form-widget-48";}s:5:"cs-16";a:3:{i:0;s:11:"nav_menu-17";i:1;s:29:"XXXXXXXXX-contactus-widget-21";i:2;s:25:"bt-gravity-form-widget-49";}s:5:"cs-26";a:6:{i:0;s:10:"polylang-6";i:1;s:11:"nav_menu-45";i:2;s:31:"tribe-events-adv-list-widget-18";i:3;s:7:"text-39";i:4;s:29:"XXXXXXXXX-contactus-widget-51";i:5;s:29:"XXXXXXXXX-contactus-widget-22";}s:5:"cs-46";a:3:{i:0;s:11:"nav_menu-46";i:1;s:31:"tribe-events-adv-list-widget-32";i:2;s:29:"XXXXXXXXX-contactus-widget-23";}s:5:"cs-47";a:3:{i:0;s:11:"nav_menu-47";i:1;s:31:"tribe-events-adv-list-widget-33";i:2;s:29:"XXXXXXXXX-contactus-widget-24";}s:5:"cs-48";a:4:{i:0;s:11:"nav_menu-48";i:1;s:31:"tribe-events-adv-list-widget-34";i:2;s:7:"text-15";i:3;s:29:"XXXXXXXXX-contactus-widget-25";}s:5:"cs-67";a:2:{i:0;s:11:"nav_menu-61";i:1;s:31:"tribe-events-adv-list-widget-57";}s:5:"cs-49";a:3:{i:0;s:11:"nav_menu-49";i:1;s:31:"tribe-events-adv-list-widget-35";i:2;s:29:"XXXXXXXXX-contactus-widget-26";}s:5:"cs-38";a:2:{i:0;s:11:"nav_menu-35";i:1;s:29:"XXXXXXXXX-contactus-widget-27";}s:5:"cs-39";a:2:{i:0;s:11:"nav_menu-36";i:1;s:31:"tribe-events-adv-list-widget-49";}s:5:"cs-41";a:1:{i:0;s:6:"text-5";}s:5:"cs-52";a:4:{i:0;s:11:"nav_menu-44";i:1;s:31:"tribe-events-adv-list-widget-37";i:2;s:29:"XXXXXXXXX-contactus-widget-42";i:3;s:25:"bt-gravity-form-widget-17";}s:5:"cs-61";a:0:{}s:5:"cs-58";a:4:{i:0;s:10:"nav_menu-6";i:1;s:31:"tribe-events-adv-list-widget-53";i:2;s:7:"text-34";i:3;s:25:"bt-gravity-form-widget-64";}s:5:"cs-42";a:6:{i:0;s:11:"nav_menu-37";i:1;s:31:"tribe-events-adv-list-widget-29";i:2;s:6:"text-7";i:3;s:29:"XXXXXXXXX-contactus-widget-28";i:4;s:25:"bt-gravity-form-widget-18";i:5;s:24:"bt-gravity-form-widget-9";}s:5:"cs-64";a:6:{i:0;s:11:"nav_menu-58";i:1;s:31:"tribe-events-adv-list-widget-54";i:2;s:7:"text-35";i:3;s:29:"XXXXXXXXX-contactus-widget-53";i:4;s:29:"XXXXXXXXX-contactus-widget-52";i:5;s:25:"bt-gravity-form-widget-66";}s:5:"cs-62";a:3:{i:0;s:11:"nav_menu-52";i:1;s:31:"tribe-events-adv-list-widget-47";i:2;s:29:"XXXXXXXXX-contactus-widget-43";}s:5:"cs-70";a:0:{}s:5:"cs-69";a:4:{i:0;s:11:"nav_menu-63";i:1;s:31:"tribe-events-adv-list-widget-59";i:2;s:7:"text-37";i:3;s:25:"bt-gravity-form-widget-72";}s:5:"cs-59";a:4:{i:0;s:11:"nav_menu-64";i:1;s:31:"tribe-events-adv-list-widget-60";i:2;s:7:"text-38";i:3;s:25:"bt-gravity-form-widget-73";}s:4:"cs-5";a:4:{i:0;s:10:"nav_menu-4";i:1;s:30:"tribe-events-adv-list-widget-6";i:2;s:7:"text-28";i:3;s:25:"bt-gravity-form-widget-19";}s:5:"cs-23";a:5:{i:0;s:31:"tribe-events-adv-list-widget-15";i:1;s:29:"XXXXXXXXX-contactus-widget-29";i:2;s:29:"XXXXXXXXX-contactus-widget-30";i:3;s:29:"XXXXXXXXX-contactus-widget-55";i:4;s:25:"bt-gravity-form-widget-20";}s:5:"cs-55";a:4:{i:0;s:11:"nav_menu-54";i:1;s:31:"tribe-events-adv-list-widget-50";i:2;s:7:"text-33";i:3;s:25:"bt-gravity-form-widget-58";}s:5:"cs-57";a:4:{i:0;s:11:"nav_menu-56";i:1;s:31:"tribe-events-adv-list-widget-52";i:2;s:7:"text-32";i:3;s:25:"bt-gravity-form-widget-62";}s:5:"cs-24";a:5:{i:0;s:11:"nav_menu-24";i:1;s:31:"tribe-events-adv-list-widget-16";i:2;s:7:"text-29";i:3;s:29:"XXXXXXXXX-contactus-widget-31";i:4;s:25:"bt-gravity-form-widget-21";}s:5:"cs-56";a:4:{i:0;s:11:"nav_menu-55";i:1;s:31:"tribe-events-adv-list-widget-51";i:2;s:7:"text-31";i:3;s:25:"bt-gravity-form-widget-60";}s:5:"cs-53";a:6:{i:0;s:11:"nav_menu-50";i:1;s:31:"tribe-events-adv-list-widget-62";i:2;s:31:"tribe-events-adv-list-widget-45";i:3;s:29:"XXXXXXXXX-contactus-widget-49";i:4;s:7:"text-22";i:5;s:25:"bt-gravity-form-widget-52";}s:5:"cs-54";a:4:{i:0;s:11:"nav_menu-51";i:1;s:31:"tribe-events-adv-list-widget-46";i:2;s:7:"text-23";i:3;s:25:"bt-gravity-form-widget-54";}s:5:"cs-25";a:3:{i:0;s:11:"nav_menu-25";i:1;s:31:"tribe-events-adv-list-widget-17";i:2;s:25:"bt-gravity-form-widget-22";}s:5:"cs-36";a:2:{i:0;s:11:"nav_menu-34";i:1;s:25:"bt-gravity-form-widget-26";}s:5:"cs-33";a:4:{i:0;s:11:"nav_menu-32";i:1;s:31:"tribe-events-adv-list-widget-21";i:2;s:29:"XXXXXXXXX-contactus-widget-33";i:3;s:25:"bt-gravity-form-widget-27";}s:5:"cs-35";a:5:{i:0;s:11:"nav_menu-33";i:1;s:31:"tribe-events-adv-list-widget-24";i:2;s:27:"bt-cycle-slideshow-widget-2";i:3;s:29:"XXXXXXXXX-contactus-widget-34";i:4;s:25:"bt-gravity-form-widget-28";}s:4:"cs-3";a:3:{i:0;s:6:"text-2";i:1;s:31:"tribe-events-adv-list-widget-22";i:2;s:25:"bt-gravity-form-widget-29";}s:5:"cs-34";a:3:{i:0;s:7:"text-21";i:1;s:31:"tribe-events-adv-list-widget-23";i:2;s:25:"bt-gravity-form-widget-30";}s:5:"cs-45";a:3:{i:0;s:11:"nav_menu-40";i:1;s:29:"XXXXXXXXX-contactus-widget-35";i:2;s:25:"bt-gravity-form-widget-31";}s:5:"cs-30";a:3:{i:0;s:11:"nav_menu-29";i:1;s:29:"XXXXXXXXX-contactus-widget-36";i:2;s:25:"bt-gravity-form-widget-32";}s:5:"cs-31";a:3:{i:0;s:11:"nav_menu-30";i:1;s:29:"XXXXXXXXX-contactus-widget-37";i:2;s:25:"bt-gravity-form-widget-33";}s:5:"cs-32";a:3:{i:0;s:11:"nav_menu-31";i:1;s:29:"XXXXXXXXX-contactus-widget-38";i:2;s:25:"bt-gravity-form-widget-34";}s:5:"cs-51";a:1:{i:0;s:24:"bt-gravity-form-widget-7";}s:5:"cs-37";a:4:{i:0;s:11:"nav_menu-42";i:1;s:29:"XXXXXXXXX-contactus-widget-39";i:2;s:24:"bt-gravity-form-widget-5";i:3;s:13:"media_image-3";}s:5:"cs-50";a:4:{i:0;s:11:"nav_menu-43";i:1;s:29:"XXXXXXXXX-contactus-widget-41";i:2;s:24:"bt-gravity-form-widget-6";i:3;s:13:"media_image-4";}s:5:"cs-68";a:4:{i:0;s:11:"nav_menu-62";i:1;s:31:"tribe-events-adv-list-widget-58";i:2;s:25:"bt-gravity-form-widget-71";i:3;s:13:"media_image-5";}s:4:"cs-4";a:4:{i:0;s:11:"nav_menu-41";i:1;s:31:"tribe-events-adv-list-widget-26";i:2;s:24:"bt-gravity-form-widget-4";i:3;s:13:"media_image-2";}s:24:"blog-sidebar-widget-area";a:4:{i:0;s:30:"tribe-events-adv-list-widget-4";i:1;s:24:"bt-gravity-form-widget-2";i:2;s:27:"XXXXXXXXX-followus-widget-2";i:3;s:29:"XXXXXXXXX-contactus-widget-40";}s:24:"page-sidebar-widget-area";a:0:{}s:25:"store-sidebar-widget-area";a:1:{i:0;s:32:"woocommerce_product_categories-2";}s:9:"mega-menu";a:2:{i:0;s:11:"sow-image-2";i:1;s:11:"sow-image-3";}s:13:"array_version";i:3;}Additionally, I tried to use Theme & Plugin Profiler, but can only get it to display 1 function (include_once).
Function Name Execution calls Total execution time Execution time per call
include_once 1 0.0000586510 0.0000586510
Total 1 0.0000586510 0.0000586510Dev environment is PHP v7.0.18, but this happens on two other servers running different minor versions of PHP 7.0.
Forum: Plugins
In reply to: [Polylang] SiteOrigin Page Builder + Polylang 2.2 speed issuesI downloaded each branch from the github repository. I wanted to share my results in case it sparks any ideas:
1.9.x – The fastest.
2.0.x – Similar, but slightly slower.
2.1.x – This is where the problems seem to begin.
master – Comparable to 2.1, maybe slightly slower.It seems the slashes can be fixed by changing line 593 in frontend.php to:
$dl_json_data = json_encode( $gtm4wp_datalayer_data, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES );A filter then can be used as mentioned above, although I still need to work out a version that works on category pages, etc. I also assume something would have to be worked out for PHP < 5.4.0 (line 595).
Do you see any harm in using JSON_UNESCAPED_SLASHES in your experience?
Thanks,
Tim
Thanks!
One question. I’m looking to implement this myself using a filter (or even modding the plugin, temporarily, if necessary). I have this working:
function eec_product_array_func($data) { if (isset($data['category'])) { $_product_cats = get_the_terms($post->ID, 'product_cat'); if (!empty($_product_cats)) { $product_cat = implode('/', wp_list_pluck($_product_cats, 'name')); $data['category'] = $product_cat; } } return $data; } add_filter(GTM4WP_WPFILTER_EEC_PRODUCT_ARRAY, 'eec_product_array_func');NOTE: This is not final code, as it only works correctly on the product page and not all instances of this filter. Included for an example right now.
The problem is esc_js still causes the separators to come out \/ between category names. Do you have a recommendation on how to solve this, by chance?
Thanks,
Tim
- This reply was modified 9 years, 2 months ago by Tim Gieseking.
Performance issues aside, if someone wanted to include all categories for a product, it sounds like they should be separated by a ‘/’, correct? (ref: https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce).
To do this, I was thinking it would be possible to replace lines 38-39 in woocommerce.php with:
$product_cat = implode('/', wp_list_pluck($_product_cats, 'name'));This seems to almost work, but the resulting output is:
“category”:”Parent\/Child”
I don’t believe in this case the / character should be escaped. Do you agree, and is there a possible solution for this?
As a side note, an option to turn this on would be a helpful feature in some cases. In our particular case we need to be able to group traffic by the parent category.
Thanks!
Tim
I saw that update come through this morning and came here to do just that. Thank you!
Forum: Plugins
In reply to: [WP Store Locator] “Something went wrong” — Possible SSL issue?After digging into this more and finding some errors in javascript console, it looks like this was caused by not having all of the proper APIs enabled in the Google API Console.
Not sure why it has been working in dev, but seems fixed now.
Thanks,
Tim
Thanks! Sorry for the re-post, I misunderstood that thread the first time I read it.
Forum: Plugins
In reply to: [WooCommerce] Product image swap for a partially selected variationThanks for the quick response and confirming it wasn’t available out of the box.
If anyone else needs to do this, I was able to work around the problem with a few steps:
1) I made an admin interface using Advanced Custom Fields that lets you select a series of attributes and add a corresponding image. It’s a repeater field with multiple taxonomy (attribute) fields and an image field.
2) When viewing a product (is_product()) I put the information from the ACF repeater into a json object using wp_localize_script.
3) I wrote some javascript that watches for the variation dropdowns to change. It then loops through the json object and looks for a combination of attributes that match the current selections. If one is found it swaps out the image. WooCommerce still handles the image swap when all attributes are selected and a variation is found.
I haven’t shared my code here because it’s not very flexible and mixed in with a bunch of other javascript, but hopefully those steps help.
Thanks,
Tim
Forum: Plugins
In reply to: [W3 Total Cache] Minify settings – JS async not workingHas anyone ever solved this issue? Having the same problem.
Thanks,
Tim
Forum: Plugins
In reply to: [W3 Total Cache] Async or Defer JS doesn't work in auto minify mode ?Has anyone ever solved this issue? Having the same problem.
Thanks,
Tim
Turns out the problem for me was the featured_image column. It’s a valid URL in the uploads folder, but for whatever reason it was causing the 500 internal server error.
I’m also seeing this error (most recent version of the plugin).
From what I can tell the plugin does a POST when I click Import Now, responds with some HTML, a 500 internal server error, and an object (which contains the 500 internal server error).
My PHP settings all seem fine — I thought maybe max_input_vars was the problem, but it’s well above. If anyone has a fix for this please share.
Thanks,
Tim
Forum: Plugins
In reply to: [Geolocation IP Detection] IP Database Auto-Update problem.Turns out this was another plugin (CoSchedule) causing wp-cron not to run. Seems to be working now.
Forum: Plugins
In reply to: [WP eCommerce] Storing custom cart item metaWorked for me. I tested several scenarios, didn’t find any problems. Thanks!