Skip to content

Commit e8d9a88

Browse files
authored
Merge pull request #3279 from woocommerce/release/3.5.3
Release 3.5.3
2 parents 4f44c88 + ca32397 commit e8d9a88

File tree

128 files changed

+6620
-1069
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

128 files changed

+6620
-1069
lines changed

.eslintrc.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ module.exports = {
9090
'gla_paid_campaign_step',
9191
'gla_setup_ads',
9292
'gla_setup_mc',
93+
'gla_setup_ads_only',
9394
'gla_table_go_to_page',
9495
'gla_table_page_click',
9596
],

changelog.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
*** Google for WooCommerce Changelog ***
22

3+
= 3.5.3 - 2026-03-03 =
4+
* Add - Support for service based merchants.
5+
* Dev - Added two new filters to the Jetpack and Google OAuth flows.
6+
* Fix – CSS lint error in raise-budget-recommendation-banner.
7+
* Update - Disable API Pull mode for all users.
8+
39
= 3.5.2 - 2026-01-29 =
410
* Add - Sorting functionality in `AllProgramsTableCard` to allow users to reorder columns by key attributes.
511
* Fix - Resolve an issue where website claim conflicts were not detected correctly during Google Merchant Center account setup in the onboarding flow.

google-listings-and-ads.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Plugin Name: Google for WooCommerce
44
* Plugin URL: https://wordpress.org/plugins/google-listings-and-ads/
55
* Description: Native integration with Google that allows merchants to easily display their products across Google’s network.
6-
* Version: 3.5.2
6+
* Version: 3.5.3
77
* Author: WooCommerce
88
* Author URI: https://woocommerce.com/
99
* Text Domain: google-listings-and-ads
@@ -13,7 +13,7 @@
1313
* Requires PHP Architecture: 64 bits
1414
* Requires Plugins: woocommerce
1515
* WC requires at least: 10.1
16-
* WC tested up to: 10.4
16+
* WC tested up to: 10.5
1717
* Woo:
1818
*
1919
* License: GPLv3
@@ -33,7 +33,7 @@
3333

3434
defined( 'ABSPATH' ) || exit;
3535

36-
define( 'WC_GLA_VERSION', '3.5.2' ); // WRCS: DEFINED_VERSION.
36+
define( 'WC_GLA_VERSION', '3.5.3' ); // WRCS: DEFINED_VERSION.
3737
define( 'WC_GLA_MIN_PHP_VER', '7.4' );
3838
define( 'WC_GLA_MIN_WC_VER', '10.1' );
3939

js/src/components/free-listings/choose-audience-section/choose-audience-section.js

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import Subsection from '~/components/subsection';
1313
import RadioHelperText from '~/components/radio-helper-text';
1414
import SupportedCountrySelect from '~/components/supported-country-select';
1515
import VerticalGapLayout from '~/components/vertical-gap-layout';
16+
import useGoogleMCAccount from '~/hooks/useGoogleMCAccount';
1617
import './choose-audience-section.scss';
1718

