PluginProbe
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot / 3.8.9
BetterDocs – AI Documentation, Knowledge Base, MCP Server, Docs, Wikis, FAQ & Chatbot v3.8.9
4.9.2 4.9.1 4.9.0 4.8.2 4.8.1 4.8.0 4.7.0 4.6.2 4.6.1 4.6.0 4.5.6 4.5.5 4.5.4 4.5.3 4.5.2 4.5.1 4.5.0 4.4.1 4.4.0 3.3.4 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 All 200 releases
← All changes | includes/Utils/Enqueue.php +3 -45 4.8.03.8.9 View file →
@@ -41,10 +41,8 @@
41 41 preg_match( '~/plugins/([^/]+)~', $url, $matches );
42 42 $url_portion = isset( $matches[1] ) ? $matches[1] : '';
43 43 if ( $url_portion == 'betterdocs-pro' ) {
44 44 wp_set_script_translations( $handle, 'betterdocs-pro' );
45 - } elseif ( $url_portion == 'betterdocs-ai-chatbot' ) {
46 - wp_set_script_translations( $handle, 'betterdocs-ai-chatbot' );
47 45 } elseif ( $url_portion == 'betterdocs' ) {
48 46 wp_set_script_translations( $handle, 'betterdocs' );
49 47 }
50 48 }
@@ -74,61 +72,21 @@
74 72 'args' => null !== $args ? $args : ( $is_js ? true : 'all' )
75 73 ];
76 74 }
77 75
78 - /**
79 - * Resolve the assets sub-folder for a file: webpack output lives under
80 - * assets/build/, committed static assets under assets/static/. Prefer the
81 - * build copy when present, otherwise fall back to static. This lets every
82 - * enqueue/register call use the same relative path regardless of which
83 - * folder the file ends up in.
84 - *
85 - * The final `assets/` fallback matters for the Free/Pro version skew this
86 - * class is shared across. Pro constructs this same Enqueue against its OWN
87 - * plugin path, so when Free 4.8.0 runs alongside a Pro that predates the
88 - * Node 24 restructure, Pro's files are still flat under assets/. Without
89 - * this branch every one of them resolved to a non-existent assets/static/
90 - * path and 404'd. Ordering is deliberate: a matched pair never reaches the
91 - * legacy branch, so this costs nothing in the normal case.
92 - *
93 - * Kept `protected` so a paired plugin can refine the search order.
94 - */
95 - protected function asset_base( $filename ) {
96 - foreach ( [ 'assets/build/', 'assets/static/', 'assets/' ] as $base ) {
97 - if ( file_exists( path_join( $this->plugin_path, $base . $filename ) ) ) {
98 - return $base;
99 - }
100 - }
101 -
102 - // Nothing on disk — keep the historical default so a genuinely missing
103 - // file produces the same (broken) URL it always did, not a new shape.
104 - return 'assets/static/';
105 - }
106 -
107 76 public function asset_url( $filename ) {
108 77 if ( filter_var( $filename, FILTER_VALIDATE_URL ) ) {
109 78 return $filename;
110 79 }
111 80
112 - return esc_url( $this->plugin_url . $this->asset_base( $filename ) . $filename );
81 + return esc_url( $this->plugin_url . 'assets/' . $filename );
113 82 }
114 83
115 - /**
116 - * Explicit URL for a committed static asset under assets/static/.
117 - */
118 - public function static_url( $filename ) {
119 - if ( filter_var( $filename, FILTER_VALIDATE_URL ) ) {
120 - return $filename;
121 - }
122 -
123 - return esc_url( $this->plugin_url . 'assets/static/' . $filename );
124 - }
125 -
126 84 public function dist_path( $file ) {
127 - return path_join( $this->plugin_path, $this->asset_base( $file ) . $file );
85 + return path_join( $this->plugin_path, 'assets/' . $file );
128 86 }
129 87
130 88 public function icon( $name, $is_admin = false ) {
131 - $_path = $is_admin ? 'assets/static/admin/images/' : 'assets/static/images/';
89 + $_path = $is_admin ? 'assets/admin/images/' : 'assets/images/';
132 90 return esc_url( $this->plugin_url . $_path . $name . '?v=' . $this->version );
133 91 }
134 92 }