ShopWP affiliate dashboard screenshot

Introducing the new ShopWP Affiliate Program

I’m super excited to announce the new ShopWP affiliate program!

Just in time for the holiday season, the new program introduces a completely redesigned affiliate portal making it much easier to see your affiliate link usage, clicks, payouts, etc.

This article will cover everything you need to know about how the new program works, the sign up process, and managing your account online.

Let’s begin!

How it works

First, anyone who is currently using the existing affiliate program has been automatically migrated to the new system. No changes are needed on your behalf. Everything will continue working as expected.

The program is very simple—receive 20% of the final order total for any customer which purchases ShopWP using your special affiliate link.

You will also receive an affiliate payout for each subscription renewal. That’s a major upgrade from the original program that only paid initial purchases only.

After signing up, you gain access to a special affiliate link. You can send your customers or clients this link to purchase ShopWP or any ShopWP extension.

The link itself will store a browser cookie for up to 30 days. So if a user clicks your link and decides to purchase the following week, you will still be credited—assuming they don’t clear their browser cache.

If you’re an existing ShopWP customer you are not automatically added as an affiliate. You will need to manually sign up using the application form.

How to sign up

Signing up is super simple. Just visit the become an affiliate page and fill out the form.

A screenshot of the ShopWP affiliate sign up page

You will be automatically approved and an account will be created for you. After signing up, you can visit your Affiliate Portal to manage your account.

Login to your Affiliate account

You can login to your Affiliate Portal in two ways:

Configure payout method

After signing up, the next step will be to configure a payout method. This is important so we know where to send your monthly payment to.

Inside your Affiliate Portal click the profile icon in the top right. From there, select Settings.

Fill out the required info and click Register for Payouts Service.

You will then be taken to a connection wizard. Here you can connect a bank account or debit card. This is where ShopWP will deposit your funds to at the end of every month.

After finishing the connection wizard, you’re all set!

Your affiliate URLs

The Affiliate URLs section is where you’ll manage your affiliate links. You can simply use the default affiliate link or create your own—totally up to you. Both will work fine.

The affiliate URL will contain a URL param called swpa which is just short for “ShopWP Affiliate”. The value will be your WordPress user ID.

You can add this link anywhere on the internet. ShopWP will track whether traffic came from your special link or not via cookies. The tracking cookie will last up to 30 days—assuming the user does not clear their browser cache.

Monitoring page visits

The Visits tab will show who’s actually clicking your link. This is particularly useful for confirming that your link is working as expected.

I recommend testing your affiliate link by opening a second browser. (Not a new tab in your existing browser). Then, click the link in the new browser and refresh your Affiliate Portal. Does the test traffic show up under the Vists tab?

If you’re having trouble getting test traffic to show up, please submit a support ticket and we’ll help you right away.

View referrals

After a customer successfully buys something from ShopWP using your link, the referral will show up under the Referrals tab.

You can go here to confirm that you’ve been correctly associated with a successful conversion.

The Rejected status means the conversion is not a valid referral. This is usually due to the customer requesting a refund on the order.

Creative

We’ve put together a useful brand assets .zip file for you to use. This file contains our logo in various formats and a style guide showcasing which colors and fonts to use.

If you have any additional questions about the referal program please send us an email. We’re eager and happy to help with any marketing needs!

Good luck!

Rocket taking off

A simple way to boost WordPress performance

Making a website faster can sometimes be a very tricky process—especially a WordPress site. There are many variables to consider like images, plugins, bloated JavaScript, etc.

However I recently discovered a fantastic way to slightly improve the speed of any website. The best part? It doesn’t take much effort to implement.

Let’s take a look.

Introducing, DNS-prefetch

The technique is called DNS-prefetch, and involves adding some extra HTML code to your site’s <head> section.

It looks like this:

<link rel="preconnect" href="https://cdn.shopify.com" crossorigin />
<link rel="dns-prefetch" href="https://cdn.shopify.com" />

Let’s break this down.

