I am trying to do the pagination with google-ads-php at the bottom of my page in php, so I get through my ads, like PREVIOUS 1,2,3 NEXT So this is my code:

    public function runExample(GoogleAdsClient $googleAdsClient, int $customerId){         $googleAdsServiceClient = $googleAdsClient->getGoogleAdsServiceClient();         // Creates a query that retrieves all ads.         $query = "SELECT campaign.name, ad_group.name, "             . "ad_group_ad.ad.responsive_display_ad.marketing_images, "             . "ad_group_ad.ad.app_ad.images, ad_group_ad.ad.app_ad.youtube_videos, "             . "ad_group_ad.ad.responsive_display_ad.youtube_videos, ad_group_ad.ad.local_ad.videos, "             . "ad_group_ad.ad.video_responsive_ad.videos, ad_group_ad.ad.video_ad.media_file,  "             . "ad_group_ad.ad.app_engagement_ad.images, ad_group_ad.ad.app_engagement_ad.videos, "             . "ad_group_ad.ad.display_upload_ad.media_bundle, ad_group_ad.ad.gmail_ad.product_images, "             . "ad_group_ad.ad.gmail_ad.product_videos, ad_group_ad.ad.gmail_ad.teaser.logo_image, "             . "ad_group_ad.ad.image_ad.image_url, ad_group_ad.ad.legacy_responsive_display_ad.square_marketing_image, "             . "ad_group_ad.ad.local_ad.marketing_images, ad_group_ad.ad.responsive_display_ad.logo_images, "             . "ad_group_ad.ad.responsive_display_ad.square_logo_images, "             . "ad_group_ad.ad.responsive_display_ad.square_marketing_images, "             . "ad_group_ad.ad.responsive_display_ad.youtube_videos, "             . "metrics.impressions, campaign.campaign_budget, campaign.status, "             . "campaign.start_date, campaign.end_date, metrics.all_conversions, "             . "metrics.average_cost, ad_group_ad.ad.type, ad_group_ad.ad.id, "             . "campaign.campaign_budget, metrics.cost_micros, ad_group_ad.status, metrics.impressions "             . "FROM ad_group_ad "             . "WHERE segments.date >= '{$this->from}' AND segments.date <= '{$this->to}' "             . "ORDER BY campaign.name ASC";         // Issues a search stream request.         /** @var GoogleAdsServerStreamDecorator $stream */         $stream = $googleAdsServiceClient->search($customerId, $query, ['pageSize' => 10]);         $ads = [];         foreach ($stream->iterateAllElements() as $googleAdsRow) {             dump($googleAdsRow->serializeToJsonString());             /** @var GoogleAdsRow $googleAdsRow */             $ads[] = json_decode($googleAdsRow->serializeToJsonString(), true);         } 

As you see the pageSize is set to 10, so it will be 23 pages, because I have 230 ads.

How can I do the pagination, now the $stream returns all ads in one response. How can return only 10 ads, and then when user click for example second page button, it will return the next 10 ads, and so on?

Thanks in advance!

I implemented a custom script in tankyou page in my woocommerce store to track google ads conversions. This is my implementation:

add_action( "woocommerce_thankyou", "pixel_analytics_conversion_track_script", 20 ); if ( ! function_exists( 'pixel_analytics_conversion_track_script' ) ) {     function pixel_analytics_conversion_track_script($order_id){         if ( $order_id > 0 ) {             $order = wc_get_order( $order_id );             if ( $order instanceof WC_Order ) {                 $order_id               = $order->get_id(); // order id                 $order_key              = $order->get_order_key(); // order key                 $order_total            = $order->get_total(); // order total                 $order_currency         = $order->get_currency(); // order currency                 $order_payment_method   = $order->get_payment_method(); // order payment method                 $order_shipping_country = $order->get_shipping_country(); // order shipping country                 $order_billing_country  = $order->get_billing_country(); // order billing country                 $order_status           = $order->get_status(); // order status                 ?>                 <script type="text/javascript">                     jQuery(document).ready(function( $ ){                         console.log('PURCHACE EVENT');                         /* Track conversion on facebook Pixel */                         fbq('track', 'Purchase',                         {                             value: <?php echo $order_total ?>,                             currency: "<?php echo $order_currency ?>"                         });                                              /* Track conversion on Google Ads */                         gtag('event', 'conversion',                          {                              'send_to': 'AW-693771414/0MhwCMa9rLYBEJa56MoC',                              'value': <?php echo $order_total ?>,                              'currency': "<?php echo $order_currency ?>",                              'transaction_id': "<?php echo $order_id ?>"                         });                     });                 </script>                 <?php             }         }     } } 

The code works very well but some data is not precise and I think that probably the code above duplicates conversion if user goes to thank you page twice. We have an order confirmation email that has a link to the thankyou page of woocommerce.

As you can see Im sending the transaction_id parameter, so my question:

If the user loads twice or N times the thank you page the conversion will appear dupplicated in Google ads even if you send the transaction_id parameter?

Has anyone put a Google ad conversion tag on a WooCommerce order confirmation page?

We have our website on Wordpress, use WooCommerce for our ordering and use a Divi Theme.

I tried doing this with one webmaster and we weren't able to get it to work. We tried putting the tag on the order confirmation page and couldn't get it to work.

Now, I have a new webmaster. I set up the conversion tag in Google ads and emailed it to her. She said she used a plug in to set it up on the page. She said she viewed the page, but I'm still seeing it labeled as inactive in Google ads.

Don't know why we're having such problems? What's the trick?

I'm not very familiar with Wordpress. Seems like this should be worked out or other people should also be having this problem.

PHP was suggested as a tag for this question, so I thought I would add it.

Thanks,

pipenv install google-ads produces an error:

ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. This is likely caused by a bug in google-ads. Report this to its maintainers. ✘ Installation Failed 

This is the whole thing:

% pipenv install google-ads Creating a virtualenv for this project... Pipfile: /Users/ralf/code/test_snippets/20-12-10_google_ads/Pipfile Using /usr/local/bin/python3.9 (3.9.0) to create virtualenv... ⠦ Creating virtual environment...created virtual environment CPython3.9.0.final.0-64 in 325ms   creator CPython3Posix(dest=/Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj, clear=False, global=False)   seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/Users/ralf/Library/Application Support/virtualenv)     added seed packages: pip==20.2.4, setuptools==50.3.2, wheel==0.35.1   activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator ✔ Successfully created virtual environment!  Virtualenv location: /Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj Installing google-ads... Error:  An error occurred while installing google-ads! Error text: Processing /Users/ralf/Library/Caches/pipenv/wheels/0a/09/22/d4a45ac4200d9c68a5215e554d4181b51af2c01b4f16232b5c/google_ads-8.0.0-py3-none-any.whl Collecting googleapis-common-protos<2.0.0,>=1.5.8   Using cached googleapis_common_protos-1.52.0-py2.py3-none-any.whl (100 kB) Collecting google-auth-oauthlib<1.0.0,>=0.3.0   Using cached google_auth_oauthlib-0.4.2-py2.py3-none-any.whl (18 kB) Collecting protobuf<4.0.0,>=3.13.0   Using cached protobuf-3.14.0-py2.py3-none-any.whl (173 kB) Collecting google-api-core<2.0.0,>=1.14.0   Using cached google_api_core-1.23.0-py2.py3-none-any.whl (91 kB) Processing /Users/ralf/Library/Caches/pipenv/wheels/69/60/81/5cd74b8ee068fbe9e04ca0d53148f28f5c6e2c5b177d5dd622/PyYAML-5.3.1-cp39-cp39-macosx_11_0_x86_64.whl Requirement already satisfied, skipping upgrade: setuptools>=40.3.0 in /Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/lib/python3.9/site-packages (from google-ads->-r /var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pipenv-p0t2erav-requirements/pipenv-xefzspt6-requirement.txt (line 1)) (50.3.2) Collecting grpcio<2.0.0,>=1.33.2   Using cached grpcio-1.34.0.tar.gz (21.0 MB)     ERROR: Command errored out with exit status 1:      command: /Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-install-woj2xbsv/grpcio/setup.py'"'"'; __file__='"'"'/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-install-woj2xbsv/grpcio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-pip-egg-info-d7h_fmnt          cwd: /private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-install-woj2xbsv/grpcio/     Complete output (9 lines):     Traceback (most recent call last):       File "<string>", line 1, in <module>       File "/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-install-woj2xbsv/grpcio/setup.py", line 359, in <module>         if mac_target and (pkg_resources.parse_version(mac_target) <       File "/Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/lib/python3.9/site-packages/pkg_resources/__init__.py", line 113, in parse_version         return packaging.version.Version(v)       File "/Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py", line 275, in __init__         match = self._regex.search(version)     TypeError: expected string or bytes-like object     ---------------------------------------- ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. This is likely caused by a bug in google-ads. Report this to its maintainers. ✘ Installation Failed  

I do not know much about pipenv, I am just using it – so far without any problems. Now I started from scratch and ran brew update, brew outdated and brew upgrade before.

How do I report that to its maintainers best, and what does "its" mean, Google Ads or Pipenv? Is there something else I could do?

Update:

Following tai271828's advice here are some further information about the system I am using:

  • I just updated to Mac OS 11.1 (20C69) (so it probably was 11.01 before)
  • python --version --> Python 2.7.16
  • which python --> /usr/bin/python
  • which python3 --> /usr/local/bin/python3
  • python3 --version --> Python 3.9.0
  • which pipenv --> /usr/local/bin/pipenv
  • which pip --> /usr/local/bin/pip
  • which pip3 --> /usr/local/bin/pip3

I used homebrew to install Python 3 and then pip3 install pipenv.

Update 2:

With simply pip (instead of pipenv) I first ran into the same error, but after updating pip, it worked fine. This was my input:

python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install google-ads 

Update 3:

I tried to follow tai271828's advise, to update my pip in my pipenv env prior to installing the google-ads package. These were my commands:

pipenv --rm pipenv shell pip insall --upgrade pip exit pipenv install google-ads 

The error message still looks similar:

Installing google-ads... Adding google-ads to Pipfile's [packages]... ✔ Installation Succeeded  Pipfile.lock (16c839) out of date, updating to (f55075)... Locking [dev-packages] dependencies... Locking [packages] dependencies... Building requirements... Resolving dependencies... ✘ Locking Failed!  ERROR:pip.subprocessor:Command errored out with exit status 1:  command: /Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-resolver-p0oskrkm/grpcio/setup.py'"'"'; __file__='"'"'/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-resolver-p0oskrkm/grpcio/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-resolver-p0oskrkm/grpcio/pip-egg-info      cwd: /private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-resolver-p0oskrkm/grpcio/ Complete output (9 lines): Traceback (most recent call last):   File "<string>", line 1, in <module>   File "/private/var/folders/nc/s6kd50kj3gdg81vhy9qwddkw0000gn/T/pip-resolver-p0oskrkm/grpcio/setup.py", line 359, in <module>     if mac_target and (pkg_resources.parse_version(mac_target) <   File "/Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/lib/python3.9/site-packages/pkg_resources/__init__.py", line 113, in parse_version     return packaging.version.Version(v)   File "/Users/ralf/.local/share/virtualenvs/20-12-10_google_ads-S7vGVfKj/lib/python3.9/site-packages/pkg_resources/_vendor/packaging/version.py", line 275, in __init__     match = self._regex.search(version) TypeError: expected string or bytes-like object ---------------------------------------- Traceback (most recent call last):   File "/usr/local/lib/python3.9/site-packages/pipenv/resolver.py", line 764, in <module>     main()   File "/usr/local/lib/python3.9/site-packages/pipenv/resolver.py", line 758, in main     _main(parsed.pre, parsed.clear, parsed.verbose, parsed.system, parsed.write,   File "/usr/local/lib/python3.9/site-packages/pipenv/resolver.py", line 741, in _main     resolve_packages(pre, clear, verbose, system, write, requirements_dir, packages, dev)   File "/usr/local/lib/python3.9/site-packages/pipenv/resolver.py", line 702, in resolve_packages     results, resolver = resolve(   File "/usr/local/lib/python3.9/site-packages/pipenv/resolver.py", line 684, in resolve     return resolve_deps(   File "/usr/local/lib/python3.9/site-packages/pipenv/utils.py", line 1395, in resolve_deps     results, hashes, markers_lookup, resolver, skipped = actually_resolve_deps(   File "/usr/local/lib/python3.9/site-packages/pipenv/utils.py", line 1108, in actually_resolve_deps     resolver.resolve()   File "/usr/local/lib/python3.9/site-packages/pipenv/utils.py", line 823, in resolve     results = self.resolver.resolve(max_rounds=environments.PIPENV_MAX_ROUNDS)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 180, in resolve     has_changed, best_matches = self._resolve_one_round()   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 268, in _resolve_one_round     their_constraints.extend(self._iter_dependencies(best_match))   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/resolver.py", line 383, in _iter_dependencies     dependencies = self.repository.get_dependencies(ireq)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 229, in get_dependencies     legacy_results = self.get_legacy_dependencies(ireq)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 350, in get_legacy_dependencies     results, ireq = self.resolve_reqs(   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/piptools/repositories/pypi.py", line 306, in resolve_reqs     results = resolver._resolve_one(reqset, ireq)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/legacy_resolve.py", line 339, in _resolve_one     abstract_dist = self._get_abstract_dist_for(req_to_install)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/legacy_resolve.py", line 287, in _get_abstract_dist_for     abstract_dist = self.preparer.prepare_linked_requirement(req)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/operations/prepare.py", line 508, in prepare_linked_requirement     abstract_dist = _get_prepared_distribution(   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/operations/prepare.py", line 95, in _get_prepared_distribution     abstract_dist.prepare_distribution_metadata(finder, build_isolation)   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/distributions/sdist.py", line 40, in prepare_distribution_metadata     self.req.prepare_metadata()   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/req/req_install.py", line 564, in prepare_metadata     self.metadata_directory = self._generate_metadata()   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/req/req_install.py", line 538, in _generate_metadata     return generate_metadata_legacy(   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/operations/build/metadata_legacy.py", line 115, in generate_metadata     call_subprocess(   File "/usr/local/lib/python3.9/site-packages/pipenv/patched/notpip/_internal/utils/subprocess.py", line 242, in call_subprocess     raise InstallationError(exc_msg) pipenv.patched.notpip._internal.exceptions.InstallationError: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

By the way: I upgraded to Python 3.9.1 meanwhile.