The Best Google Chrome Extensions For Every WordPress Web Developer

Google Chrome wasn’t the first web browser to enter the arena, yet despite a growing number of competitors over the years, it continues to hold the title of most popular.

Since arriving on the scene in 2008, Chrome steadily closed ranks, then easily surpassed the once-dominant Mozilla Firefox and Microsoft Internet Explorer (the latter of which had upwards of 90% market share in its heyday).

Even diehard Foxophiles and Gate(s)keepers―currently retaining barely 5% of the browser market combined―have long since switched to the metallic maven. Whether surfing from a desktop or a mobile device, Chrome is definitively the most-used browser in pretty much any country.

Most popular browsers 2021 graph
Chrome’s immense popularity far exceeds all other available browsers. Source: Gs.statcounter.com

As a web developer, you want to be sure that what you’ve designed is able to adapt to any device or browser. Google Chrome, as the most used browser, should be at the top of that list.

Aside from using Chrome as part of your browser testing, it’s also helpful in terms of the tools (or extensions) that were specifically created for web developers.

To that end, we’ve put together a handy list of Chrome web developer extensions that we feel really pass the muster. Keep reading to find out what they are, or use the jump links below to go to any section.

And off we go…

Developers Paradise

Aside from using Chrome as part of your browser testing, it’s also helpful in terms of the tools/extensions that were specifically created with Chrome web developers in mind.

WordPress developers know how powerful the CMS is on its own, but you can make it even faster and more efficient directly from your Chrome browser with some sweet extensions.

Chrome makes easy work of this with one-click installs, and conversely (if you’re not happy with any), one-click uninstalls. You can also pin any you want to get to more quickly, easily identifiable as shortcut icons in the browser bar.

So let’s get started, and delve into the best Google Chrome extensions for web developers.

Blogging and Writing

WordPress Admin Bar Control

WP admin bar

If you’ve ever been bothered by the WordPress admin bar that appears when you try to view your site’s front end (sometimes it blocks important components of your site that you want to be able to view while you’re previewing posts), we feel you.

This extension does one simple thing, but it does it well. You can hide the admin bar when you click its icon next to your address bar. It’s a super speedy way to see what you’re missing without having to resort to logging out or opening an incognito window.

Don’t let the lack of recent updates scare you away. It does exactly what it’s supposed to, and as the saying goes… if it ain’t broke, don’t fix it.

WordPress Site Manager

WP site manager

This Chrome Extension will store your WordPress site information and allow quick and easy access to your site’s main pages. It also provides more functionality to the WordPress theme editor by turning it into a CodeMirror editor.

Once you enter your login information once, you can access your stored sites with the WordPress Site Manager extension. You can edit main pages, add sites to your network, make adjustments to your theme and other basic changes.

All the available changes are neatly organized on the page to make quick work of edits and amendments.

Grammarly

Grammarly

Grammarly is one extension we’re hooked on. Not only does it accurately help you identify spelling mistakes (with a red underline), it also points out grammatical ones (with a green underline).

The most helpful feature is how it conveniently displays correction suggestions when you hover over the word in question. Just click on the suggestion you want to use, and it automatically replaces the original text or punctuation.

It doesn’t just work for WordPress posts, either. It works anywhere you can input text so improving your copy, pages, products, and even your emails is a breeze.

There is a premium subscription available which extends outside of Chrome, if you would like access to advanced corrections and writing improvements.

Styling and Design

ColorZilla

ColorZilla

Have you ever gone to a site where you were instantly drawn to the shade palette? ColorZilla makes it really easy to find the hexadecimal code for any color on the site you’re currently visiting.

With over 5 million downloads and 1.3 million users, ColorZilla is one of the most popular Google Chrome extensions available. Despite no updates since 2016, it still works like a champ.

All you have to do is grab the eyedropper icon, hover over the color, then click on it to generate a color code.

ColorZilla features a multitude of color tools for just about any needs you may have, including: an eyedropper, color picker, palette viewer, and a gradient generator.

Fonts Ninja

Fonts Ninja

Fonts Ninja identifies fonts from any website, so you don’t pull your hair out thinking, WTF? (“What’s that font?” 😊)

They have a proprietary algorithm that analyzes font files to get more accurate results, and recent updates have dramatically improved the processing speed as well.

Rollover any text to get the font name and CSS properties. The main extension window will also display a summary of all fonts used on a website. You can also get more information about fonts, such as how many styles are available, their foundry, and price (if available for purchase).

You can even bookmark fonts, and manage them within the extension.

A premium version is available. It allows macOS/windows apps to install trial versions of fonts you discover on websites, which you can then use in any software.

QR Code Generator

QR Code Generator

QR Code Generator is super handy, and highly rated.

It converts your current page into a QR Code with one quick click. You can generate QR Codes from free text and URLs on the fly.

Key features include automatic Dark mode, ability to download the QR code as an image, ability to create custom QR code with logo, hotkey support, and more.

Because the devs turn the raw URL to a QR code and don’t include any third-party material in it, any QR codes you create are permanently active/never expire. (And more importantly, safe, because they do not track your data or traffic.)

QR code generator, generated
Playing around with QR Code Generator. Go ahead―scan it!

Nimbus

Nimbus capture

Nimbus Screenshot & Screen Video Recorder is a very helpful, highly versatile tool.

Use Nimbus Capture to take screenshots―full web pages, or any part of the screen. Record videos of your entire desktop or browser tabs, or create videos using your webcam. Use the full suite of editing tools to annotate, crop, add drawings, arrows, stickers, or highlight text.

This extension offers an incredible amount of options. Here are just a few:

  • Supports scroll & capture for screenshots
  • Record video of another active program, or a video screen from a webcam
  • Customize video screen resolution and frame rate
  • Trim & crop screenshots and videos
  • Share screenshots and get a sharable link to them
  • Send screenshots to Slack, or upload to Google Drive and Google Classroom
  • Save screenshot captures to a PDF

The free version feels premium, considering all you can do with it. However, they also offer a paid version (around the price of one fancy cup of coffee, per month) which adds even more functionality, such as adding your own watermark, and converting WebM to MP4 and GIF.

Page Ruler Redux

Page Ruler Redux

Page Ruler Redux is a core web developers extension and designer tool that allows you to get pixel perfect measurements of web elements for website front-end development, web design, or any task you may have that requires exacting pixel measurements.

This extension also allows you to resize the ruler, and adjust color for perfect contrast on dark and light websites.

WordPress Theme Detector and Plugin Detector

Word Theme & Plugin Detector

WordPress Theme Detector and Plugin Detector can detect installed WordPress Themes and WordPress Plugins on the website you are currently viewing.

This extension is extremely fast because it uses the developers own, server-side API, not your browser.

If you click on Theme Used on / show more from the extensions icon dropdown, you’ll see examples of other websites using the detected theme, including child themes (if there are any).

WP theme & plugin detector, 2
NASA’s blog uses WP’s popular Twenty Sixteen theme, along with many other sites.

WordPress Theme Detector and Plugin Detector extension pulls together a list of examples (shown above).

Another cool little feature: when using the extension, its icon turns blue if it detects a WordPress site, grey if it doesn’t.

Productivity and Organization

Asana

Asana

Asana users rejoice. You can now extend the usual functionality of Asana on any Chrome website, further boosting your productivity.

You can add tasks while perusing the web, and even enter the site you’re viewing as a task. That’s not all, either―you can assign team members, workspaces and descriptions. It’s the perfect tool to help keep you organized and focused on your tasks.

Evernote Web Clipper

Evernote

Here’s another reason for you to cheer, that is if you’re an avid Evernote user. With the Evernote Web Clipper extension, you can save entire web pages or simplified clips to your chosen notebooks.

You can also annotate your selection or take a full screenshot. It’s such a great way to keep track of your ideas and inspirations as they happen.

Toggl Track

Toggle Track

The Toggl Track extension puts a timer into any web tool, allowing quick, real time productivity tracking, with all the data stored on your Toggl account.

Whether you use Trello, Slack, Asana, Todoist, Jira, Notion, or one of the 100+ integrated tools, start tracking time without opening a new tab. Toggl Track timer can now also fill your Pomodoro needs through automated reminders.

One Tab

OneTab

We’ve all been there… you find yourself with too many open tabs, and the jumble becomes confusing, obscures text, and drains memory.

OneTab’s solution? Save up to 95% memory and reduce tab clutter. Simply click the extension icon to convert all of your tabs into a list. When you need to access the tabs again, you can either restore them individually, or all at once.

