Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Warning: file_exists(): open_basedir restriction in effect. File(/var/www/efs/wp-content/plugins/memcached-is-your-friend/memcached-class-object-cache.php) is not within the allowed path(s): (/www/logichop_469/public:/www/logichop_469/mysqleditor:/www/logichop_469/web:/www/logichop_469/deploy:/www/logichop_469/deployment:/www/logichop_469/deployments:/www/logichop_469/tmp:/usr/share:/tmp:/dev/urandom) in /www/logichop_469/public/wp-content/object-cache.php on line 50

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-theme.php on line 544

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-includes/comment-template.php on line 1745

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/rest-api/class-wp-rest-request.php on line 960

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/rest-api/class-wp-rest-request.php on line 980

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/rest-api/class-wp-rest-request.php on line 992

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/rest-api/class-wp-rest-request.php on line 1003

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-includes/class-wp-block-list.php on line 199

Deprecated: Return type of Pimple\Container::offsetExists($id) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/wp-tools-gravity-forms-divi-module-premium/vendor/pimple/pimple/src/Pimple/Container.php on line 133

Deprecated: Return type of Pimple\Container::offsetGet($id) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/wp-tools-gravity-forms-divi-module-premium/vendor/pimple/pimple/src/Pimple/Container.php on line 98

Deprecated: Return type of Pimple\Container::offsetSet($id, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/wp-tools-gravity-forms-divi-module-premium/vendor/pimple/pimple/src/Pimple/Container.php on line 79

Deprecated: Return type of Pimple\Container::offsetUnset($id) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/wp-tools-gravity-forms-divi-module-premium/vendor/pimple/pimple/src/Pimple/Container.php on line 143

Deprecated: Return type of Gravity_Forms\Gravity_Forms\External_API\GF_API_Response::jsonSerialize() should either be compatible with JsonSerializable::jsonSerialize(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/external-api/class-gf-api-response.php on line 179

Deprecated: version_compare(): Passing null to parameter #1 ($version1) of type string is deprecated in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/addon/class-gf-addon.php on line 5755

Deprecated: Return type of GF_Field::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/fields/class-gf-field.php on line 93

Deprecated: Return type of GF_Field::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/fields/class-gf-field.php on line 99

Deprecated: Return type of GF_Field::offsetSet($offset, $data) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/fields/class-gf-field.php on line 108

Deprecated: Return type of GF_Field::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /www/logichop_469/public/wp-content/plugins/gravityforms/includes/fields/class-gf-field.php on line 117

Warning: The magic method AffiliateWP_Allow_Own_Referrals::__wakeup() must have public visibility in /www/logichop_469/public/wp-content/plugins/affiliatewp-allow-own-referrals/includes/class-affiliatewp-allow-own-referrals.php on line 131

Deprecated: Creation of dynamic property Cookie_Law_Info_Cli_Policy_Generator::$plugin_name is deprecated in /www/logichop_469/public/wp-content/plugins/cookie-law-info/admin/modules/cli-policy-generator/cli-policy-generator.php on line 176

Deprecated: Use of "self" in callables is deprecated in /www/logichop_469/public/wp-content/plugins/cookie-law-info/includes/class-cookie-law-info.php on line 606

Warning: Private methods cannot be final as they are never overridden by other classes in /www/logichop_469/public/wp-content/plugins/df-gravityforms-divi-plugin-premium/kirki/packages/kirki-framework/compatibility/src/Control.php on line 67

Warning: Private methods cannot be final as they are never overridden by other classes in /www/logichop_469/public/wp-content/plugins/df-gravityforms-divi-plugin-premium/kirki/packages/kirki-framework/compatibility/src/Control.php on line 103

Deprecated: Creation of dynamic property Kirki\Compatibility\Framework::$modules is deprecated in /www/logichop_469/public/wp-content/plugins/df-gravityforms-divi-plugin-premium/kirki/kirki.php on line 68

Deprecated: Optional parameter $text declared before required parameter $cart_item_key is implicitly treated as a required parameter in /www/logichop_469/public/wp-content/plugins/logichop-subscription-conduit/logichop-subscription-conduit.php on line 323

Deprecated: Creation of dynamic property WC_Sendinblue_Integration::$customizations is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php on line 136

Deprecated: Creation of dynamic property WC_Sendinblue_Integration::$ws_subscribe_enable is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php on line 153

Deprecated: Creation of dynamic property WC_Sendinblue_Integration::$ws_smtp_enable is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php on line 154

Deprecated: Creation of dynamic property WC_Sendinblue_Integration::$ws_template_enable is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php on line 156

Deprecated: Creation of dynamic property WC_Sendinblue_Integration::$ws_sms_enable is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-sendinblue-newsletter-subscription/woocommerce-sendinblue.php on line 157

Deprecated: Creation of dynamic property WOO_SL_functions::$query_vars is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-software-license/include/class.sl.functions.php on line 35

Deprecated: Creation of dynamic property WOO_SL::$licence is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-software-license/include/class.sl.php on line 21

Deprecated: Creation of dynamic property WCS_Retry_Admin::$setting_id is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce-subscriptions/includes/payment-retry/admin/class-wcs-retry-admin.php on line 22

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/SchemaController.php on line 66

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/SchemaController.php on line 69

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-content/plugins/woocommerce/packages/woocommerce-blocks/src/StoreApi/RoutesController.php on line 86

Deprecated: Creation of dynamic property wpdb::$payment_tokenmeta is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$order_itemmeta is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$wc_product_meta_lookup is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$wc_tax_rate_classes is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$wc_reserved_stock is deprecated in /www/logichop_469/public/wp-includes/wp-db.php on line 668

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-content/plugins/woocommerce/includes/wc-core-functions.php on line 1705

Deprecated: Creation of dynamic property WooCommerce::$api is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce/includes/class-woocommerce.php on line 554

Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/logichop_469/public/wp-content/plugins/woocommerce/src/Internal/DownloadPermissionsAdjuster.php on line 157

Deprecated: Creation of dynamic property Automattic\WooCommerce\Database\Migrations\CustomOrderTable\PostToOrderTableMigrator::$table_names is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce/src/Database/Migrations/CustomOrderTable/PostToOrderTableMigrator.php on line 25

Deprecated: Creation of dynamic property Automattic\WooCommerce\Database\Migrations\CustomOrderTable\PostToOrderAddressTableMigrator::$table_names is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce/src/Database/Migrations/CustomOrderTable/PostToOrderAddressTableMigrator.php on line 42

Deprecated: Creation of dynamic property Automattic\WooCommerce\Database\Migrations\CustomOrderTable\PostToOrderOpTableMigrator::$table_names is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce/src/Database/Migrations/CustomOrderTable/PostToOrderOpTableMigrator.php on line 26

Deprecated: Creation of dynamic property Automattic\WooCommerce\Database\Migrations\CustomOrderTable\PostMetaToOrderMetaMigrator::$table_names is deprecated in /www/logichop_469/public/wp-content/plugins/woocommerce/src/Database/Migrations/CustomOrderTable/PostMetaToOrderMetaMigrator.php on line 43
Automate Your Marketing with Smart Landing Pages - Logic Hop

As marketers we spend lots of time crafting the perfect landing page for our own promotions and for our clients’ promotions as well.

How often have you found yourself tweaking CTAs to fine tune the message or even creating multiple landing pages with the same layout, but a different call-to-action?

With Logic Hop you can easily craft dynamic CTAs and display the perfect message to every visitor.

No more creating landing pages for each ad variation or social media post… Not only does this make your workload easier, it also makes your ads more efficient and reduces your bounce rate. You save time and money. Oh yeah, you can also increase conversions by 200% or more!

You had me at increased conversions.

In this tutorial we’ll take a look at how to create dynamic CTAs and automate your message. Fair warning, this is gonna take about ten minutes. No, really, with Logic Hop it’s that easy.

We’ll start with a simple landing page for a fictitious eBook template with a static call-to-action.

Static Call-to-Action

Nothing too fancy, but this is a solid CTA we can use as our default call-to-action. By default we mean this is a CTA we can show to anyone visiting the site. We’ll use this when we don’t have a specific visitor that we’re targeting.

Let’s Get Personal

There are a number of ways we can target specific visitors such as:

  • First time visitors
  • Returning visitors
  • Visitor location
  • Referring site
  • Social media posts
  • Display & PPC ad variations

Our fictitious product is perfect for design, art, fashion and music and we’re going to promote it using pay-per-click ads, display ads and on social media. So in order to personalize our landing we’ll need a way to identify potential customers with those interests. We going to do this with UTM codes.

Putting UTM Codes to Work

You’re probably already familiar with UTM codes and using them with your ads, if not here’s a quick overview.

A UTM code is a simple code that you can attach to a custom URL in order to track a source, medium, and campaign name. This enables Google Analytics to tell you where searchers came from as well as what campaign directed them to you. Read more about UTM codes from Neil Patel.

Essentially, UTM codes are query string variables with specific names used by Google Analytics. This means a URL like:

  https://stage.logichop.com

Can have optional variables such as utm_term with a value assigned to it, such as design. This would look like:

  https://stage.logichop.com?utm_term=design

You can “build” UTM codes by hand. This simply means you manually type the parameters at the end of your URL. Can can also use one of many free campaign URL builders like this one from Google to help add UTM codes to your URLs.

So for our needs, we’re simply going to use the utm_term parameter and the values with which will identify or various uses for our eBook, which are:

  • design
  • art
  • fashion
  • music

It’s worth noting that your URL can, and often will, contain multiple UTM codes and even optional query string variables. In fact most URLs will have multiple parameters such as:

  https://stage.logichop.com?utm_campaign=fall&utm_source=instagram&utm_term=design

Social Media Posts

If we’re writing a social media post targeting designers, we could use the URL shown above and add it to our Tweet. This would let our site know anyone who clicked the link was interested in design eBook templates.

Tweet targeting designers

PPC & Display Ads

For our PPC and display ads we’d use the URL with the corresponding UTM code for each ad variation. The following example would let our site know that anyone who clicked the ad was interested in fashion eBook templates.

PPC ad targeting fashion

What condition is your condition in?

Now that we have our URLs we can build out our personalization. Logic Hop uses conditions to determine which content to display.

The best way to think about conditions is that they’re like questions like:

Did the user click on a link with utm_term=designer?

Creating conditions is easy using the Logic Hop Condition Builder:

  • Navigate to Logic Hop > Conditions in your WordPress Dashboard
  • Add a new condition titled UTM Term: Design, Art, Fashion, Music
  • Add the following Condition Statements
    • [ If ] [ Query String Session ] [ Is In List ] [ design, art, fashion, music ]
  • Click Publish

Logic Hop Condition Builder

Think about the condition we created – It’s really quite simple… Logic Hop will look to see if the URL contains the UTM code utm_term. If utm_term has the value design, art, fashion or music our condition is met and considered true. If it’s not met, the condition is considered false. Logic Hop can use a condition’s state, if it’s true or false, to perform an action such as displaying content.

Playing With Blocks

There are a number of ways we can put our condition to use, but the easiest is with a Logic Block. Logic Blocks consist of conditional content areas which are displayed based on the state of one or more conditions.

To create our Logic Block:

  • Navigate to Logic Hop > Logic Blocks in your WordPress Dashboard
  • Add a new Logic Block titled eBook CTA
  • Select the condition titled UTM Term: Design, Art, Fashion, Music
  • In the Show Content section enter:
    • Flyleaf is the best template to promote eBooks.
  • Place your cursor between promote and eBooks
  • Click Add Data Variable
  • Under Variable select QueryStore:#var#
  • Replace #var# with utm_term
  • Click Insert Variable
  • After the Show Content section, change End If to Else
  • A new Show Content section will appear, enter our default CTA:
    • Flyleaf is the best template to promote your eBook.
  • Click Publish

Creating a Logic Block

Ready, Set, Action!

With our Logic Block created all that’s left to do is add it to our landing page. Logic Blocks use WordPress Shortcodes so you can simply copy and paste it anywhere your page. The great thing about shortcodes is that they’ll work with any WordPress editor, including Gutenberg.

To add the Logic Block to our page:

  • Navigate to your landing page in your WordPress Dashboard
  • Place your cursor where you’d like the Logic Block to appear
  • Click the Logic Hop button to open the Logic Hop tool palette
  • Click the Blocks tab
  • Select eBook CTA
  • Click Insert Logic Block
  • Click the Update button to save your page

Adding a Logic Block to a page

Personalization in Action

Now that everything is in place, let’s take a look at what’s happening.

We’re basically asking a question and performing an action:

  If the URL has design, art, fashion or music as the utm_term
    Display the first content section
  Else
    Display the second content section

The specific functionality is:

  1. When a visitor comes to the page from one of our ads or social links:
  • The UTM Term condition is met (true)
  • The dynamic CTA is display – The if block
  • The value of the UTM Term is automatically displayed
  1. When a visitor comes to the page directly:
  • The UTM Term condition is not met (false)
  • The default CTA is displayed – The else block

See It In Action

Dynamic Calls-to-Action

Pretty cool right?

With a single landing page we are automatically displaying one of five the following CTAs:

  • Flyleaf is the best template to promote your eBook.
  • Flyleaf is the best template to promote design eBooks.
  • Flyleaf is the best template to promote art eBooks.
  • Flyleaf is the best template to promote fashion eBooks.
  • Flyleaf is the best template to promote music eBooks.

To change the text we used a Data Logic Tag to automatically grab the value of the UTM code and display it in our call-to-action.

But wait…

What happens if the visitor comes with a different utm_term like skateboarder? Since skateboarder is not one of the values in our condition Is In List the condition is not met, and skateboarder is never displayed.

Now what if the user navigates to another page and comes back to the landing page? Great question! The URL will no longer have the UTM code, will they see the default message and be confused? Nope! We’re using the Logic Hop Query String Session and QueryStore options so the utm_term value is stored for the visitor’s entire session and they’ll always see the right message.

But what if…

  • You want to display multiple values? Yes, you can!
  • Your pages are cached? Logic Hop works with caching!
  • You want to combine multiple conditions? Yup, you can do that too!

With Logic Hop you can personalize almost any element on your site – Headlines, copy, images, widgets and even your CSS. Logic Hop also supports goals and can integrate with WooCommerce, Facebook Pixel, Google analytics and more.

Going farther? Further!

In this tutorial we’re just dipping our toe in the deep water that is personalization. In fact, Logic Hop is so powerful, that sometimes it’s a little daunting. What can you do? Everything! OMG how do I do that? Easy… Start by taking a look at our documentation and tutorials.

Want to get started super fast?

Don’t worry, we make it easy with ready-made personalizations called Recipes. In fact, you can add Logic Hop Recipes and literally be personalizing in minutes.

Have questions or custom needs? We’re here to help – Just let us know or book a time with us and we’ll work out exactly what you need.

Start personalizing today – Get your free 14-day Logic Hop trial now!