Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Improve caching plugin_dir_url() in Package. #6260

Merged
merged 1 commit into from
Apr 14, 2022

Conversation

shendy-a8c
Copy link
Contributor

@shendy-a8c shendy-a8c commented Apr 14, 2022

A problem observed in Atomic Site with WC 6.4.0 and WooCommerce Subscription installed.
wp-admin > WooCommerce > Home page is blank because wc-settings.js URL returns 404.

It should be /wp-content/plugins/woocommerce/packages/woocommerce-blocks/build/wc-settings.js, instead, /wp-content/plugins/wordpress/plugins/woocommerce/6.4.0/packages/woocommerce-blocks/build/wc-settings.js is loaded.

Missing wc-settings.js causes uncaught error.

image

After some investigation, this problem happens when wp-content/plugins/woocommerce is a symlink (like how Pressable, Atomic Site, and wp.com manages WooCommerce for sites they create) and attempt to cache the return value of plugin_dir_url() from #5915 makes all this possible.

Calling plugin_dir_url() in Package’s constructor gives different result vs calling it from get_url().
plugin_dir_url() eventually calls plugins_url() which eventually calls plugin_basename().
plugin_basename() depends on the value of a global variable $wp_plugin_paths.
When called in Package’s constructor, woocommerce’s path isn’t yet part of $wp_plugin_paths, so it doesn’t return the basename correctly.

Testing

Automated Tests

  • Changes in this PR are covered by Automated Tests.
  • Unit tests
  • E2E tests

Manual Testing

How to test the changes in this Pull Request:

  1. Install WC 6.4 but move and symlink its folder.
mv wp-content/plugins/woocommerce ~/Desktop/woocommerce
ln -s ~/Desktop/woocommerce wp-content/plugins/woocommerce
  1. Install WooCommerce Subscriptions.

  2. Try to open wp-admin > WooCommerce > Home (/wp-admin/admin.php?page=wc-admin). With base branch, expect a blank page. With this PR branch, expect page loads normally.

I didn't try loading blocks as an independent plugin, only when it's within WooCommerce.

User Facing Testing

These are steps for user testing (where "user" is someone interacting with this change that is not editing any code).

  • Same as above

Performance Impact

This change should have the same optimization as #5915.

Changelog

Fix page load problem due to incorrect URL to certain assets.

@github-actions
Copy link
Contributor

github-actions bot commented Apr 14, 2022

Size Change: 0 B

Total Size: 863 kB