They also provide privacy assurance, stating the information about your tabs is never transmitted or disclosed to the OneTab developers.

HubSpot Sales

Hubspot Sales

With over 800K customers raving about this extension, Hubspot Sales is a widely popular―and quite useful―chrome extension.

Schedule emails, track opens & clicks, log messages from your CRM to Gmail, and share email templates with your team, using Hubspot’s Sales productivity tools. You can also book meetings, which will sync through your Google calendar. It even has mobile apps, for both iOS & Android.

You’ll need an account with Hubspot to use the extension, but it’s free to get one. There is also a paid version, which adds functionality for automated personal outreach, as well as increased limits on templates, meeting scheduling, email tracking, and more.

This particular set of tools comprises the company’s “Sales Hub”. It’s one in a larger suite of CRM platforms which Hubspot divides into categories (such as Marketing, Service, Operations, etc), each with its own integrations and associated fees.

For some great principles, practices, and tips on setting up & using Hubspot, check out these articles from our Member Forum: Why & How to Know If The Email You Sent is Opened, and Use Hubspot’s Email Extension to Increase Your Sales & Improve Processes.

Site Performance

SimilarWeb

Similar Web

Similarweb is the ultimate competitive digital intelligence tool for a complete 360-degree view of your industry, competitors, and customers.

Access traffic and key metrics for any website, including engagement rate, traffic ranking, keyword ranking, and traffic source.

The Similarweb extension provides you with the full breadth of similarweb.com directly from your browser toolbar. With a single click, you can get in-depth statistics for any website you visit.

It’s important to note that not all sites on the entirety of the internet are stored in SimilarWeb’s database, so you may not see your site’s stats if you’re just starting out, or don’t currently have many page views.

app.telemetry

App.telemetry

App.telemetry makes it easy to quickly test your site’s speed by clicking its icon in your browser, once installed. You can see exactly where you can improve your site’s speed with the categories listed for you along with the total load times.

Its Page Speed Monitor shows offset and duration of each step during the page load, based on W3C navigation timing. As soon as you access a page, you see the load time in the status bar, and detailed information is a click away.

Some of the categories you can see include redirects, cache, DNS lookup and on load events. While it doesn’t show detailed stats, it’s a great solution if you need a quick way to check the progress of your site while you’re in development.

Web Developer Checklist

Web Developer Checklist

One of the most helpful tools for developers, Toptal’s Web Developer Google Chrome extension, analyses and checks your webpage for any major violations of web design best practices.

It looks for SEO, usability, accessibility, and performance (page speed)—among others.

Open SEO Stats

Open SEO Stats

Open SEO Stats (formerly called PageRank Status), helps you get a snapshot of where you stand on the internet by displaying the page ranks for Alexa, Google, Compete, and Quantcast, when you click its button in your browser.

It also has the ability of showing WHOIS information, and the number of pages that are indexed in search engines (including Google, Bing, & Yahoo).

Additionally, it shows cache stats (Archive.org, Google), as well as getting information on backlinks, socials, Geo IP location, and more.

If you opt for a premium account, you can unlock several more helpful features.

Ubersuggest – SEO and Keyword Ideas

Ubersuggest

Ubersuggest offers a quick way to get an overview of the SEO of the sites you are browsing, and the keywords it ranks.

Once installed, go to Google, YouTube, or Amazon, and perform a search. That is where you will see data around the keywords and search terms. On any given keyword you searched for, click “view all” next to the search bar to get access to even more keywords and SEO insights.

Ubersuggest SEO extension also has graphs and trends, backlinks data, related keywords, “people also search for”, trending & long-tail keywords, and customization of your location and language.

Lighthouse

Lighthouse

While WMPU DEV’s SmartCrawl is more thorough in evaluating the performance of your website, you might want to know the average performance of some other third-party websites. This is where the Lighthouse developer extension comes in handy.

When auditing a page, Lighthouse runs a barrage of tests against it, and then generates a report on how well the page did. From here you can use the failing tests as indicators on what you can do to improve your app.

Simply install the plugin, click on its icon, and it automatically starts analyzing via Lighthouse.

Tag Assistant for Conversions Beta (by Google)

Tag Assistant for Conversions Beta

Tag Assistant for Conversions Beta helps validate your website implementation used to measure conversions for Google Ads.

Tag Assistant enables you to step through the entire user journey by simulating a click on an ad, arriving on your website, navigating the site, and ultimately converting.

The step by step guidance will highlight potential problems or misconfigurations, and ultimately let you know when the conversion is being recorded correctly.

WordPress Development

WordPress.org Plugins SVN Link

WP Plugins SVN Link

This isn’t your typical extension – a button doesn’t show up in the top of your browser. Instead, a button displays for pages in the WordPress plugins directory.

Underneath the usual download button, you’ll also see an SVN Repository button once this extension is installed. Once clicked, you’ll be able to check out the plugin’s code first-hand.

You’ll be able to take a look under the hood and view the code’s quality before deciding to download the plugin. You’ll be able to have the opportunity to catch bloated or malicious code before installing the plugin, helping you to avoid disaster before it strikes.

MySQL Admin

My SQL Admin

This Google Chrome developer extension makes it easier for you to manage your MySQL database. It provides you with the administration GUI of the MySQL server, similar to phpMyAdmin, Sequel Pro.

MySQL Admin features include:

  • Connecting to MySQL server (4.1 or later), connecting to MySQL server with SSL, connecting to MySQL server via SSH2 Port forwarding
  • Displaying the statistics and process list of connected server (refresh automatically), table list, and rows of selected table
  • Creating and dropping tables, inserting and updating rows
  • Exporting databases

Link Redirect Trace

Link Redirect Trace

Link Redirect Trace was built to replace all other “partial solution” extensions, and is the all-in-one redirect path analyzer that gives you the full picture on every redirect―HTTP Headers, Rel-Canonicals, robots.txt, link power, trust and risk analyzed.

Perform advanced, comprehensive, and―most important―correct analysis of links, redirects, and REL-canonicals. Use this extension for your SEO analysis, On page SEO, Off page SEO, competitor analysis and more.

Before installing another Chrome extension, note that this functionality may already be included as part of an SEO tool or WordPress plugin you already use.

CSS Peeper

CSS Peeper

Inspect styles in a simple, well-organized, & beautiful way with CSS Peeper.

CSS Peeper is a Chrome CSS extension viewer tailored for designers, that allows you to focus on design instead of digging in code.

Need to know the line-height, font, or button size on a website? Check the hidden CSS style of objects, colors and assets on the web easily using this extension.

Web Developer

Web Developer

With almost a million users and a 4.5-star rating, it’s safe to say that Web Developer is one of Google Chrome’s best extensions for web developers.

Developed by Chris Pedrick, this extension adds a little toolbar with various web developer tools pertaining to images, information, resizing, forms, and much more.

Clockwork

Clockwork

Clockwork provides a set of development tools for PHP developers. It provides a new panel with all required information for debugging and profiling PHP scripts, including request data, application log, database queries, routes, and the visualization of application runtime.

Clockwork uses a server-side component that gathers all relevant data and easily integrates with any PHP project. It includes support for Laravel, Slim 2, and CodeIgniter 2.1 based applications.

XDebug Helper

XDebug Helper

This Google Chrome extension helps with debugging, profiling, and tracing PHP code instead of struggling with POST/GET variables or cookies.

XDebug Helper is very useful for PHP developers that are using PHP tools with Xdebug support (like PHPStorm, Eclipse with PDT, Netbeans and MacGDBp), or any other Xdebug compatible profiling tool (like KCacheGrind, WinCacheGrind, or Webgrind).