There are two <link> tags in the above code snippet, one for preconnect and the other for dns-pretetch.

The dns-prefetch link tag will attempt to “prefetch” the DNS resolution made to any third-party domain that your site connects to. A great example of this would be including icons from Font Awesome, or custom fonts from Google fonts. Our ShopWP plugin also leverages this technique.

The preconnect link tag, if supported by the user’s browser, will attempt to establish a full connection to the third-party server. This includes:

  • 🔍 DNS resolution
  • 🔒 Establishing the TCP connection
  • 🤝 Performing the TLS handshake (if applicable)

So using dns-prefetch and preconnect together will help the most.

Now let’s discover why this works.

Why does this help boost WordPress performance?

So why does this help boost performance? To understand this, let’s take a quick look at how a website works.

If you load any asset (image, font, script, css, etc) from a third-party server, a bunch of things have to take place before that asset is actually loaded into your site.

  1. The first thing that has to happen is your site will perform a “DNS resolution” for the third-party server. This essentially converts the domain name to a real IP address. This takes time to do.
  2. Your site will then send an HTTP request to the third-party server, asking for the specific resource. This also takes time.
  3. If you’re connecting to a server via https, the secure connection, or handshake, needs to happen. This will take more time.

So by implementing DNS prefetching, your site will run the above steps before the assets are even requested; essentially front-running all of the expensive work. This can potentially shave off hundreds of milliseconds—which definitely adds up—depending on how large your site is!

A great resource to learn more about this process can be found on the MDN docs.

Things to consider

There are a couple things to consider before implementing DNS prefetching:

  1. This technique will only work for cross-origin (third-party) domains. This means the speed of any asset or network request made internally won’t be improved. This will only apply to third-party domains.
  2. If you’re using a premium WordPress theme, the theme developer may have already implemented this for you. If you’re not sure, the best way to check is to simply ask them. If you’re comfortable, you could also create a child theme and make the changes yourself. See the WordPress hook section below.

Before you copy and paste, be sure to read more about how to customize this for your needs.

Under the hood, ShopWP will fetch your Shopify data from two third-party domains:

  • cdn.shopify.com
  • .myshopify.com

In the example below, we’re using both rel="preconnect" and rel="dns-prefetch" for the best possible results. The https://cdn.shopify.com domain is used when loading product images, and .myshopify.com is used when fetching product data.

Using DNS prefetch to speed up ShopWP

ShopWP is built to be fast, and by leveraging DNS prefetching you can make it even faster. Here’s how to configure things.

ShopWP makes requests for two domains:

  • cdn.shopify.com
  • <yourstore>.myshopify.com

The <yourstore> part is your specific Shopify domain. This is the same domain you use to login to Shopify. You’ll want to replace that with your own domain.

The full code snippet will look something like this:

<link rel="preconnect" href="https://cdn.shopify.com" crossorigin />
<link rel="dns-prefetch" href="https://cdn.shopify.com" />

<link rel="preconnect" href="https://<yourstore>.myshopify.com" crossorigin />
<link rel="dns-prefetch" href="https://<yourstore>.myshopify.com" />

Using a WordPress hook

To add this HTML to your WordPress theme, you can leverage the wp_head action hook inside your theme like this:

<?php

function add_dns_prefetch() { ?>

    <link rel="preconnect" href="https://cdn.shopify.com" crossorigin/>
    <link rel="dns-prefetch" href="https://cdn.shopify.com" />

    <link rel="preconnect" href="https://<yourstore>.myshopify.com" crossorigin/>
    <link rel="dns-prefetch" href="https://<yourstore>.myshopify.com" />

<?php }

add_action( 'wp_head', 'add_dns_prefetch' );

Conclusion

While this won’t make your site load instantly, it is something you can do to improve the overall speed of your site. It’s a simple and easy technique you can implement, which is definitely rare in the world of web performance!

If you’d like to learn more about how this works, including a technical deepdive, I highly recommend this MDN article on DNS prefetching to learn more about how it works.

