Helper::get_product_id(), $js_var_name__product_value => Helper::get_product_value(), $js_var_name__product_currency => Helper::get_currency(), ] ); } public static function add_order_vars() { $js_var_name__order_id = Helper::getConfigSetting( 'js_variables/order_id', '' ); $js_var_name__order_value = Helper::getConfigSetting( 'js_variables/order_value', '' ); $js_var_name__order_currency = Helper::getConfigSetting( 'js_variables/order_currency', '' ); $js_var_name__order_value_no_shipping = Helper::getConfigSetting( 'js_variables/order_value_no_shipping', '' ); if ( ! $js_var_name__order_id || ! $js_var_name__order_value || ! $js_var_name__order_value_no_shipping || ! $js_var_name__order_currency ) { return; } $is_order_received_endpoint = Helper::is_order_received_endpoint(); $is_order_received_page = Helper::is_order_received_page(); if ( ! $is_order_received_endpoint && ! $is_order_received_page ) { return; } $order = null; if ( $is_order_received_endpoint ) { $order = Helper::get_order(); } elseif ( $is_order_received_page ) { $order = Helper::get_order_by_get_params(); } $order_id = is_object( $order ) ? $order->get_id() : null; $order_value = Helper::get_order_value( $order_id ); $order_value_no_shipping = Helper::get_order_value_no_shipping( $order_id ); $order_currency = is_object( $order ) ? $order->get_currency() : null; // FIX: Pass raw values to enqueue_js_vars. // Let wp_localize_script handle the "escaping late." self::enqueue_js_vars( [ $js_var_name__order_id => $order_id, $js_var_name__order_value => $order_value, $js_var_name__order_value_no_shipping => $order_value_no_shipping, $js_var_name__order_currency => $order_currency, ] ); } /** * Add attributes to script tag such as 'async', 'defer' * Script must be registered or enqueued before * * @param $handle_to_process * @param $attr */ public static function add_script_attr( $handle_to_process, $attr ) { add_filter( 'script_loader_tag', function ( $tag, $handle, $src ) use ( $handle_to_process, $attr ) { $attr = esc_attr( $attr ); if ( $handle_to_process === $handle ) { return str_replace( ' src', " {$attr} src", $tag ); } return $tag; }, 10, 3 ); } /** * Enqueue js vars before AdScale script * * @param array $js_vars * @param bool $as_window_prop */ public static function enqueue_js_vars( array $js_vars, $as_window_prop = true ) { $script_handle = Helper::getConfigSetting( 'adscale_script_handle', '' ); if ( ! $script_handle || empty( $js_vars ) ) { return; } $js_code = ''; foreach ( $js_vars as $var_name => $var_value ) { $var_name = (string) $var_name; if ( '' === $var_name ) { continue; } if ( $as_window_prop ) { $js_code .= 'window[' . wp_json_encode( $var_name ) . '] = ' . wp_json_encode( $var_value ) . ';' . PHP_EOL; } else { $js_code .= 'const ' . preg_replace( '/[^A-Za-z0-9_$]/', '_', $var_name ) . ' = ' . wp_json_encode( $var_value ) . ';' . PHP_EOL; } } if ( '' !== $js_code ) { wp_add_inline_script( $script_handle, $js_code, 'before' ); } } public static function enqueue_admin_script() { wp_enqueue_script( 'adscale_admin', ADSCALE_PLUGIN_URL . 'assets/js/admin.js', [ 'jquery' ], ADSCALE_INTERNAL_MODULE_VERSION, true ); } public static function enqueue_admin_style() { wp_enqueue_style( 'adscale_admin_css', ADSCALE_PLUGIN_URL . 'assets/css/admin.css', [], ADSCALE_INTERNAL_MODULE_VERSION ); } public static function enqueue_admin_common_js_vars() { $js_vars = [ 'ajaxUrl' => esc_url( admin_url( 'admin-ajax.php' ) ), 'ajaxNonce' => wp_create_nonce( 'adscale_nonce_key' ), ]; wp_localize_script( 'adscale_admin', 'adscaleJsVars', $js_vars ); } }