Important: you need to be in Developer mode (on chrome: // extensions/ page) for this to work.

Don’t be worried by the last update indicated (2016). WP reviews as recent as July 2021 were 5-star ravings, and we concur―it’s still great.

Wappalyzer

Wappalyzer

A tool developed by Elbert Alias in 2009, Wappalyzer is a Google Chrome extension that allows developers to identify the various technologies that make up the back end of a website.

Wappalyzer is an open-source and cross-platform utility that is able to detect over 1000 technologies, including content management systems, ecommerce platforms, web frameworks, server software, analytics tools and more.

Window Resizer

Window Resizer

Thanks to Google’s mobile-first index initiative, it’s more important now than ever for developers to test websites for responsive design—this is where Window Resizer comes in.

This Google Chrome extension resizes the browser window so that you can test your responsive design based on various resolutions. The most common screen sizes are available (for laptop, desktop, and mobile), but you can also enter in your own customized window sizes.

Tab Resize

Tab Resize

You only have two eyes, which will inevitably be looking at the same place. Even so, it can often be very useful to split the screen between several windows, either to copy the content or even to follow a tutorial. With this extension, you can split the screen between four windows, or between two, vertically and horizontally.

It also has the options of “empty tab”, which automatically creates other empty tabs, or “single tab”, which changes only the current tab. Resize the CURRENT tab and tabs to the RIGHT into layouts on separate windows.

With multi-monitor support, Tab Resize makes split screen easy.

Thus ends our recommended list of best chrome extensions for developers.

There’s No Place Like Chr(H)ome

Considering the wide usage and popularity of Google’s Chrome browser, coupled with its ease of use, speed, reliability, and vast selection of tools in the form of extensions and themes, it’s a well-informed choice to make it your browser for development.

Chrome has been busy proliferating a vast array of the best chrome extensions for web developers for more than a decade―from the most elemental and general design & development tools, to those geared to programming languages (such as HTML, PHP, CSS, etc.).

The sky’s the limit here… build your collection to fit your personal workflow. It bears mentioning that some of these extensions require you to enter personal information, such as your site’s login. While we’ve had no problems using free versions of these extensions, always exercise due caution before providing personal credentials.

If you’re looking for more good reads on this subject, check out these additional articles: Using Heat Maps to See Exactly Where Visitors Are Clicking On Your WordPress Site, 12 Not-So-Obvious WordPress Tweaks to Improve Posts and Pages, Improve the WordPress Visual Editor With These Cool Hacks, and Leveraging Chrome Developer Tools for WordPress Development.

With a hunger for continued learning and a killer tool kit at your disposal, honing your developer skills is potentially limitless. As WPMU DEV member, Lucas Ondata Marketing, put it: you’ll have an enviable “utility belt for heroes working with websites”.

Quotation marks

Are there any standards for single/double quotation marks in all the different programming languages? What matters to me right now is Python. Should I use 'single quotation marks' or "double quotation marks" for the strings?

Thank you

Python Temperature converter using for loops

Using for loop create a program that converts temperature either from Celsius to Fahrenheit or vice versa.

Ask the user what will be the input of the user either in Celsius or Fahrenheit. If the input is invalid, print invalid and ask to try again.

Ask the user to input the start, range, and interval separated by an asterisk. For example 0*10*2. This means that the start of the conversion will be from 0 to 10 with an interval of 2, thus the value to be converted will be 0, 3, 6, 9

If the start<end, then the interval should be 0<interval otherwise, your program will display an error and ask to try again for #2. Or

If the start>end, then the interval should be 0>interval otherwise, your program will display an error and ask to try again for #2.

If the user inputs only one value, like 10. This means that the start is equal to 1 which will be the default value for start, up to 10, and the interval is 2 which will be the default value of the interval if start<end.

If the user input has two values like 10*2, this means that the start is equal to 10 up to 2. The interval is set to the default value which is equal to -2 since start>end.

How to Start an Etsy Business

Etsy is the marketplace for selling handmade items and craft wares. If you’re looking for a side hustle or a jump-off point for your future brand, Etsy is ideal.

The platform grows year on year, which is fantastic in terms of reaching customers. But it also means that there are over 4.3 million active sellers on Etsy, an increase of 2.7 million from the previous year. So, clearly, there’s a lot of competition that will likely get even fiercer in the years to come. 

Don’t be frightened away! In this guide, we’ll teach you how to research and plan for success, set up an Etsy shop the right way, and promote your products effectively to increase sales.

The Easy Parts of Starting an Etsy Business

Starting an Etsy business is easier than building an ecommerce store from scratch. With Etsy, you have a ready-built platform on which to list your items and a built-in audience. It’s also simple to get started and affordable. You can sign up for free, and it’s just $0.20 to list an item on Etsy. 

After that, you should note that Etsy takes 5% of the displayed price plus a payment processing fee of 3% + $0.25 per sale.

The other thing about Etsy is that you have a ready-made audience that you can tap into. Consider the fact that if you created an ecommerce website from scratch, you’d have to put in the time and money to build traffic.

Etsy also has a particular target market that you can easily reach through social media. The typical buyer on Etsy is aged 18-35 and identifies as female. Etsy also carries some aspects of culture in that it started as and largely remains a crafting community.

This gives you so much to work with to identify viable products, understand the target audience, and sell to them.

The Difficult Parts of Starting an Etsy Business

Everything has its downsides. Etsy’s limitations may mean you’d prefer to use it to set up a side hustle or a starting point from which to grow a brand.

Given the generally low price point of items on Etsy, you’d need to make a ton of sales to come out with a sufficient annual income. This also means that your Etsy venture could be labor-intensive. 

Unless you’re a vintage seller, you’ll need to put in a lot of blood, sweat, and tears to craft all of your items. In some cases, you’ll be able to create items in bulk. But that means you’ll need to invest in equipment. And it doesn’t work in other cases, say if you create bespoke, handmade jewelry.

You’ll also need to manage the business side yourself. This includes tasks such as tracking products and sales, managing finances, and promotion.

There are, however, automation tools that will help you speed up such processes. Buffer, for example, is a social media management tool you can use to plan, schedule, and post content.

Buffer has a forever-free plan with which you can manage up to three social media channels. Or you can get access to the full suite of publishing, analytics, and engagement tools for $5 per channel per month.

Step 1: Get Ready to Start an Etsy Business

If you want to create a successful Etsy business, you can’t go in with a haphazard approach. Proper research and planning lay the foundations for success. So, here’s what you need to do before you dive in:

Come Up with a Product Idea

Etsy products fall into three main categories: handmade items, craft supplies, and vintage goods. The platform is bursting with creativity and uniqueness. So, when it comes to generating ideas for your Etsy shop, you can use your imagination and get creative. 

Consider your hobbies and interests to come up with a great product idea. Perhaps you want to share your passion for collecting vintage buttons, craft one-of-a-kind ornaments, or sell custom stationery for others to use in their unique creations.

Research Your Idea

Given that most items on Etsy are custom or unique, it’s difficult to say for sure if your product(s) will be a great success. However, there are some things you can do to gauge if there are willing customers for your product.

Find five to ten Etsy shops that sell items similar to your idea. You’ll be able to see how many items each shop has sold. For example, here you can see that this handmade soap seller has made over 8,400 sales:

Find their earliest review to work out how long it took to make this many sales:

This seller has been operating since 2015. When you crunch the numbers, you can see that they sell over 100 items per month.

This, of course, doesn’t indicate that you’ll sell over 100 items per month because there are lots of variables. But it does prove that there’s demand for this type of item on Etsy.

Create a Prototype

The biggest part of whether you’ll be successful or not comes down to the product. Great products equal great reviews and, therefore, more sales.

So it’s a good idea to create a prototype of your product and gather feedback. If it’s not a handmade item, you can work with a typical product that you’ll sell, e.g., a set of vintage buttons. 

One way to gather feedback is via relevant communities on forums and social media platforms. Be sure to take all types of feedback on board. If certain requests or criticisms come up over and again, tweak your product or strategy accordingly.

Price Your Product

Even if you’re having a ton of fun doing the whole Etsy thing, the end goal is to create a profitable business. If you don’t weigh the costs correctly, you may underprice your items.

That being said, new sellers must price their items competitively to make those first sales and start building a good reputation for their Etsy shop. So you have to find the right balance.

Here are the costs you need to consider when pricing an item:

  • Materials
  • Equipment
  • Packaging
  • Shipping
  • Etsy fees
  • Your time and expertise

As you add up how much it really costs to make and sell each item, calculate how much you need to sell it for to make a profit. You don’t want to break even or only make a few cents per order, as that will not be sustainable.

Look at competitors on Etsy to see their pricing and consider ways you can either speed up the process of making your items or cut costs (but not quality). You want to be competitive in your pricing–not significantly higher or lower than similar sellers.

Consider Branding

You should build a memorable and professional-looking brand from the get-go. This will help you acquire and retain customers.

One of the first steps is to come up with a name for your Etsy shop. You have 20 characters to work with. 

The name should appeal to potential customers and reflect your products and brand. For instance, if being eco-friendly is at the core of what you do, you may wish to express that with your shop name.

You also want to consider how the name will look on packaging, thank you notes, stickers, and any other item you plan to print your logo on. And check to see if associated social media handles are available. You may want to have a dedicated website in the future, so consider how it looks as a domain name and if one is available with your desired name.

Most importantly, check to make sure that no other sellers on Etsy already have that name.

You can create a logo and other design assets for your brand when you have your name using a  free tool like Canva

Step 2: Set Up an Etsy Shop

Opening an Etsy shop isn’t difficult per se, but there are a lot of boxes to tick. Add all pertinent information, and you’re more likely to start making sales off the bat. So here’s your step-by-step guide to setting up an Etsy shop: 

Create an Account

If you don’t already have an account, you’ll need to register with Etsy. Then, click on your profile icon and select Sell on Etsy to get started.

You’ll then be asked to set a few preferences, including the shop language, country, and currency. Next, you must enter your shop name and check its availability. If another seller already has the name, you’ll need to tweak yours or go back to the drawing board.

Add Items

The next step is to list your items. Click Add a listing, and you’ll be taken to a page where you enter a bunch of details about the product. These include:

  • Photos: Add at least five clear, attractive, high-res images that showcase your product from different angles.
  • Listing title: You have up to 140 characters to describe the product. You should make the title SEO-friendly.
  • Product type: Is it handmade? Is it a finished product? How old is the item?
  • Category: Select the category you want your product to appear in when users browse the site.
  • Item description: Add as much detail as possible, not only about the item but the purchase process, e.g., when and how it will be delivered.
  • Tags: Use all of the 13 tags available to make it easy for customers to find your product. Think carefully about the keywords customers will search for in the category.
  • Variations and personalization: Add variations for different colors and sizes, if appropriate. Also, switch on the personalization function if you need to collect customer info to personalize the product, such as names, engravings, etc.
  • Price and delivery options: Etsy can calculate shipping costs for you if you enter the size and weight of the package.

Set Up Payment Preferences and Billing

To receive payments for your sales, you must enroll in Etsy Payments with integrated PayPal. This allows customers to choose from a variety of payment options when they check out. 

You don’t need to have an account with each payment provider, such as Apple Pay. You just need to enter your bank details and address to receive deposits from Etsy.

You’ll also need to add your debit or credit card details to pay the selling fees. US sellers can set up auto-billing, which means Etsy automatically charges fees to your card, and you don’t have to manually take care of your monthly statement.

Open Your Shop

Once you complete the setup, you simply need to click Open Your Shop to go live. The final step is to customize your storefront.

Add your logo as the account photo to make your shop look professional. You also have the opportunity to create a short bio that describes your shop. Here’s an example:

Next, add your shop’s policies on manufacturing, shipping, payments, and returns and exchanges. Include estimated shipping times and accepted payment methods.

In the policies section, try to add as much information as possible along with helpful instructions. Again, you want to make it easy for visitors to buy from you.

At this point, you also have the opportunity to reorder listings and group items if you sell multiple products. Doing this may help shop visitors find what they’re looking for quickly and easily, which, of course, helps with sales.

Step 3: Grow Your Sales

The “if you build it, they will come” policy doesn’t make for a successful business. Unless you’re extremely lucky, you’ll need to put the effort in to grow your Etsy shop. Here are some useful strategies you can implement to increase sales:

Promote Your Wares

Get the word out to attract more potential customers to your store. 

Given that Etsy centers on crafts and handmade items, Pinterest is the perfect platform for promotions. This is where you’ll find your audience as the communities overlap.

Create a business account on Pinterest with a link to your Etsy store. Create boards that contain not only the items you’re selling but also other relevant content. Users want to follow authentic, interesting accounts, not brands just trying to make a buck.

Etsy integrates well with social media. You can share updates, listings, reviews, and so on from directly within the platform. Or, if you want to take your social media marketing up a level, you can use a scheduling and publishing tool, such as Buffer.

Buffer lets you schedule social media posts in advance and gives you analytics to see what is working. It also identifies the most important comments and engagements and prioritizes them so you can respond to those faster. You can see your social media content calendar in Buffer to view all scheduled posts for multiple channels, including Instagram, Facebook, Pinterest, Twitter, and LinkedIn.

Using a social media tool like Buffer lets you create social media campaigns and stay in front of your audience while you focus on creating your products.

Monitor Your Shop

Track essential metrics to figure out what you’re doing right and where there’s room for improvement. Use the information you gather to make adjustments that increase sales.

For instance, if you notice that a particular item receives many views but few sales, there’s something preventing visitors from making a purchase. 

Test one solution at a time. For example, you might alter the product description. If you don’t see a change after the test period, you can try another solution, such as adding more photographs, and so on. By making only one change at a time, you’ll identify exactly what is and isn’t working in your shop.

Does anyone else out there have a Figo SpeakOut cell phone?

I've had one for a couple of years. I like it because I only have to spend $25 a year to keep the phone minutes topped up (sometimes more if I use more minutes). It does what I want, which is make and receive calls while I am away from the house.

For most everything else it's a struggle, primarily because there is so little documentation available. The user instructions are pretty much "you'll figure it out".

Example - it (Ultra M50G) comes with 8 GB of memory, and I added another 32 (ish) which I configured as internal storage and set as the default storage location. In spite of this, apps get installed in the main, 8 GB, block, and when that gets close to full I can't install anything else. Pre-installed apps cannot be moved to the SD card.

I have a fitness tracker which required an app called "H Band". My wife has a different type that requires "VeryFit Pro". I can't have them both installed at the same time. I have to remove something else first. Having done this I was still unable to pair the tracker to the phone. The Bluetooth was able to see, and pair, with her tracker, but the app was unable to see it until after several reboots. Then, when I selected the device (with a name that in no way indicates it is the fitness tracker), the pairing timed out and took me back to "add a device".

Again, there is no documentation available either for Android 6, the fitness device itself, or the app on what to do when things don't work.

Incidentally, you can't even set the time without pairing to a cell phone.

Any suggestions would be appreciated. My blood pressure is going through the roof. Good thing I have a fitness tracker.

Jamstack Developers’ Favorite Frameworks of 2021

Which new framework should I learn this year? Is it time to ditch my CMS? What tools should I pick up if I want to scale my site to an audience of millions? The 2021 Jamstack Community Survey is here with answers to those questions and more. 

For the past two years, Netlify has conducted the Jamstack Community Survey to better understand our growing group of developers—the insights inform our services, and they also help developers learn from one another. Our survey data provides a sense of best practices as well as an idea of what else is happening in the community.

What we’re seeing this year: it’s never been a better time to be a developer in the Jamstack community! Jamstack has gone mainstream and the ecosystem is thriving. Jamstack is becoming the default choice for web developers at all stages of their careers across different geographies and touching all industries, and the community is only getting bigger. We also saw a huge rise in the percentage of students in our community over the last year, a great sign for a growing ecosystem.

In 2021, Netlify received more than 7,000 responses to the Jamstack Community Survey. This is more than double the number of responses we received in 2020, confirming the growth of the Jamstack community. 

Here are a few of the highlights from our more technical findings…

Jamstack developers work differently at scale.

32% of Jamstack developers are building sites for audiences of millions of users, but the tools they use and their development priorities are different: for instance, they are more likely to specialize in front-end or back-end work, and they are more likely to consider mobile devices a key target.

JavaScript dominates programming languages for the web—but TypeScript is giving it a run for its money.

For 55% of developers, JavaScript is their primary language. But TypeScript is coming from behind with a growing share.

A plot chart with colored dots representing different languages. Y axis is satisfaction, x-axis is usage. JavaScript is the most used and halfway up the satisfaction axis. Typescript is at the top of satisfaction, and halfway through the usage axis.

Figma is almost the only design tool that matters.

When it comes to design tools, more than 60% of survey respondents use Figma and are happier with it than the users of any other design tool we asked about.

A plot chart with colored dots representing different design apps. Y axis is satisfaction, x-axis is usage. Figma is at the upper-right corner of the chart while everything else is clustered toward the bottom left.

React still reigns supreme for frameworks.

React continues to dominate the major frameworks category in usage and satisfaction, and Next.js continues to grow alongside it. But we also saw growth and higher satisfaction from a challenger framework, Vue.

A plot chart with colored dots representing different frameworks. Y axis is satisfaction, x-axis is usage.React is at the far right, but halfway up the satisfaction axis. Express is at the top of the satisfaction axis but between 10-20% usage.

WordPress leads in CMS usage.

WordPress remains the clear leader as a content management system, but it’s not well-liked as a standalone solution. When used in a headless configuration, users reported much higher satisfaction. This was a breakout year for other headless CMSs like Sanity and Strapi.

A plot chart with colored dots representing different content management systems. Y axis is satisfaction, x-axis is usage. WordPress is all the way at the bottom right corner of the chart, showing high usage but low satisfaction. Sanity has the highest satisfaction, but is between 10-15% usage.

And that’s just a taste of what we learned. To view the complete findings of the 2021 Jamstack Community Survey, visit our survey website


The post Jamstack Developers’ Favorite Frameworks of 2021 appeared first on CSS-Tricks. You can support CSS-Tricks by being an MVP Supporter.

WooCommerce + Google Analytics

Google Analytics is powerful analytics software. A common way to use it is to just slap the JavaScript snippet on every page template you have and let it collect basic data about unique visitors and pageviews and such. That’s useful, but it’s also the bare minimum. Say there is an important button on your site. Leveling up, you could send custom events to track users clicking on that button. Those are the analytics that matter the most.

Further down that road is tracking eCommerce analytics. This is extra-tricky, as it requires you sending events to Google Analytics for sales, instances of adding/removing things from cart, views on products… all sorts of stuff. If you don’t do all that (and do it right), you don’t get good analytics information.

Yet another reason I like WooCommerce! Instead of this analytics integration being a monumental effort and a substantial bit of technical debt to maintain, you just install the WooCommerce Google Analytics plugin and… that’s it. Also: it’s free.

I’ve had this integrated for months right here on CSS-Tricks, and I can confirm:

  1. It was close to zero effort.
  2. It just works.
The plugin installed and activated!
The one bit of config is adding this ID, which is easy to find in Google Analytics, your own code, or another Google Analytics plugin.

Now, to be clear, WooCommerce has its own analytics built right in. If what you are interested in is sales reports and top sellers and stuff like that, those are the dashboards I’d be looking at. But there are some things that the built-in WooCommerce analytics just don’t do. For example, I can check out the sales funnel on Google Analytics now:

30 days of traffic starting from all unique visitors to sessions where they actually bought something.

CSS-Tricks isn’t exactly an eCommerce-focused website, so the funnel there starts super wide and gets super (super) tiny — but hey, at least I can confirm that and see it with my own eyes. Plus, I can glean some insights here, like the fact that 66/70 people completed checkout once they got there (pretty good), but only 70/525 even proceeded to checkout after adding to cart, so I’m losing a lot of people at that stage.

Here is some more interesting data that only Google Analytics knows:

Of 66 sales, 56 of them came from returning visitors, not new visitors. So people tend to not buy on first look, but do come back later. I’m not sure if that means I should be making things more enticing for those new visitors or if I should lean into reminding people about it after they’ve looked at it. Either way, now I know because I have the data.

There is data in the WooCommerce analytics that I’d normally have to go to Google Analytics to see. I can see individual orders. I can see what the top sellers are and compare product sales over different time periods. All useful stuff, and you might appreciate having all this in one place.

Again, my favorite part about this is having all this data. It feels like it should have been hard-won to get, but all it took was clicking a few buttons. That’s why I never regret just doing things the standard WordPress and WooCommerce way! Things tend to just work!


The post WooCommerce + Google Analytics appeared first on CSS-Tricks. You can support CSS-Tricks by being an MVP Supporter.

countrylayer – The Must-Have API for Any Website

If you have ever worked on a project that deals with geographic information of any type – which, let’s face it, most websites and applications do these days – then you have likely had to come up with a solution for providing or accessing information about one if not more countries. Whether it’s population, location, currencies, languages, or any other information about a country you need, it can be challenging to find a way to dynamically bring those details into your project.

There are tools available to help you solve this problem, but all too often there are obstacles such as programming language, ease of use, complexity of integration, pricing, and other hurdles that you may encounter.

Until now.

countrylayer is a JSON API that is compatible with all programming languages, provides extensive and accurate data from almost 200 different countries, is simple and easy to integrate, and is affordable to use – starting at free!

In this article, we’re taking a look at what countrylayer has to offer and how you can start using it in your projects.

What Is countrylayer?

countrylayer is a service brought to you by apilayer that provides common information about countries via a REST API. With this API, users will be able to get detailed information about countries in the world. Because they can filter by name of a country, language, code, currency, the capital city, calling code, region, or regional bloc.

Using your project’s API key, you can access country data that is returned in a standard JSON format, which can then be easily parsed in any programming language.

Here is an example of an API response. Check out all of the information it provides:

[
  {
        "name": "Germany",
        "topLevelDomain": [
            ".de"
        ],
        "alpha2Code": "DE",
        "alpha3Code": "DEU",
        "callingCodes": [
            "49"
        ],
        "capital": "Berlin",
        "altSpellings": [
            "DE",
            "Federal Republic of Germany",
            "Bundesrepublik Deutschland"
        ],
        "region": "Europe",
        "subregion": "Western Europe",
        "population": 81770900,
        "latlng": [
             51,
             9
        ],
         "demonym": "German",
         "area": 357114,
         "gini":  28.3,
         "timezones": [
             "UTC+01:00"
        ],
        "borders": [
            "AUT",
            "BEL",
            "CZE",
            "DNK",
            "FRA",
            "LUX",
            "NLD",
            "POL",
            "CHE"
        ],
        "nativeName": "Deutschland",
        "numericCode": "276",
        "currencies": [
            {
                "code": "EUR",
                "name": "Euro",
                "symbol": "€"
            }
        ],
        "languages": [
            {
                "iso639_1": "de",
                "iso639_2": "deu",
                "name": "German",
                "nativeName": "Deutsch"
            }
        ],
        "translations": {
            "br": "Alemanha",
            "de": "Deutschland",
            "es": "Alemania",
            "fa": "آلمان",
            "fr": "Allemagne",
            "hr": "Njemačka",
            "it": "Germania",
            "ja": "ドイツ",
            "nl": "Duitsland",
            "pt": "Alemanha"
        },
        "flag": "https://restcountries.eu/data/deu.svg",
        "regionalBlocs": [
            {
                "acronym": "EU",
                "name": "European Union"
            }
        ],
        "cioc": "GER"
    },
    {…}
]

Available API Endpoints

The countrylayer API comes with a number of endpoints, each providing different functionality. You can customize the request output data to get only the fields you need. This causes the request to execute faster, and reduces the response size.

  • Endpoint for all countries
    GET https://api.countrylayer.com/v2/all
        ? access_key = API_KEY
    
  • Endpoint for country search by name
    GET https://api.countrylayer.com/v2/name/{name}
        ? access_key = API_KEY & FullText=
    
  • Endpoint for country search by capital
    GET https://api.countrylayer.com/v2/capital/{capital}
        ? access_key = API_KEY
    
  • Endpoint for country search by language
    GET https://api.countrylayer.com/v2/language/{language}
        ? access_key = API_KEY
    
  • Endpoint for country search by currency
    GET https://api.countrylayer.com/v2/currency/{currency}
        ? access_key = API_KEY
    
  • Endpoint for country search by region
    GET https://api.countrylayer.com/v2/region/{region}
        ? access_key = API_KEY
    
  • Endpoint for country search by region block
    GET https://api.countrylayer.com/v2/regionalbloc/{regionalbloc}
        ? access_key = API_KEY
    
  • Endpoint for country search by calling code
    GET https://api.countrylayer.com/v2/callingcode/{callingcode}
        ? access_key = API_KEY
    
  • Endpoint for country search by alpha code
    GET https://api.countrylayer.com/v2/alpha/{code}
        ? access_key = API_KEY
    

As you can see, these endpoints can be very useful for you to be able to access and utilize the country information needed for your project in a variety of manners, and helps to streamline and speed up your requests for the fastest execution possible.

You can learn more about how to integrate the countrylayer API into your projects by reading their extensive (yet surprisingly succinct and simple) documentation.

How Much Does Using The countrylayer API Cost?

You can get started for free with 100 searches per month and a rate limit of 1 per second. From there, pricing goes up from $9.99 per month for up to 5,000 searches, all the way to $149.99 per month for 250,000 searches. Enterprise pricing is also available on request. It’s important to note that SSL encryption is only available with paid subscription plans.

How Will You Use The countrylayer API In Your Projects?

As you can see, countrylayer is a relatively simple yet robust solution that can be used in a multitude of ways in your current and future projects. It is easy to integrate, provides accurate and extensive data, and is very affordable. We encourage you to give it a try – especially since you can get started for free! When you do, be sure to let us know what you think by reaching out on any of our social channels.

Useful React APIs For Building Flexible Components With TypeScript

Have you ever used React.createElement directly? What about React.cloneElement? React is more than just transforming your JSX into HTML. Much more, and to help you level up your knowledge of lesser-known (but very useful) APIs the React library ships with. We’re going to go over a few of them and some of their use cases that can drastically enhance your components' integration and usefulness.

In this article, we’ll go over a few useful React APIs that are not as commonly known but extremely useful for web developers. Readers should be experienced with React and JSX syntax, Typescript knowledge is helpful but not necessary. Readers will walk away with everything they need to know in order to greatly enhance React components when using them in React applications.

React.cloneElement

Most developers may never have heard of cloneElement or ever used it. It was relatively recently introduced to replace the now deprecated cloneWithProps function. cloneElement clones an element, it also lets you merge new props with the existing element, modifying them or overriding them as you see fit. This opens up extremely powerful options for building world-class APIs for functional components. Take a look at the signature.

function cloneElement( element, props?, ...children)

Here’s the condensed Typescript version:

function cloneElement( 
   element: ReactElement, 
   props?: HTMLAttributes, 
   ...children: ReactNode[]): ReactElement

You can take an element, modify it, even override its children, and then return it as a new element. Take a look at the following example. Let’s say we want to create a TabBar component of links. That might look something like this.

export interface ITabbarProps {
  links: {title: string, url: string}[]
}

export default function Tabbar(props: ITabbarProps) {
 return (
   <>
     {props.links.map((e, i) =>
       <a key={i} href={e.url}>{e.title}</a>
     )}
   </>
 )
}

The TabBar is a list of links, but we need a way to define two pieces of data, the title of the link, and the URL. So we’ll want a data structure passed in with this information. So our developer would make our component like so.

function App() {
 return (
   <Tabbar links={[
     {title: 'First', url: '/first'},
     {title: 'Second', url: '/second'}]
   } />
 )
}

This is great, but what if the user wants to render button elements instead of a elements? Well, we could add another property that tells the component what type of element to render.

But you can see how this will quickly get unwieldy, we would need to support more and more properties to handle various use cases and edge cases for maximum flexibility.

Here’s a better way, using React.cloneElement.

We’ll start by changing our interface to reference the ReactNode type. This is a generic type that encompasses anything React can render, typically JSX Elements but also can be strings and even null. This is useful for designating you to want to accept React components or JSX as arguments inline.

export interface ITabbarProps {
 links: ReactNode[]
}

Now we’re asking the user to give us some React Elements, and we’ll render them how we want.

function Tabbar(props: ITabbarProps) {
 return (
   <>
     {props.links.map((e, i) =>
       e // simply return the element itself
     )}
   </>
 )
}

This is perfectly valid and would render our elements. But we’re forgetting a couple of things. For one, key! We want to add keys so React can render our lists efficiently. We also want to alter our elements to make necessary transformations so they fit into our styling, such as className, and so on.

We can do these with React.cloneElement, and another function React.isValidElement for checking the argument conforms to what we’re expecting!

React.isValidElement

This function returns true if an element is a valid React Element and React can render it. Here’s an example of modifying the elements from the previous example.

function Tabbar(props: ITabbarProps) {
 return (
   <>
     {props.links.map((e, i) =>
       isValidElement(e) && cloneElement(e, {key: `${i}`, className: 'bold'})
     )}
   </>
 )
}

Here we’re adding a key prop to each element we’re passing in and making every link bold at the same time! We can now accept arbitrary React Elements as props like so:

function App() {
 return (
   <Tabbar links={[
     <a href='/first'>First</a>,
     <button type='button'>Second</button>
   ]} />
 )
}

We can override any of the props set on an element, and easily accept various kinds of elements making our component much more flexible and easy to use.

The advantage here is if we wanted to set a custom onClick handler to our button, we could do so. Accepting React elements themselves as arguments is a powerful way to give flexibility to your component design.

useState Setter Function

Use Hooks! The useState hook is extremely useful and a fantastic API for quickly building state into your components like so:

const [myValue, setMyValue] = useState()

Due to the JavaScript runtime, it can have some hiccups. Remember closures?

In certain situations, a variable might not be the correct value because of the context it is in, such as in for-loops commonly or asynchronous events. This is because of lexical scoping. When a new function is created the lexical scope is preserved. Because there is no new function, the lexical scope of newVal is not preserved, and so the value is actually dereferenced by the time it is used.

setTimeout(() => {
 setMyValue(newVal) // this will not work
}, 1000)

What you’ll need to do is utilize the setter as a function. By creating a new function the variables reference is preserved in lexical scope and the currentVal is passed in by the React useState Hook itself.

setTimeout(() => {
 setMyValue((currentVal) => {
   return newVal
 })
}, 1000)

This will ensure that your value is updated correctly because the setter function is called in the correct context. What React does here is call your function in the correct context for a React state update to occur. This can also be used in other situations where it’s helpful to act on the current value, React calls your function with the first argument as the current value.

Note: For additional reading on the topic of async and closures, I recommend reading “useState Lazy Initialization And Function Updates” by Kent C. Dodds.

JSX Inline Functions

Here’s a Codepen demo of a JSX inline function:

See the Pen Hello World in React by Gaurav Khanna.

Not exactly a React API per-say.

JSX does support inline functions and it can be really useful for declaring simple logic with variables inline, as long as it returns a JSX Element.

Here’s an example:

function App() {
  return (
    <>
     {(() => {
       const darkMode = isDarkMode()
       if (darkMode) {
         return (
           <div className='dark-mode'></div>
         )
       } else {
         return (
           <div className='light-mode'></div>
         ) // we can declare JSX anywhere!
       }

     })()} // don't forget to call the function!
    </>
  )
}

Here we’re declaring code inside of JSX, we can run arbitrary code and all we have to do is return a JSX function to be rendered.

We can make it conditional, or simply perform some logic. Take note of the parentheses surrounding the inline function. Also particularly here where we are calling this function, we could even pass an argument into this function from the surrounding context if we wanted to!

})()}