ℹ️ View Unchanged
Filename Size
build/active-filters-frontend.js 5.92 kB
build/active-filters.js 6.59 kB
build/all-products-frontend.js 18.1 kB
build/all-products.js 33.5 kB
build/all-reviews.js 7.77 kB
build/attribute-filter-frontend.js 17.5 kB
build/attribute-filter.js 13.4 kB
build/blocks-checkout.js 17.4 kB
build/cart-blocks/cart-accepted-payment-methods-frontend.js 1.16 kB
build/cart-blocks/cart-express-payment-frontend.js 5.24 kB
build/cart-blocks/cart-items-frontend.js 298 B
build/cart-blocks/cart-line-items--mini-cart-contents-block/products-table-frontend.js 5.27 kB
build/cart-blocks/cart-line-items-frontend.js 431 B
build/cart-blocks/cart-order-summary-frontend.js 1.1 kB
build/cart-blocks/cart-totals-frontend.js 321 B
build/cart-blocks/empty-cart-frontend.js 345 B
build/cart-blocks/filled-cart-frontend.js 772 B
build/cart-blocks/order-summary-coupon-form-frontend.js 2.81 kB
build/cart-blocks/order-summary-discount-frontend.js 2.31 kB
build/cart-blocks/order-summary-fee-frontend.js 273 B
build/cart-blocks/order-summary-heading-frontend.js 454 B
build/cart-blocks/order-summary-shipping--checkout-blocks/order-summary-shipping-frontend.js 6.33 kB
build/cart-blocks/order-summary-shipping-frontend.js 427 B
build/cart-blocks/order-summary-subtotal-frontend.js 273 B
build/cart-blocks/order-summary-taxes-frontend.js 433 B
build/cart-blocks/proceed-to-checkout-frontend.js 1.16 kB
build/cart-frontend.js 45.5 kB
build/cart.js 44.3 kB
build/checkout-blocks/actions-frontend.js 1.41 kB
build/checkout-blocks/billing-address--checkout-blocks/shipping-address-frontend.js 4.12 kB
build/checkout-blocks/billing-address-frontend.js 893 B
build/checkout-blocks/contact-information-frontend.js 2.83 kB
build/checkout-blocks/express-payment-frontend.js 5.54 kB
build/checkout-blocks/fields-frontend.js 343 B
build/checkout-blocks/order-note-frontend.js 1.07 kB
build/checkout-blocks/order-summary-cart-items-frontend.js 3.67 kB
build/checkout-blocks/order-summary-coupon-form-frontend.js 2.97 kB
build/checkout-blocks/order-summary-discount-frontend.js 2.43 kB
build/checkout-blocks/order-summary-fee-frontend.js 275 B
build/checkout-blocks/order-summary-frontend.js 1.1 kB
build/checkout-blocks/order-summary-shipping-frontend.js 605 B
build/checkout-blocks/order-summary-subtotal-frontend.js 273 B
build/checkout-blocks/order-summary-taxes-frontend.js 432 B
build/checkout-blocks/payment-frontend.js 7.82 kB
build/checkout-blocks/shipping-address-frontend.js 996 B
build/checkout-blocks/shipping-methods-frontend.js 4.72 kB
build/checkout-blocks/terms-frontend.js 1.22 kB
build/checkout-blocks/totals-frontend.js 325 B
build/checkout-frontend.js 47.7 kB
build/checkout.js 45.5 kB
build/featured-category.js 8.63 kB
build/featured-product.js 10.5 kB
build/handpicked-products.js 7.11 kB
build/legacy-template.js 2.19 kB
build/mini-cart-component-frontend.js 16.6 kB
build/mini-cart-contents-block/empty-cart-frontend.js 327 B
build/mini-cart-contents-block/filled-cart-frontend.js 230 B
build/mini-cart-contents-block/footer--mini-cart-contents-block/products-table-frontend.js 4.68 kB
build/mini-cart-contents-block/footer-frontend.js 5.64 kB
build/mini-cart-contents-block/items-frontend.js 226 B
build/mini-cart-contents-block/products-table-frontend.js 289 B
build/mini-cart-contents-block/shopping-button-frontend.js 287 B
build/mini-cart-contents-block/title-frontend.js 367 B
build/mini-cart-contents.js 22.7 kB
build/mini-cart-frontend.js 1.72 kB
build/mini-cart.js 6.1 kB
build/price-filter-frontend.js 12.4 kB
build/price-filter.js 8.41 kB
build/price-format.js 1.19 kB
build/product-add-to-cart--product-button--product-category-list--product-image--product-price--product-r--a0326d00.js 224 B
build/product-add-to-cart--product-button--product-image--product-title.js 2.65 kB
build/product-add-to-cart--product-button.js 565 B
build/product-add-to-cart-frontend.js 6.96 kB
build/product-add-to-cart.js 6.63 kB
build/product-best-sellers.js 7.38 kB
build/product-button--product-category-list--product-image--product-price--product-rating--product-sale-b--e17c7c01.js 502 B
build/product-button-frontend.js 1.84 kB
build/product-button.js 1.08 kB
build/product-categories.js 2.78 kB
build/product-category-list-frontend.js 926 B
build/product-category-list.js 501 B
build/product-category.js 8.49 kB
build/product-image-frontend.js 1.84 kB
build/product-image.js 1.07 kB
build/product-new.js 7.68 kB
build/product-on-sale.js 7.99 kB
build/product-price-frontend.js 1.94 kB
build/product-price.js 1.5 kB
build/product-rating-frontend.js 1.15 kB
build/product-rating.js 733 B
build/product-sale-badge-frontend.js 1.09 kB
build/product-sale-badge.js 678 B
build/product-search.js 2.18 kB
build/product-sku-frontend.js 380 B
build/product-sku.js 381 B
build/product-stock-indicator-frontend.js 1.03 kB
build/product-stock-indicator.js 621 B
build/product-summary-frontend.js 1.33 kB
build/product-summary.js 919 B
build/product-tag-list-frontend.js 918 B
build/product-tag-list.js 496 B
build/product-tag.js 7.81 kB
build/product-title-frontend.js 1.29 kB
build/product-title.js 909 B
build/product-top-rated.js 7.91 kB
build/products-by-attribute.js 8.39 kB
build/reviews-by-category.js 11.2 kB
build/reviews-by-product.js 12.3 kB
build/reviews-frontend.js 7 kB
build/single-product-frontend.js 21.5 kB
build/single-product.js 10 kB
build/stock-filter-frontend.js 6.5 kB
build/stock-filter.js 6.56 kB
build/vendors--cart-blocks/cart-line-items--cart-blocks/cart-order-summary--cart-blocks/order-summary-shi--c02aad66-frontend.js 5.26 kB
build/vendors--cart-blocks/cart-line-items--checkout-blocks/order-summary-cart-items--mini-cart-contents---233ab542-frontend.js 3.14 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--5b8feb0b-frontend.js 4.75 kB
build/vendors--cart-blocks/order-summary-shipping--checkout-blocks/billing-address--checkout-blocks/order--decc3dc6-frontend.js 20.5 kB
build/vendors--mini-cart-contents-block/footer-frontend.js 6.86 kB
build/vendors--product-add-to-cart-frontend.js 7.53 kB
build/wc-blocks-data.js 9.87 kB
build/wc-blocks-editor-style-rtl.css 4.92 kB
build/wc-blocks-editor-style.css 4.92 kB
build/wc-blocks-google-analytics.js 1.56 kB
build/wc-blocks-middleware.js 930 B
build/wc-blocks-registry.js 2.7 kB
build/wc-blocks-shared-context.js 1.52 kB
build/wc-blocks-shared-hocs.js 1.14 kB
build/wc-blocks-style-rtl.css 22 kB
build/wc-blocks-style.css 22 kB
build/wc-blocks-vendors-style-rtl.css 1.28 kB
build/wc-blocks-vendors-style.css 1.28 kB
build/wc-blocks-vendors.js 71.3 kB
build/wc-blocks.js 2.63 kB
build/wc-payment-method-bacs.js 816 B
build/wc-payment-method-cheque.js 811 B
build/wc-payment-method-cod.js 909 B
build/wc-payment-method-paypal.js 837 B
build/wc-settings.js 2.61 kB

