$values * @phpstan-param array{ga4: array, gtm: array, verification: array} $foreign */ public static function meta( array $values, array $foreign ): string { $code = GoogleConfig::sanitize( $values )['verification']; if ( '' === $code || in_array( $code, $foreign['verification'], true ) ) { return ''; } return TagDetector::START . "\n" . '' . "\n" . TagDetector::END . "\n"; } /** * The scripts to enqueue: handle, address (false for an inline-only script) and inline code. * * @param array $values Saved settings. * @param array $foreign Codes already printed by others. * @phpstan-param array $values * @phpstan-param array{ga4: array, gtm: array, verification: array} $foreign * @return array */ public static function scripts( array $values, array $foreign ): array { $values = GoogleConfig::sanitize( $values ); $ga4 = in_array( $values['ga4_id'], $foreign['ga4'], true ) ? '' : $values['ga4_id']; $gtm = in_array( $values['gtm_id'], $foreign['gtm'], true ) ? '' : $values['gtm_id']; $list = array(); $gtag = 'window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments);}'; $consent = $values['consent_denied'] ? "gtag('consent','default',{'ad_storage':'denied','analytics_storage':'denied','ad_user_data':'denied','ad_personalization':'denied'});" : ''; if ( '' !== $ga4 ) { $list[] = array( 'handle' => self::HANDLE_GA4, 'src' => 'https://www.googletagmanager.com/gtag/js?id=' . $ga4, 'inline' => $gtag . $consent . "gtag('js',new Date());gtag('config'," . wp_json_encode( $ga4 ) . ');', ); } if ( '' !== $gtm ) { $list[] = array( 'handle' => self::HANDLE_GTM, 'src' => false, 'inline' => ( '' !== $consent && '' === $ga4 ? $gtag . $consent : '' ) . "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer'," . wp_json_encode( $gtm ) . ');', ); } return $list; } /** * The Tag Manager fallback for browsers without scripts, printed right after the opening body tag. * * @param array $values Saved settings. * @param array $foreign Codes already printed by others. * @phpstan-param array $values * @phpstan-param array{ga4: array, gtm: array, verification: array} $foreign */ public static function body( array $values, array $foreign ): string { $gtm = GoogleConfig::sanitize( $values )['gtm_id']; if ( '' === $gtm || in_array( $gtm, $foreign['gtm'], true ) ) { return ''; } return '' . "\n"; } }