This can be useful in situations where you want to act on a collection data structure in a more complex way than a standard .map allows for inside of a JSX element.

function App() {
  return (
    <>
      {(() => {
        let str = ''
        for (let i = 0; i < 10; i++) {
          str += i
        }
        return (<p>{str}</p>) 
      })()}
    </>
  )
}

Here we can run some code to loop through a set of numbers and then display them inline. If you use a static site generator such as Gatsby, this step would be pre-computed as well.

component extends type

Immensely useful for creating autocomplete-friendly components, this feature allows you to create components that extend existing HTMLElements or other components. Mostly useful for correctly typing an elements interface in Typescript but the actual application is the same for JavaScript.

Here’s a simple example, let’s say we want to override one or two properties of a button element, but still give developers the option to add other properties to the button. Such as setting type='button' or type='submit'. We obviously don’t want to recreate the entire button element, we just want to extend its existing properties, and maybe add one more prop.

import React, { ButtonHTMLAttributes } from 'react'

First we import React and the ButtonHTMLAttributes class, a type that encompasses the props of a HTMLButtonElement. You can read the source code for this type of interface here:

And you can see the React team has reimplemented all of the web’s APIs in TypeScript so can be type-checked.

Next, we declare our interface like so, adding our status property.

interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
 status?: 'primary' | 'info' | 'danger'
}