compressed-size-action

Copy link
Member

@senadir senadir left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking good, thank you @shendy-a8c I will look into why tests are failing.

Copy link
Contributor

@opr opr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was able to break my local site and this patch fixed it.

@senadir senadir force-pushed the fix/plugin-path-when-symlinked branch from e480945 to 09f4370 Compare April 14, 2022 15:39
@senadir senadir merged commit 17f566c into trunk Apr 14, 2022
@senadir senadir deleted the fix/plugin-path-when-symlinked branch April 14, 2022 16:28
senadir added a commit that referenced this pull request Apr 14, 2022
* Call plugin_dir_url() in Package::get_url() instead of from its constructor. (#6260)

* Empty commit for release pull request

* add readme

* Bumping version strings to new version.

* add testing steps

Co-authored-by: Shendy <[email protected]>
Co-authored-by: github-actions <[email protected]>
Co-authored-by: Nadir Seghir <[email protected]>
@ryanr14
Copy link
Member

ryanr14 commented Apr 14, 2022

4946323-zen

Just adding this ticket to the correct issue now. Thanks for working on fixing this.

@ezebecke
Copy link

Adding a report from a user here: 4945466-zd

WooCommerce sidebar not showing up when either "WooCommerce Points and Rewards" or "WooCommerce Subscriptions" are active.

@gwensmithx
Copy link

I added this to the wrong issue earlier but I have a site where the WooCommerce menu is not showing in the wp-admin pages when WooCommerce Subscriptions plugin is activated.

35150771-hc
4948352-zen

@amElnagdy
Copy link

Another: 4948744-zen

@amElnagdy
Copy link

One more: 35164303-hc

@masperber
Copy link

Another instance here: 4947306-zen

@rinazrina
Copy link

Another one #4946963-zen

@cintacks
Copy link

This is still affecting this site: 4947647-zd-woothemes
Pinged Slack for update on when this will be pushed. Updated user with general timeline.

@senadir
Copy link
Member

senadir commented Apr 15, 2022

A fix will go out with WooCommerce 6.4.1. A workaround currently is to install WooCommerce Blocks 7.4.1 or downgrade WooCommerce to 6.3.1

@mvcarlton
Copy link

mvcarlton commented Apr 15, 2022

Do you have an ETA on when WooCommerce 6.4.1 will be released? (my issue is ticket number 4948744)

@senadir
Copy link
Member

senadir commented Apr 15, 2022

Hey @mvcarlton ! I don't no, as I'm not the one doing the release and I'm not sure how much will it take. Expect it today or tomorrow at max.

@mvcarlton
Copy link

@senadir thank you! I will keep an eye out!

senadir added a commit that referenced this pull request Apr 15, 2022
* Empty commit for release pull request

* Call plugin_dir_url() in Package::get_url() instead of from its constructor. (#6260)

* add readme changelog

* add testing steps

* Bumping version strings to new version.

Co-authored-by: github-actions <[email protected]>
Co-authored-by: Shendy <[email protected]>
Co-authored-by: Nadir Seghir <[email protected]>
@tarunvijwani tarunvijwani added type: bug The issue/PR concerns a confirmed bug. focus: blocks Specific work involving or impacting how blocks behave. labels Apr 25, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
focus: blocks Specific work involving or impacting how blocks behave. type: bug The issue/PR concerns a confirmed bug.
Projects
None yet
Development

Successfully merging this pull request may close these issues.