ShopWP 3.0 release coming soon

ShopWP Pro 3.0 is will bring better eCommerce to WordPress

Hey everyone!

I’m super excited to announce that ShopWP 3.0 is coming soon! This will mark the next major leap for the plugin and will include a lot of awesome things.

Below is a sneak peak of what’s in store! 👇

🔲 Gutenberg Blocks

Last year, I asked everyone to share their interest in Gutenberg blocks. The consensus seemed to be that most of you were neutral in whether custom blocks would benefit your workflow. I recently conducted the same poll and the tide has shifted!

For this reason, and because WordPress in general is moving forward, I’ll be creating a handful of custom Gutenberg blocks for ShopWP! They’re about 70% done at this point and I must say, they’re pretty dang cool.

🧩 Custom Elementor Widgets

Many of you who were neutral on your opinion of Gutenberg expressed a desire to integrate with page builders instead. I think this is a fantastic idea! I’ll be starting with custom Elementor widgets for 3.0, and building custom Divi modules shortly after.

💵 💴 Local Currency Switching

The local currency feature is coming back! Due to various reasons I needed to turn this feature off in 2.0, but it will once again be apart of the plugin in version 3.0.

Improved Templating System

The templating system will be improved to allow for things such as customizing product details, overriding webhook callbacks, and making layout changes easier.

⚡️ Faster Load Times

Many of you have told me that the plugin doesn’t load as quick on mobile. I’ve made various changes in 3.0 that will cut the desktop and mobile load times in half. This is a big deal!

🔄 Shopify Tags as Native WordPress Tags

In an effort to better integrate Shopify into WordPress, I’ll now be syncing Shopify tags as native WordPress tags for each product post. After 3.0, I’ll be doing the same for collections as categories. Both of these things will be configurable in the plugin settings.


3.0 will also include the following …

  • More options for customizing permalinks
  • Refactored admin pages
  • Better documentation
  • Better internationalization
  • Improved options for displaying products from collections
  • Bug fixes (including various loading issues)
  • Cleaning codebase (removing unused code)
  • Collections will now adhere to the “selective sync” settings
  • Remove external CSS to prevent theme conflicts
  • More unit tests

… and more!

Can’t wait to share more with you soon!

ShopWP we need your help!

We need your help!

👋 Hey everyone

The next goal for ShopWP is to clearly define the 2019/2020 roadmap. A crucial part of this process is learning from all of you!

We’ve created a short three question survey that will literally take two minutes to fill out.

The questions are surrounding:

  1. How you’re using ShopWP
  2. What problems you’re solving by using the plugin
  3. What you like the most about the plugin

To show our appreciation, we’ll send you a 10% off discount code that will work for any ShopWP Pro renewal or upgrade. Just add your email at the end of the survey.

👉Take the ShopWP survey

Thanks everyone!

ShopWP Version 1.3.4

⭐️ New Feature: Local Currency Support

You can now enable local currency support under the pricing settings. This will detect the user’s geolocation and automatically convert the base shop price into their local currency.

The current version of this feature is mostly a simplistic visual change. It does not modify the currency in which they’re actually billed in. That will still be your store’s base currency.

When the user goes to the checkout page, they will also see the final price in the store’s base currency, so it might be useful to provide your user’s a note about this. In future versions I’ll be making this more robust.

⭐️ New Feature: Synchronous Requests

Synchronous requests is a new setting under the syncing options that enables a slower, but potentially more reliable syncing method. This greatly improves the syncing stability on some webhosts.

If you’re struggling with syncing timeouts or just general hangups, try enabling this setting!

⭐️ New Feature: Order products by manual position

The [wps_products] shortcode now has the option to sort the products by the manual position from within a collection. This is only applicable when showing products by collection.

For example: [wps_products collections="Homepage" orderby="position"]