And finally, we do a couple of things. We use ES6 destructuring to pull out the props that we care about (status, and children), and declare any other properties as rest. And in our JSX output, we return a button element, with ES6 structuring to add any additional properties to this element.

function Button(props: ButtonProps) {
 const { status, children, ...rest } = props // rest has any other props
 return (
   <button
     className={`${status}`}
     {...rest} // we pass the rest of the props back into the element
   >
     {children}
   </button>
 )
}

So now a developer can add a type prop or any other prop that a button would typically have. We’ve given an additional prop that we’ve utilized in the className to set the style of the button.

Here’s the entire example:

import React, { ButtonHTMLAttributes } from 'react'

export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
 status?: 'primary' | 'info' | 'danger'
}

export default function Button(props: ButtonProps) {
 const { status, children, ...rest } = props
 return (
   <button
     className={`${status}`}
     {...rest}
   >
     {children}
   </button>
 )
}

This makes for a great way of creating reusable internal components that conform to your style guidelines without rebuilding entire HTML elements! You can simply override entire props such as setting the className based on the status or allow for additional class names to be passed in as well.

import React, { ButtonHTMLAttributes } from 'react'

export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
 status?: 'primary' | 'info' | 'danger'
}

export default function Button(props: ButtonProps) {
 const { status, children, className, ...rest } = props
 return (
   <button
     className={`${status || ''} ${className || ''}`}
     {...rest}
   >
     {children}
   </button>
 )
}