1819
/**
@@ -22,24 +23,50 @@ import './choose-audience-section.scss';
2223
* Does not provide any save strategy, this is to be bound externally.
2324
*/
2425
const ChooseAudienceSection = () => {
26+
const { hasGoogleMCConnection } = useGoogleMCAccount();
2527
const {
2628
getInputProps,
2729
adapter: { renderRequestedValidation },
2830
} = useAdaptiveFormContext();
2931

32+
const content = hasGoogleMCConnection
33+
? {
34+
description: __(
35+
'Where do you want to sell your products?',
36+
'google-listings-and-ads'
37+
),
38+
titleHelper: __(
39+
'Your store should already have the appropriate shipping and tax rates (if required) for potential customers in your selected location(s).',
40+
'google-listings-and-ads'
41+
),
42+
radioHelper: __(
43+
'Your listings will be shown in all supported countries.',
44+
'google-listings-and-ads'
45+
),
46+
}
47+
: {
48+
description: __(
49+
'Where do you want to advertise your services?',
50+
'google-listings-and-ads'
51+
),
52+
titleHelper: __(
53+
'Where do you offer your services?',
54+
'google-listings-and-ads'
55+
),
56+
radioHelper: __(
57+
'Your ad will be shown in all supported countries.',
58+
'google-listings-and-ads'
59+
),
60+
};
61+
62+
const { description, titleHelper, radioHelper } = content;
63+
3064
return (
3165
<>
3266
<Section
3367
className="gla-choose-audience-section"
3468
title={ __( 'Audience', 'google-listings-and-ads' ) }
35-
description={
36-
<p>
37-
{ __(
38-
'Where do you want to sell your products?',
39-
'google-listings-and-ads'
40-
) }
41-
</p>
42-
}
69+
description={ <p>{ description }</p> }
4370
>
4471
<Section.Card>
4572
<Section.Card.Body>
@@ -48,10 +75,7 @@ const ChooseAudienceSection = () => {
4875
{ __( 'Location', 'google-listings-and-ads' ) }
4976
</Subsection.Title>
5077
<Subsection.HelperText>
51-
{ __(
52-
'Your store should already have the appropriate shipping and tax rates (if required) for potential customers in your selected location(s).',
53-
'google-listings-and-ads'
54-
) }
78+
{ titleHelper }
5579
</Subsection.HelperText>
5680
<VerticalGapLayout size="medium">
5781
<AppRadioContentControl
@@ -82,10 +106,7 @@ const ChooseAudienceSection = () => {
82106
value="all"
83107
>
84108
<RadioHelperText>
85-
{ __(
86-
'Your listings will be shown in all supported countries.',
87-
'google-listings-and-ads'
88-
) }
109+
{ radioHelper }
89110
</RadioHelperText>
90111
</AppRadioContentControl>
91112
</VerticalGapLayout>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
export const TARGET_AUDIENCE_FIELDS = [
2+
'locale',
3+
'language',
4+
'location',
5+
'countries',
6+
];

js/src/components/free-listings/setup-free-listings/index.js

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import checkErrors from '~/components/free-listings/configure-product-listings/c
1717
import getOfferFreeShippingInitialValue from '~/utils/getOfferFreeShippingInitialValue';
1818
import isNonFreeShippingRate from '~/utils/isNonFreeShippingRate';
1919
import FormContent from './form-content';
20+
import { TARGET_AUDIENCE_FIELDS } from '../choose-audience-section/constants';
2021

2122
/**
2223
* @typedef {import('~/data/actions').TargetAudienceData } TargetAudienceData
@@ -25,8 +26,6 @@ import FormContent from './form-content';
2526
* @typedef {import('~/data/actions').CountryCode} CountryCode
2627
*/
2728

28-
const targetAudienceFields = [ 'locale', 'language', 'location', 'countries' ];
29-
3029
/**
3130
* Field names for settings.
3231
*
@@ -169,8 +168,8 @@ const SetupFreeListings = ( {
169168
if ( shouldTriggerOnChange ) {
170169
onSettingsChange( getSettings( values ) );
171170
}
172-
} else if ( targetAudienceFields.includes( change.name ) ) {
173-
onTargetAudienceChange( pick( values, targetAudienceFields ) );
171+
} else if ( TARGET_AUDIENCE_FIELDS.includes( change.name ) ) {
172+
onTargetAudienceChange( pick( values, TARGET_AUDIENCE_FIELDS ) );
174173

175174
// Only keep shipping data with selected countries.
176175
[ 'shipping_country_rates', 'shipping_country_times' ].forEach(

js/src/components/google-account-card/connect-google-account-card.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import AccountCard, { APPEARANCE } from '~/components/account-card';
1111
import AppButton from '~/components/app-button';
1212
import readMoreLink from './read-more-link';
1313
import useGoogleConnectFlow from './useGoogleConnectFlow';
14+
import { glaData } from '~/constants';
1415

1516
/**
1617
* Renders a card to connect to Google Account.
@@ -25,17 +26,22 @@ const ConnectGoogleAccountCard = () => {
2526
const pageName = 'reconnect';
2627
const [ handleConnect, { loading, data } ] =
2728
useGoogleConnectFlow( pageName );
29+
const { serviceBasedMerchant } = glaData;
30+
31+
const description = serviceBasedMerchant
32+
? __( 'Required to sync with Google Ads.', 'google-listings-and-ads' )
33+
: __(
34+
'Required to sync with Google Merchant Center and Google Ads.',
35+
'google-listings-and-ads'
36+
);
2837

2938
return (
3039
<AccountCard
3140
appearance={ APPEARANCE.GOOGLE }
3241
alignIcon="top"
3342
description={
3443
<>
35-
{ __(
36-
'Required to sync with Google Merchant Center and Google Ads.',
37-
'google-listings-and-ads'
38-
) }
44+
{ description }
3945
<p>
4046
<em>
4147
{ createInterpolateElement(

js/src/components/google-combo-account-card/connect-google-combo-account-card.js

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,15 @@ import {
1515
useGoogleConnectFlow,
1616
} from '~/components/google-account-card';
1717
import AppDocumentationLink from '../app-documentation-link';
18+
import { glaData } from '~/constants';
19+
20+
const linkAds = (
21+
<AppDocumentationLink
22+
context="setup-ads"
23+
linkId="google-ads-terms-of-service"
24+
href="https://support.google.com/adspolicy/answer/54818"
25+
/>
26+
);
1827

1928
/**
2029
* Renders a card to connect to Google Account.
@@ -34,6 +43,45 @@ const ConnectGoogleComboAccountCard = ( { disabled } ) => {
3443
const [ handleConnect, { loading, data } ] =
3544
useGoogleConnectFlow( pageName );
3645
const [ termsAccepted, setTermsAccepted ] = useState( false );
46+
const { serviceBasedMerchant } = glaData;
47+
48+
const cardContent = serviceBasedMerchant
49+
? {
50+
description: __(
51+
'Required to sync with Google Ads.',
52+
'google-listings-and-ads'
53+
),
54+
terms: __(
55+
'I accept the terms and conditions of <linkAds>Google Ads</linkAds>',
56+
'google-listings-and-ads'
57+
),
58+
components: { linkAds },
59+
}
60+
: {
61+
description: __(
62+
'Required to sync with Google Merchant Center and Google Ads.',
63+
'google-listings-and-ads'
64+
),
65+
terms: __(
66+
'I accept the terms and conditions of <linkMerchant>Merchant Center</linkMerchant> and <linkAds>Google Ads</linkAds>',
67+
'google-listings-and-ads'
68+
),
69+
components: {
70+
linkAds,
71+
linkMerchant: (
72+
<AppDocumentationLink
73+
context="setup-mc-accounts"
74+
linkId="google-mc-terms-of-service"
75+
href="https://support.google.com/merchants/answer/160173"
76+
/>
77+
),
78+
},
79+
};
80+
81+
const termsLabel = createInterpolateElement(
82+
cardContent.terms,
83+
cardContent.components
84+
);
3785

3886
return (
3987
<AccountCard
@@ -43,35 +91,9 @@ const ConnectGoogleComboAccountCard = ( { disabled } ) => {
4391
className="gla-google-combo-service-account-card--google"
4492
description={
4593
<>
46-
<p>
47-
{ __(
48-
'Required to sync with Google Merchant Center and Google Ads.',
49-
'google-listings-and-ads'
50-
) }
51-
</p>
94+
<p>{ cardContent.description }</p>
5295
<CheckboxControl
53-
label={ createInterpolateElement(
54-
__(
55-
'I accept the terms and conditions of <linkMerchant>Merchant Center</linkMerchant> and <linkAds>Google Ads</linkAds>',
56-
'google-listings-and-ads'
57-
),
58-
{
59-
linkMerchant: (
60-
<AppDocumentationLink
61-
context="setup-mc-accounts"
62-
linkId="google-mc-terms-of-service"
63-
href="https://support.google.com/merchants/answer/160173"
64-
/>
65-
),
66-
linkAds: (
67-
<AppDocumentationLink
68-
context="setup-ads"
69-
linkId="google-ads-terms-of-service"
70-
href="https://support.google.com/adspolicy/answer/54818"
71-
/>
72-
),
73-
}
74-
) }
96+
label={ termsLabel }
7597
checked={ termsAccepted }
7698
onChange={ setTermsAccepted }
7799
disabled={ disabled }

0 commit comments

Comments
 (0)