Full 1.3.4 Changelog

  • 📦 Feature: Local currency support
  • 📦 Feature: Synchronous sync
  • 📦 Feature: Added support for ordering products by manual position set within custom collections
  • 🛠 Fixed: Syncing error during webhooks caused by an invalid topic
  • 🛠 Fixed: Bug preventing images from displaying when crop is set and width / height remain auto
  • 🛠 Fixed: Issue with some hosts blocking HTTP DELETE requests
  • 🛠 Fixed: Price inconsistency for some products on the collection single pages
  • 🛠 Fixed: @babel/polyfill is loaded more than once warning
  • 🛠 Fixed: JS conflict preventing ACF fields from working on products and collections admin pages
  • 📣 Updated: Plugin settings page sub nav links from changing container width during active state
  • 📣 Updated: Better cart item spinner icon position
  • 💻 Dev: Upgraded the Shopify JS Buy SDK to v2.0.1

ShopWP Version 1.3.2

👋 Hello!

I hope everyone had a wonderful 2018!

This release contains one new feature and a few minor bug fixes. I have some really exciting features coming in early 2019 which I’ll be revealing soon so keep an eye out!

⭐️ New Feature: Fixed Cart Icon

You now have the ability to show a fixed cart icon. This is similar to the default Shopify buy button functionality. The icon will show on all pages by default, and you can control the icon colors within the plugin settings

WP Shopify fixed cart tab setting

WP Shopify fixed cart tab color settings

WP Shopify fixed cart icon

Full 1.3.2 Changelog

  • 🛠 Fixed: Issue causing $0 price to show when a product is out of stock. Instead will show the first non-zero price.
  • 🛠 Fixed: Bug causing shortcode attribute orderby=”manual” to fail
  • 📦 Added: Added ability to display cart icon as a fixed tab
  • 📦 Added: Added webhook 200 response during callback to prevent failing webhook notifications
Screenshot of the pricing settings

ShopWP Version 1.2.9

Hey everyone,

The release this week contains three new features; two of which are related to product pricing. We now have the ability to show sales pricing, price ranges, and determining whether the checkout button opens in a new tab or not. Also along with these new features are four important bug fixes.

⭐️ Feature: Checkout button to open new tab

A simple yet important new feature, you can now set the checkout button to either open the checkout page within a new tab or the current tab.

ShopWP checkout button target setting

⭐️ Feature: Product “compare at” pricing

This new setting will allow you to show the product’s “compare at” price next to the normal price. This mimics the standard “sales” pricing that most Shopify themes provide. ShopWP will style this for you out-of-the-box with a strikethrough.

ShopWP pricing settings compare at

⭐️ Feature: Product “range” pricing toggle

Prior to 1.2.9, if your product had different variant prices, then you would see a range of prices. Sometimes this was undesirable as some store owners only want to show a single price regardless of whether other variants have different prices. You can now toggle price ranges on / off with this new setting. If you turn this off, then the variant in the first position will show upon initial load.

ShopWP pricing settings range

Full 1.2.9 Changelog

  • ⭐️ New Feature: Ability to set Checkout button to open new tab / current tab.
  • ⭐️ New Feature: Product “compare at” pricing.
  • ⭐️ New Feature: Product “range” pricing toggle.
  • 🛠 Fix: Missing featured images for some products.
  • 🛠 Fix: Bug during add to cart when variant value is of type integer and not string.
  • 🛠 Fix: Bug causing hidden product and collection data on custom post edit page.
  • 🛠 Fix: Bug in the HTTP response parser that coerced large int values into E numbers. Now using JSON_BIGINT_AS_STRING to convert them into strings instead.
  • 🛠 Fix: Conflict with Divi theme.
  • 🎁 Update: Shopify URL to cart image links.
  • 🎁 Update: Removed ability to manually add new Products / Collection posts.
  • 🎁 Update: Better vertical aligning for input fields on plugin settings page.
  • 💻 Dev: Better security checks on plugin settings form fields.
  • 💻 Dev: Removed on blur AJAX saving of plugin settings. All form fields now require form submission before saving.
  • 💻 Dev: Plugin settings sub nav history is now persistent.