Here we take the prop className passed to our Button element, and insert it back in, with a safety check in the case of the prop being undefined.

Conclusion

React is an extremely powerful library, and there’s a good reason why it has quickly gained popularity. It gives you a great tool-set to build performant and easy-to-maintain web apps. It’s extremely flexible and yet very strict at the same time, which can be incredibly useful if you know how to use it. These are just a few APIs that are noteworthy and are largely overlooked. Give them a try in your next project!

For further reading about the latest React APIs, hooks, I would recommend reading useHooks(🐠). The Typescript Cheatsheet also has some great information for React and Typescript Hooks.

How to Make Separate RSS Feeds for Each Category in WordPress

Do you want to make a separate RSS feed for each category in WordPress?

Categories allow you to easily sort your content into major sections. Adding category RSS feeds can help your users subscribe to specific areas of your website that interest them.

In this article, we will show you how to easily make a separate RSS feed for each category in WordPress. We will also talk about how you can use these feeds effectively to grow your website.

How to make separate RSS feeds for each category in WordPress

How to Find RSS Feeds for Different Categories in WordPress

Categories and tags are two of the main default taxonomies in WordPress. They allow you to easily sort and organize your content into different subjects and topics.

By default, each category on your WordPress website has its own RSS feed. You can locate this RSS feed by simply adding ‘feed’ at the end of the category page URL.

