← All changes
|
includes/my-wordpress/integrations/woocommerce.php
+72
-10
1.1.0
→
1.1.11
View file →
| @@ -1899,37 +1899,63 @@ | ||
| 1899 | 1899 | |
| 1900 | 1900 | /** |
| 1901 | 1901 | * Register the integration bundle. |
| 1902 | 1902 | * |
| 1903 | + * Cache-busted by `filemtime`, like the window bundle it rides along | |
| 1904 | + * with (see `openstation_my_wordpress_register_assets()`). The bundle | |
| 1905 | + * is fetched lazily by URL, so a `ver` that only moves on release | |
| 1906 | + * would let a browser's cached copy outlive builds within one — a | |
| 1907 | + * stale companion against a fresh WP Explorer bundle is a contract | |
| 1908 | + * drift no error message points at. | |
| 1909 | + * | |
| 1903 | 1910 | * @return void |
| 1904 | 1911 | */ |
| 1905 | 1912 | function openstation_my_wordpress_woo_register_assets() { |
| 1913 | + $js_path = OPENSTATION_DIR . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js'; | |
| 1906 | 1914 | wp_register_script( |
| 1907 | 1915 | 'os-my-wordpress-woocommerce', |
| 1908 | - OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ) . '.js', | |
| 1916 | + OPENSTATION_URL . 'assets/js/my-wordpress-woocommerce' . openstation_asset_suffix() . '.js', | |
| 1909 | 1917 | array( 'wp-hooks' ), |
| 1910 | - OPENSTATION_VERSION, | |
| 1918 | + file_exists( $js_path ) ? (string) filemtime( $js_path ) : OPENSTATION_VERSION, | |
| 1911 | 1919 | true |
| 1912 | 1920 | ); |
| 1913 | 1921 | wp_set_script_translations( 'os-my-wordpress-woocommerce', 'desktop-mode' ); |
| 1914 | 1922 | |
| 1923 | + $css_path = OPENSTATION_DIR . 'assets/css/my-wordpress-woocommerce.css'; | |
| 1915 | 1924 | wp_register_style( |
| 1916 | 1925 | 'os-my-wordpress-woocommerce', |
| 1917 | 1926 | OPENSTATION_URL . 'assets/css/my-wordpress-woocommerce.css', |
| 1918 | 1927 | array( 'desktop-mode-my-wordpress' ), |
| 1919 | - OPENSTATION_VERSION | |
| 1928 | + file_exists( $css_path ) ? (string) filemtime( $css_path ) : OPENSTATION_VERSION | |
| 1920 | 1929 | ); |
| 1921 | 1930 | } |
| 1922 | 1931 | add_action( 'init', 'openstation_my_wordpress_woo_register_assets', 5 ); |
| 1923 | 1932 | |
| 1924 | 1933 | /** |
| 1925 | - * Enqueue the integration bundle. | |
| 1934 | + * Attach the integration's config to its script handle. | |
| 1926 | 1935 | * |
| 1936 | + * NOTHING is enqueued here, and that is the point. The bundle | |
| 1937 | + * subscribes to the WP Explorer app's `preview-extras` / | |
| 1938 | + * `group-extras` actions, so it has to be in the tab before the app's | |
| 1939 | + * client view paints — but not one moment sooner. It travels as a | |
| 1940 | + * companion of the app window (see | |
| 1941 | + * `openstation_my_wordpress_woo_app_window_args()` below), which | |
| 1942 | + * means the shell loads it when the window first opens and a merchant | |
| 1943 | + * who never opens the explorer never downloads it at all. The | |
| 1944 | + * stylesheet travels the same way (the `styles` arg): every selector | |
| 1945 | + * in it is scoped to surfaces inside the explorer or the Customer | |
| 1946 | + * window, so on any document not showing those — | |
| 1947 | + * it was pure parse weight. | |
| 1948 | + * | |
| 1927 | 1949 | * Only for users who can open the site window on a store — everyone |
| 1928 | - * else pays nothing. The bundle subscribes to the site window's | |
| 1929 | - * `preview-extras` / `group-extras` actions, which is why it has to be | |
| 1930 | - * present before the (lazily loaded) window bundle paints. | |
| 1950 | + * else pays nothing. | |
| 1931 | 1951 | * |
| 1952 | + * Runs at priority 5, ahead of `openstation_enqueue_assets()` at 10: | |
| 1953 | + * that is where the boot payload is built, and it harvests this | |
| 1954 | + * inline blob off the registered handle so the lazy loader can | |
| 1955 | + * replay it around the script tag. Attaching later would ship the | |
| 1956 | + * bundle with no config. | |
| 1957 | + * | |
| 1932 | 1958 | * @return void |
| 1933 | 1959 | */ |
| 1934 | 1960 | function openstation_my_wordpress_woo_enqueue() { |
| 1935 | 1961 | if ( ! openstation_my_wordpress_woo_active() ) { |
| @@ -1941,10 +1967,8 @@ | ||
| 1941 | 1967 | if ( ! openstation_my_wordpress_user_can_use() ) { |
| 1942 | 1968 | return; |
| 1943 | 1969 | } |
| 1944 | 1970 | |
| 1945 | - wp_enqueue_script( 'os-my-wordpress-woocommerce' ); | |
| 1946 | - wp_enqueue_style( 'os-my-wordpress-woocommerce' ); | |
| 1947 | 1971 | wp_add_inline_script( |
| 1948 | 1972 | 'os-my-wordpress-woocommerce', |
| 1949 | 1973 | sprintf( |
| 1950 | 1974 | 'window.openStationWooConfig=%s;', |
| @@ -1975,5 +1999,43 @@ | ||
| 1975 | 1999 | ), |
| 1976 | 2000 | 'before' |
| 1977 | 2001 | ); |
| 1978 | 2002 | } |
| 1979 | -add_action( 'admin_enqueue_scripts', 'openstation_my_wordpress_woo_enqueue', 20 ); | |
| 2003 | +add_action( 'admin_enqueue_scripts', 'openstation_my_wordpress_woo_enqueue', 5 ); | |
| 2004 | + | |
| 2005 | +/** | |
| 2006 | + * Attach the bundle and stylesheet to the WP Explorer app. | |
| 2007 | + * | |
| 2008 | + * The app fires the `os.my-wordpress.*` seams this bundle subscribes | |
| 2009 | + * to (`preview-extras`, `group-extras`, `list-tile`, the banding and | |
| 2010 | + * user filters), and its rows carry the `openstation_woo` / | |
| 2011 | + * `openstation_woo_customer` facts. `scripts` handles load in order | |
| 2012 | + * immediately before the window's own script, so the integration is | |
| 2013 | + * listening by the time the app's client view fires the seams — as a | |
| 2014 | + * first-open companion, costing nothing until the window opens. The | |
| 2015 | + * config blob rides the handle (see | |
| 2016 | + * `openstation_my_wordpress_woo_enqueue()`), so it arrives with the | |
| 2017 | + * bundle. The `styles` handle keeps its `wp_register_style` | |
| 2018 | + * dependency on the shared explorer sheet, so its equal-specificity | |
| 2019 | + * overrides (the ribbon and panel chrome) still win by source order. | |
| 2020 | + * | |
| 2021 | + * @param array $window_args Args passed to `openstation_register_window()`. | |
| 2022 | + * @param string $app_id App id. | |
| 2023 | + * @return array | |
| 2024 | + */ | |
| 2025 | +function openstation_my_wordpress_woo_app_window_args( $window_args, $app_id ) { | |
| 2026 | + if ( 'my-wordpress' !== (string) $app_id || ! is_array( $window_args ) || ! openstation_my_wordpress_woo_active() ) { | |
| 2027 | + return $window_args; | |
| 2028 | + } | |
| 2029 | + | |
| 2030 | + $scripts = isset( $window_args['scripts'] ) ? (array) $window_args['scripts'] : array(); | |
| 2031 | + $scripts[] = 'os-my-wordpress-woocommerce'; | |
| 2032 | + | |
| 2033 | + $styles = isset( $window_args['styles'] ) ? (array) $window_args['styles'] : array(); | |
| 2034 | + $styles[] = 'os-my-wordpress-woocommerce'; | |
| 2035 | + | |
| 2036 | + $window_args['scripts'] = $scripts; | |
| 2037 | + $window_args['styles'] = $styles; | |
| 2038 | + | |
| 2039 | + return $window_args; | |
| 2040 | +} | |
| 2041 | +add_filter( 'openstation_app_window_args', 'openstation_my_wordpress_woo_app_window_args', 10, 2 ); | |