For instance, if you have a category called ‘News’ with a URL like this:

https://example.com/category/news/

Then its RSS feed would be located at the following URL:

https://example.com/category/news/feed/

Tip: You can find your category URL by visiting the Posts » Categories page and clicking on the ‘View’ link under a category.

View Category URL by clicking on the View link

Now that you have located the RSS feed URLs for your categories, let’s look at some of the ways that you can share them with visitors on your WordPress website.

If you want to add links to your category RSS feeds using the default WordPress settings, then this method is for you.

First, you will need to open up a page or post where you want to add the RSS feed links in the block editor.

Once you are there, you can type the name of all the categories on your website in a List block.

After that, simply click the ‘Link’ icon in the block toolbar to open up the link prompt.

Click the Link icon in the block toolbar

Here, you can type the URL for your category RSS feed.

You will need to repeat this process for each category RSS feed on your website by linking to it on the related name within the List block.

Add category RSS feed links

Once you are done, don’t forget to click the ‘Publish’ or ‘Update’ button to save your changes.

You have now manually created a list of links to all your category RSS feeds. Now, you can visit your website to see these RSS feed links in action.

Category RSS feed preview

However, keep in mind that if you want to add, delete, or merge categories in the future, then you will have to manually update this list again.

Method 2: Add Links for Category RSS Feeds Using WPCode (Recommended)

If you want to create a list of category RSS feed links that are automatically updated every time you make changes, then this method is for you.

To add URLs to the category RSS feed, we will need to add custom code to your website theme’s functions.php file. However, even the smallest error in the code can break your site, making it inaccessible.

We recommend always using WPCode when adding custom code to your website. It is the best WordPress code snippet plugin that makes it safe and easy to add custom code without manually editing your functions.php file.

First, you need to install and activate the WPCode plugin. For more instructions, you may want to see our guide on how to install a WordPress plugin.

Note: You can also use the free WPCode plugin for this tutorial. However, upgrading to the pro WPCode plugin will give you access to a cloud library of code snippets, smart conditional logic, and more.

Upon activation, head over to the Code Snippets » + Add Snippet page from the WordPress admin sidebar.

Next, click on the ‘Use Snippet’ button under the ‘Add Your Custom Code (New Snippet)’ option.

Add new snippet

This will take you to the ‘Create Custom Snippet’ page, where you can start by typing a name for your code snippet.

This name is only for your identification and won’t be used on the website’s front end.

Next, you need to select ‘PHP Snippet’ as the code type from the dropdown menu on the right corner of the screen.

Choose PHP Snippet as code type for category RSS feed

After that, copy and paste the following code into the ‘Code Preview’ box.

function wpbeginner_cat_feed_list() {
	$string = '<ul>';
	$string .= wp_list_categories( array(
		'orderby'    => 'name',
		'show_count' => true,
		'feed_image' => '/path/to/feed-image.png',
		'echo' => false,
	) );
	$string .= '</ul>';

	return $string;
}

add_shortcode( 'wpb-cat-feeds', 'wpbeginner_cat_feed_list' );

Once you have done that, you can now also choose an icon image that will be displayed next to your category RSS feed links.

To do this, simply replace the /path/to/feed-image.png line in the code with the URL of your preferred icon image for the feed links.

Paste the code for adding links for category RSS feeds

Keep in mind that the icon image will first need to be uploaded to your WordPress media library.

Once it’s uploaded, you can get its URL by visiting the Media » Library page from the admin sidebar and clicking on the icon image to view its attachment details.

Copy image link from the media library

After adding the URL for the icon image to the code, scroll down to the ‘Insertion’ section.

From here, select the ‘Auto Insert’ method so that the code will be executed automatically on the website page where you add a shortcode.

Note: Keep in mind that even after choosing the ‘Auto Insert’ mode, you will need to add a [wpb-cat-feeds] shortcode to the page where you want to list categories RSS feeds. This shortcode is not the WPCode ‘Shortcode’ feature, but a part of the code snippet itself.

Choose an insertion method

Next, scroll back to the top and toggle the ‘Inactive’ switch to ‘Active’.

Finally, click the ‘Save Snippet’ button to store your settings.

Save the code snippet for adding RSS feed links to categories

After that, you need to open up the page or post where you want to add the category RSS feed links in your WordPress block editor.

From here, click the ‘Add Block’ (+) button at the top left corner of the screen and locate the ‘Shortcode’ block.

Upon adding the block, simply copy and paste the following shortcode into it.

[wpb-cat-feeds]

Add shortcode

Finally, click the ‘Update’ or ‘Publish’ button to save your changes.

Now visit your website to check the category RSS feed links in action.

Preview for category RSS feeds

Method 3: Display RSS Feed Subscription Option on the Category Pages

If you want to add a Subscribe link at the top of all your category pages, then you can use this method.

To do this, you will need to add custom code to your WordPress category.php or archive.php theme template.

However, it can be risky, and the smallest error can break your website.

This is why we recommend using WPCode instead. It is the easiest and safest way to add custom code to your WordPress website.

First, you need to install and activate the WPCode plugin. For more instructions, please see our step-by-step guide on how to install a WordPress plugin.

Upon activation, visit the Code Snippets » + Add Snippet page from the WordPress admin sidebar.

Next, head over to the ‘Add Your Custom Code (New Snippet)’ option and click the ‘Use Snippet’ button under it.

Add new snippet

Once you are taken to the ‘Create Custom Snippet’ page, start by typing a name for your code snippet.

It can be anything you like and is only for your identification purposes.

After that, select ‘PHP Snippet’ as the code type from the dropdown menu on the right.

Choose PHP code type for code snippet to add subscription links to category pages

Next, simply copy and paste the following code into the ‘Code Preview’ box.

<?php
if ( is_category() ) {
$category = get_category( get_query_var('cat') );
if ( ! empty( $category ) )
echo '<div class="category-feed"><p><a href="' . get_category_feed_link( $category->cat_ID ) . '" title="Subscribe to this category" rel="nofollow">Subscribe</a></p></div>';
}
?>
Paste the code snippet for adding subscription link

Upon adding the code, scroll down to the ‘Insertion’ section and choose the ‘Auto Insert’ method.

This way, the code will automatically be executed on your website.

Choose an insertion method

Next, you have to open up the ‘Location’ dropdown menu and switch to the ‘Page-Specific’ tab from the column on the left.

After that, select the ‘Insert Before Excerpt’ option as the snippet location.

Choose snippet location as Insert before excerpt

Once you have done that, scroll back to the top and toggle the ‘Inactive’ switch to ‘Active’.

Finally, click the ‘Save Snippet’ button to save your changes.

Save snippet for adding subscription link to category pages

Now, you can visit your website category page to view the Subscription link for the RSS feeds in action.

This is what it looked like on our demo website.

Preview for subscription link

How to Optimize Category RSS Feeds in WordPress

Category RSS feeds allow your users to subscribe only to content that interests them the most.

For instance, if you have a technology news blog, then your users can choose to subscribe only to news about the devices that they use.

However, a plain RSS feed isn’t readable without a feed reader, and most users aren’t using one to subscribe to their favorite websites.

Luckily, you can still use your category feeds to deliver content to your users anywhere they want.

For example, you can ask users to sign up for your email newsletter with the option to only get updates for specific content categories.

With email marketing services like Constant Contact or Brevo (formerly Sendinblue), you can easily set up an automated RSS-to-email newsletter for specific categories. You can see our guide on how to notify subscribers of new posts for step-by-step instructions.

Similarly, you can also allow users to get instant push notifications for each category using PushEngage. It is the best push notification service on the market that allows you to send messages directly to your users’ devices (desktops as well as mobile phones).

PushEngage allows you to set up automatic push notifications using RSS feeds. You simply need to enter your category RSS feed URL, and a push notification will go out whenever a new post is published in that category.

We hope this article helped you learn how to make separate RSS feeds for each category in WordPress. You may also want to see our easy tips to grow your blog traffic or read our comparison of the best live chat software for small businesses.

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

The post How to Make Separate RSS Feeds for Each Category in WordPress first appeared on WPBeginner.

Bridging The Gap Between Designers And Developers

In the past couple of years, it’s no secret that our design tools have exponentially evolved. With many having great component management and prototyping, you may be wondering what big leap could possibly be next?

Let’s look at a typical dilemma:

Let’s say that you’re a designer for the design systems team where you are creating components, variants and spending many hours to document all the use cases and properties that may or may not be changed. You finally finish a large complex component and deliver it to the developers.

How do we know the code is the same UI? Do we really need to audit every single component? How do we bridge this gap between what is designed over what is developed without the overhead of constantly doing reviews?

All of this and you have to help teach people the different ways to use components, proper spacings and design for responsive web, and of course, the component will need to be updated for future use cases.

There are so many touchpoints, people involved. It almost feels like the farther we go into design systems, the more overhead there is for everyone! Now, it appears that a light at the end of the tunnel is glistening, and the next big thing is on its way.

A Hidden Gem In All The Chaos

I recently had the opportunity to revisit a tool I haven’t used in quite some time — a tool that is aiming to bridge this gap and minimize all that overhead: UXPin. A new feature called “Merge” has been launched to help break through the chasms of design and development, all while improving the agility and quality our teams expect. This new technology may cause some to rethink how entire design and engineering teams collaborate and work through use cases and building components.

Out With The Old Process

If we look at the current process most companies employ today, it can be pretty tedious with some obvious flaws. When we create a new component from scratch, we will design the base level of the component, add variants, write documentation, publish to the library and deliver it to the developers. Listing the process out is long-winded, but luckily it only needs to be done once (we hope):

Now, what happens when we need to update a component? A new use case has come in, or perhaps we decided to change our borders from rounded to razor-sharp? We now need to add the variants to the library, (possibly) update the documentation again, publish and deliver it to our developers. Phew! Let’s hope nothing broke along the way for our designers with all that reorganization of the component.

I almost forgot, we still need to publish the updates to the development library! Let’s hope that they can finish before the product teams go their own way to meet deadlines.

In With The New Process

So, you may be wondering, how does UXPin Merge’s technology help with this over-the-top process we all employ today? Well, take a look at the diagram below. You may notice the creation of a component and variants are not needed (in most cases). This new process reduces the amount of fiddling with auto-layout tools, because of our now synergized relationship with developers:

We only need to design the detail level required for documentation and implementation. Simple components such as a button or other atomic-level components may not need to be designed. Why waste your time doing double the work when the development can begin immediately with little overhead? In a way, we’ve come full circle; we are returning to the old ways when static components displayed only a few interactions in the documentation.

Notice that publishing to the library is now at the tail end of the process. That’s because, once the developer finishes with the component, it can now utilize Merge to make it available to designers in UXPin, and of course, all your product developers have it at the same time!

When updating components, it’s essentially the same as a new, except it may even be possible to skip the first step depending on the scenario. For example, let’s say that you want to add an option to add an icon to buttons; this is not something that needs designing, but instead, it needs to be communicated with your new best friends in development.

While this new relationship forms with your developers, the new way to officially launch components to designers may be only upon release by developers. Gone are the days of product designers asking if a component is available to their product developers. If it’s in the library, then it’s available in development and ready for designers to work on right away.

But enough about the process. Let’s take a gander at how UXPin Merge works.

Managing Libraries

The best part is that libraries can be imported directly from your code repository such as GitHub, Bitbucket, GitLab, (works only for React components), or even from Storybook. Once a library is created, you will have options to name the library.

When importing with Storybook, the process is quite straightforward. Simply grab the library URL, and UXPin will do the rest for you. With React components, using the CLI, you have control over the components that are published by specifying the UXPin library's unique token.

Version Control And Testing

One of the biggest concerns amongst designers and design systems teams is version control. Most concerns can be resolved with this UXPin’s Merge feature. Let’s paint a quick picture:

Today, when we set out to upgrade a component, there is always the fear of breaking a component or layers that may get renamed and cleaned up. A total re-structure of the component could even occur which often leads to anxiety (on the designer’s side) on whether they should upgrade a component or stick with the old one.

When a component is developed, however, as long as the properties are remaining the same, it doesn’t matter how the component layout changes or the actual markup of the component. This, in turn, allows designers to upgrade their components to the latest versions with confidence.

Of course, in the hopefully rare instant that a component gets totally screwed up, just like with any coding project, it can easily be rolled back and republish the old version of the component.

Testing Updates

When testing new components or updates, today it’s not so easy. We obviously can’t edit the existing design library to test as this may accidentally be published, and block any other updates that are ready to go. It’s also very cumbersome to create a component in a new file, test it, and then try to handle the merging back to the current library without breaking layers.

Luckily for us, developers have figured out this issue long ago, and it fits right into UXPin’s Merge technology. When testing new components, it’s already best practice to fork or branch the code, and this new branch may be published into a test environment within UXPin. Your team may test it or you may grant access to a small group of beta testers in your company. Once the component has been tested and tried, the component can be quickly introduced and published to the primary design library without a stitch.

Designing With Code

So, how do our team members on the ground design, and what does this technology mean for them? Well, I’m glad you asked! From a product designer's perspective — there isn’t much difference. When a designer uses a component from the development library utilizing Merge, they will be marked with an orange hexagon for each component. Anything new will keep behaving exactly the same as the developer's library.

Components from the developers can have restrictions defined, but in a good way. A common issue often is using icons as links rather than wrapping the icon in a button component. If we were to use just an icon from the library, it’s locked and the user may not add interactions:

Alternatively, the icon button below allows for interactions. This allows us to really refine and control what components should be interacted with, and which should not; both from a standards point of view as well as accessibility.

With these types of restrictions, it puts an ease to the Design Systems team that components will have to be used in their proper ways, and if it’s over-ridden it will be obvious from the layer panel that something has been custom made.

Hand-Off

When you are ready to hand off to the developers, the finished prototype can display each component and their configuration to copy and paste to the developer’s tools and quickly build out the project. If your team doesn’t have a component library yet, UXPin comes with a default library or you can easily import some of the public libraries available directly in UXPin.

Accessibility

Speaking of accessibility, oftentimes it is overlooked or there isn’t enough time to create documentation on all the meta labels, aria tags, and so on. Designers don’t know what tags they need to input and developers don’t want to go through the hassle.

With UXPin, we can expose multiple properties even meta-level data that may never be visible to the interface, such as the ARIA labels. Designers may then enter all the information required (or a copywriter if you are lucky enough to have one on your team), and there will be little to no overhead for the product developers to implement.

Layouts, Templates And Grids

Just by reading the title, you know what’s coming, and I’m sure you’re bouncing in your chair right about now — I know I am. Grids, layouts and even page templates can be pulled into the library as a ‘component’ which allows users to bring components into the active area of a page and allow for all the spacing to be handled by the development library.

Common templates (e.g. login screens, completion pages, forms, profile pages, and so on) can all be utilized as a drag-and-drop component as well. Talk about speeding up the process and reducing human error in design!

In Closing

If you are ready to take the leap, it’s never too late to try out new software and new processes to improve your workflow. After all, we all want to be agile and as adoptive as possible. Let’s build stronger relationships across our teams, reduce our workload and work more efficiently. With tools like UXPin Merge, we get closer to a much more seamless work environment.