<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:admin="http://webns.net/mvcb/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
    <title><![CDATA[]]></title>
    <link></link>
    <description></description>
    <dc:language>en</dc:language>
    <dc:creator>104@shineyrock.com</dc:creator>
    <dc:rights>Copyright 2026</dc:rights>
    <dc:date>2026-10-12T14:45:18-04:00</dc:date>
  
    <item>
      <title><![CDATA[The Best Small Business Web Designs by DesignRush]]></title>
      <link>//shineyrock.com/blog/read/the-best-small-business-web-designs-by-designrush</link>
      <guid>https://shineyrock.com/blog/read/the-best-small-business-web-designs-by-designrush#When:19:16:00Z</guid>
      <description><![CDATA[I am happy and honored to announce that we are mentioned on <a href="https://www.designrush.com/best-designs/websites" title="The Best Small Business Web Designs by DesignRush" target="_blank">The Best Small Business Web Designs by DesignRush</a> for the work that has been done on designing and building the website <a href="https://www.sunnysidesisters.com" title="The Sunnyside Sisters Bed and Breakfast website" target="_blank">The Sunnyside Sisters Bed and Breakfast </a>.]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2023-12-07T19:16:00+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Create Modern Vue Apps Using Create-Vue and Vite]]></title>
      <link>//shineyrock.com/blog/read/create-modern-vue-apps-using-create-vue-and-vite</link>
      <guid>https://shineyrock.com/blog/read/create-modern-vue-apps-using-create-vue-and-vite#When:23:57:34Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="iz1g">
<p>create-vue is a scaffolding tool for Vue apps. It replaces Vue CLI as the recommended way to create Vue SPAs (Single Page Apps). Today we will check out create-vue, see how it works, and build an app using it.</p>
<p>create-vue automates the creation of a new Vue 2 or Vue 3 app using <a href="https://vitejs.dev/" target="_self">Vite</a>. Vite is an extremely fast build tool created by the Vue team. Whereas Vue CLI  has its own Webpack-powered build pipeline, create-vue just scaffolds an app. This approach offers more flexibility, as you can use any plugins and configurations that work with Vite, but it is still very simple to use. Additionally, create-vue is a lot faster than Vue CLI due to Vite's optimization. Without further ado, let's get started.</p>
<h2 id="toc-ti2f-creating-an-app-with-create-vue">Creating an App With Create-Vue</h2>
<p>First, make sure you have Node.js and npm installed. You can check this by running <code>npm -v</code>:</p>
<pre class="brush: bash noskimlinks noskimwords">npm -v
8.19.1</pre>
<p>If you do not have Node.js, you can install it by going to the <a href="https://nodejs.org/en/download/" target="_self">Node.js download page</a>. After you've done that, open a terminal in the folder you want the project to be in. Then, run <code>npm init vue@3</code>. It will ask you to install create-vue. Then you will have to configure a few things, which I will guide you through.</p>
<p>First, you need to decide on a name for your project. I set the name to <code>create-vue-example</code>, but you can set it to whatever you want.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png" alt="create-vue name prompt" loading="lazy" width="870px" height="563px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png" alt="create-vue name prompt" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png" alt="create-vue name prompt" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082210.png 2x"></figure>
<p>Next, create-vue will ask you whether you want to use TypeScript. This is just a basic example, so let's set that to no.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png" alt="create-vue TypeScript prompt" loading="lazy" width="870px" height="563px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png" alt="create-vue TypeScript prompt" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png" alt="create-vue TypeScript prompt" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_082727.png 2x"></figure>
<p>Next it will ask you whether you want to add JSX. Once again, because this is a basic example, let's just say no.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png" alt="create-vue JSX prompt" loading="lazy" width="870px" height="563px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png" alt="create-vue JSX prompt" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png" alt="create-vue JSX prompt" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_083946.png 2x"></figure>
<p>For the rest, select yes for Vue Router, ESLint, and Prettier, and select no for the rest. At the end, your terminal should look something like this:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png" alt="vue-create end prompt" loading="lazy" width="870px" height="563px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png" alt="vue-create end prompt" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png" alt="vue-create end prompt" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095152.png 2x"></figure>
<p>Now, as the instructions say, <code>cd</code> into the directory of the project, install its dependencies with <code>npm install</code>, and run <code>npm run dev</code>. It should give you a link to a local server. Click on the link, and you should see something like this:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png" alt="create-vue template starter page" loading="lazy" width="870px" height="497px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png" alt="create-vue template starter page" loading="lazy" width="650px" height="373px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png" alt="create-vue template starter page" loading="lazy" width="380px" height="222px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2793/posts/93361/image-upload/Screenshot_20221009_095525.png 2x"></figure>
<p>Congratulations! You just created your first Vue app with create-vue! If you want to build it for deployment, you can run <code>npm run build</code>. Now, let's dig into the code.</p>
<h2 id="toc-t8t8-exploring-the-code">Exploring the Code</h2>
<p>After you finish setting everything up, the file structure should look something like this:</p>
<table>
<thead>
<tr>
<th>File or Folder</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>.vscode</strong></td>
<td>A folder for configuring VS Code to work best with this app. You can safely ignore it.</td>
</tr>
<tr>
<td><strong>node_modules</strong></td>
<td>Contains all of your dependencies. You generally avoid touching this folder, as npm manages it automatically.</td>
</tr>
<tr>
<td><strong>src</strong></td>
<td>Where all of your source code will live. Most of the time, you will be working in this folder.</td>
</tr>
<tr>
<td><strong>.eslintrc.cjs</strong></td>
<td>Configures ESLint—a tool that helps catch bugs at compile-time.</td>
</tr>
<tr>
<td><strong>.gitignore</strong></td>
<td>Tells Git what files to ignore (for example <strong>node_modules</strong>).</td>
</tr>
<tr>
<td><strong>.prettierrc.json</strong></td>
<td>Configures Prettier—a formatting tool.</td>
</tr>
<tr>
<td><strong>index.html</strong></td>
<td>This is the skeleton HTML file for your app. It is populated using the Vue components and scripts in <strong>src</strong>. You might need to do something to it at some point, but right now, just leave it as is.</td>
</tr>
<tr>
<td>
<strong>package-lock.json </strong>and <strong>package.json</strong>
</td>
<td>The <strong>package.json</strong> contains a lot of the npm configuration, so you will likely have to configure it. On the other hand, <strong>package-lock.json</strong> just caches package version information, so you do not need to do anything with it.</td>
</tr>
<tr>
<td><strong>README.md</strong></td>
<td>Describes your project to other developers in GitHub.</td>
</tr>
<tr>
<td><strong>vite.config.js</strong></td>
<td>The main configuration file for Vite.</td>
</tr>
</tbody>
</table>
<p>Next, let's take a look at the <strong>src</strong> folder:</p>
<table>
<thead>
<tr>
<th>File or Folder</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>assets</strong></td>
<td>A folder to store CSS, images, and other static assets.</td>
</tr>
<tr>
<td><strong>components</strong></td>
<td>This folder is for (you guessed it!) Vue components.</td>
</tr>
<tr>
<td><strong>router </strong></td>
<td>Includes all of the code for Vue Router, which is what allows your app to function as a single-page application.</td>
</tr>
<tr>
<td><strong>views </strong></td>
<td>Contains the actual "pages" of the app.</td>
</tr>
<tr>
<td>
<strong>App.vue</strong> and <strong>main.js</strong>
</td>
<td>The base page shell and rendering script respectively.</td>
</tr>
</tbody>
</table>
<p>Now that we have looked at the files, let's try customizing the build pipeline with plugins.</p>
<h2 id="toc-lgox-customizing-the-build-pipeline-with-plugins">Customizing the Build Pipeline With Plugins</h2>
<p>Plugins can be very helpful for developing more efficiently. For example, let's say you wanted to implement a custom font from <a href="https://fonts.google.com/" target="_self">Google Fonts</a>. You could just use the link Google Fonts gives you on your website to automatically download the font. However, <a href="https://byteofdev.com/posts/speed-up-font-loading/#1.-self-host-your-fonts" target="_blank" rel="noopener">Google Fonts can be quite slow</a>. Luckily, there are solutions. You could self-host the font using something like <a href="https://google-webfonts-helper.herokuapp.com/fonts" target="_self">Google Webfonts Helper</a>, but that can be a lot of effort. Luckily, plugins come to the rescue here. Using <a href="https://github.com/feat-agency/vite-plugin-webfont-dl" target="_self">vite-plugin-webfont-dl</a>, you can link to fonts on Google Fonts as you would normally do, and the plugin handles all of the transformation.</p>
<h3 id="toc-zy3k-how-to-add-a-plugin">How to Add a Plugin</h3>
<p>Adding a plugin is very simple. First, we need to install it by running <code>npm install --save-dev plugin-name</code>, or in this case <code>npm install --save-dev vite-plugin-web-dl</code>. Next, we need to add it to the Vite config. First, go to <strong>vite.config.js</strong> and import the plugin like this:</p>
<pre class="brush: javascript noskimlinks noskimwords">import webfontDownload from 'vite-plugin-webfont-dl';</pre>
<p>Next, you will need to put the plugin in the <code>plugins</code> array of your configuration.</p>
<pre class="brush: javascript noskimlinks noskimwords">plugins: [vue(), webfontDownload()],</pre>
<p>Now, your <strong>vite.config.js</strong> should look something like this:</p>
<pre class="brush: javascript noskimlinks noskimwords">import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import webfontDownload from 'vite-plugin-webfont-dl';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue(), webfontDownload()],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  }
})
</pre>
<p>Now you can load fonts by simply pasting in the HTML given to you by Google Fonts, and they will automatically be optimized!</p>
<h2 id="toc-gp5v-environment-variables">Using Environment Variables</h2>
<p>If you want to easily access configuration from your code during the build process, you might want to use environment variables. Vite allows you to load variables from a file and replace calls to the variable with its value during the build process. For example, let's say you wanted to easily configure the database URL that your code used. You would first create a <strong>.env</strong> file in your project directory. In that file, put something like this:</p>
<pre class="brush: plain noskimlinks noskimwords">VITE_DB_URL=https://url</pre>
<p>The variable name does not matter, as long as it starts with <code>VITE_</code>. Now, in order to access it in your code, you need to refer to it like this:</p>
<pre class="brush: javascript noskimlinks noskimwords">console.log(import.meta.env.VITE_DB_URL)</pre>
<p>Then, when Vite compiles your project, that code will be transformed into something like this:</p>
<pre class="brush: javascript noskimlinks noskimwords">console.log("https://url")</pre>
<p>Vite also includes some built-in environment variables, like <code>import.meta.env.PROD</code>.</p>
<pre class="brush: plain noskimlinks noskimwords">if (import.meta.env.PROD) {
    // App is being compiled for deployment
} else {
    // App is in development mode
}</pre>
<h2 id="toc-nvyr-conclusion">Conclusion</h2>
<p>Now you know your way around create-vue and Vite! These tools allow us to easily set up a Vue app with fast development and powerful configuration. If you would like to learn more, check out the <a href="https://vitejs.dev/" target="_self" rel>Vite documentation</a>, and if you would like to look at some other options, check out <a href="https://vitepress.vuejs.org/" target="_self">VitePress</a> and <a href="https://nuxtjs.org/" target="_self">Nuxt</a>. Thanks for reading!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-10-09T23:57:34+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Pros and Cons of Using WordPress]]></title>
      <link>//shineyrock.com/blog/read/pros-and-cons-of-using-wordpress</link>
      <guid>https://shineyrock.com/blog/read/pros-and-cons-of-using-wordpress#When:13:00:44Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="icj7f"><p>Before using WordPress to build your website, you first need to know its advantages and disadvantages. That way, you can make the right decision. In this article, we'll go over the pros and cons of using WordPress.</p></div><div data-content-block-type="TableOfContents" class="content-block content-block-tableofcontents" id="i4rx"><ul class="visual-toc-list toc-ordered-list visual-toc__regular-theme div-container visual-toc-list__overflow" start="0">
<div class="visual-toc-column div-container" id="ibzx">
<div data-content-block-type="ContentTextBlock" class="content-block content-block-contenttextblock" id="icp95"><h4>Pros</h4></div>
<li class="toc-item-title"><a href="#toc-7cl6-wordpress-is-easy-to-use"><span class="visual-toc__heading-title content-container">WordPress Is Easy to Use</span></a></li>
<li class="toc-item-title"><a href="#toc-648z-pro"><span class="visual-toc__heading-title content-container">WordPress Sites Are Affordable</span></a></li>
<li class="toc-item-title"><a href="#toc-zrdi-pro"><span class="visual-toc__heading-title content-container">WordPress Has a Strong Ecosystem</span></a></li>
<li class="toc-item-title"><a href="#toc-wav1-pro"><span class="visual-toc__heading-title content-container">WordPress Is Flexible</span></a></li>
</div>
<div class="visual-toc-column div-container" id="i6x6l">
<div data-content-block-type="ContentTextBlock" class="content-block content-block-contenttextblock" id="iwpin"><h4>Cons</h4></div>
<li class="toc-item-title"><a href="#toc-wmg2-wordpress-is-prone-to-hacking"><span class="visual-toc__heading-title content-container">WordPress Is Prone to Hacking</span></a></li>
<li class="toc-item-title"><a href="#toc-bmx6-wordpress-can-be-difficult-to-maintain"><span class="visual-toc__heading-title content-container">WordPress Can Be Difficult to Maintain</span></a></li>
<li class="toc-item-title"><a href="#toc-zaax-wordpress-doesnt-perform-too-well"><span class="visual-toc__heading-title content-container">WordPress Doesn't Perform Well</span></a></li>
<li class="toc-item-title"><a href="#toc-2tmi-there-is-little-innovation-in-wordpress"><span class="visual-toc__heading-title content-container">There Is Little Innovation in WordPress</span></a></li>
</div>
</ul></div><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="ij9w">
<h4 id="toc-0zy9-what-is-wordpress">What Is WordPress?</h4>
<p>A content management system (CMS) is software that provides an interface through which you can publish posts to your blog or website, and manage content in general, without being concerned with the underlying software framework.</p>
<p>WordPress is a popular content management system (CMS) and website builder used for setting up blogs, online stores, and other kinds of websites. Once you install WordPress, you're required to sign in to your admin panel, which is where you'll add pages to your site, add posts, install plugins and themes, and so on.</p>
<p>The two ways to use WordPress are through WordPress.com (a private publishing platform) and WordPress.org (for self-hosting WordPress).</p>
<h4 id="toc-li69-wordpresscom-vs-wordpressorg">WordPress.com vs. WordPress.org</h4>
<p>WordPress.com is basically a publishing platform where you can go to set up a WordPress site without having to start from scratch or worry about hosting it. The platform provides you with everything needed to quickly set up a WordPress site and put it on the internet.</p>
<p>The second version of WordPress is the self-hosted one, which you can find at WordPress.org. At WordPress.org, you can download the free WordPress software and modify it as you please. You are also free to install it on any hosting provider you prefer.</p>
<p>In essence, the only difference between the two is that one of them provides centralized WordPress hosting (WordPress.com) while the other gives you free, modifiable code that you can host anywhere you want to (WordPress.org).</p>
<p>Before using WordPress to build your website, you might first want to know its advantages and disadvantages, especially with regard to what you intend to use it for (blog, online store, etc). That way, you're better equipped to make a sound decision in the end.</p>
<p>In this article, we'll go over the pros and cons of using WordPress.</p>
<h2 id="toc-3g1x-advantages-of-using-wordpress" data-scroll-position-target="chapter">Advantages of Using WordPress</h2>
<h3 id="toc-7cl6-wordpress-is-easy-to-use">Pro 1: WordPress Is Easy to Use</h3>
<p>WordPress is very easy to use, regardless of whether you're a coding guru or someone with no technical knowledge. It comes with a simple user interface (aka the "admin panel") where users can create pages, add new posts, edit existing posts, add plugins and themes, and do so much more.</p>
<p>Within the WordPress.com platform, there are thousands of high-quality, ready-made templates for different kinds of sites. You can customize one of them and use it for your own website without having to write one line of code.</p>
<p>If you decide to go with the self-hosted WordPress, you won't go through any difficulty hosting it because most hosting companies provide a one-click installation feature for WordPress. Many of them also provide regular backups, depending on the plan you opt for.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/design-and-code-your-first-website-in-easy-to-understand-steps--net-6062"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/7387/preview_image/web-designer-on-computer-R28GA9P.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">Design and Code Your First Website in 9 Easy-to-Understand Steps</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/profiles/21181/profileImage/tuts-plus-profile.jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Nathan Umoh</div>
<div class="roundup-block__published-date">31 Aug 2022</div>
</div>
</div>
</div>
</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-learn-wordpress--cms-36473"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36473/preview_image/achieving_success_in_web_development_2021_09_24_02_52_19_utc.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">How to Learn WordPress</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/413/profiles/18842/profileImage/thumb_140656049277268.jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Sajal Soni</div>
<div class="roundup-block__published-date">29 Jul 2022</div>
</div>
</div>
</div>
</div></a></li>
</ul>
<h3 id="toc-648z-pro">Pro 2: WordPress Sites Are Affordable</h3>
<p>Building a website on WordPress tends to be cheaper than building one from scratch. For example, if you want you set up a WordPress site, you can do either of the following:</p>
<ol>
<li>
<p>Install the free software from WordPress.org, modify the code to your taste, and pay a small fee to a site like Hostinger to host it for you.</p>
</li>
<li>
<p>Sign up to WordPress.com, pay a fee, and use their prebuilt tools and templates to create your own WordPress site, which they will host and manage for you.</p>
</li>
</ol>
<p>Both of these options are cheaper than having to build the website from the ground up using HTML, CSS, and JavaScript, or some other web framework.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/is-wordpress-free--cms-93123"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/93123/preview_image/free_rider_2021_08_26_17_25_18_utc.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">Is WordPress Free?</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/profiles/19759/profileImage/monty-shokeen-tutsplus.jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Monty Shokeen</div>
<div class="roundup-block__published-date">25 Aug 2022</div>
</div>
</div>
</div>
</div></a></li></ul>
<h3 id="toc-zrdi-pro">Pro 3: WordPress Has a Strong Ecosystem</h3>
<p>WordPress is one of the most widely used website builders on the internet. In fact, according to Kinsta, about <a href="https://kinsta.com/blog/wordpress-statistics/">43% of websites</a> on the internet are built on top of WordPress. That's almost half of all websites!</p>
<p>Due to this widespread use, WordPress has a very active community of users as well as a huge ecosystem of third-party themes, plugins, and tools. There's also no shortage of WordPress developers out there.</p>
<p>This is also great news if you're learning about WordPress. You'll find an endless number of tutorials and guides on Google and YouTube showing the step-by-step process for performing different tasks in WordPress.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/the-best-wordpress-plugins-of-all-time-free-and-paid--cms-38563"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/38563/preview_image/DALL_E_2022_07_27_23_21_18_bright_and_cheerful_photograph_of_a_hand_holding_a_power_plug_connected_to_a_computer.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">The Best WordPress Plugins of All Time (Free and Paid)</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Franc Lucas</div>
<div class="roundup-block__published-date">28 Jul 2022</div>
</div>
</div>
</div>
</div></a></li></ul>
<h3 id="toc-wav1-pro">Pro 4: WordPress Is Flexible</h3>
<p>WordPress is very robust and flexible. You can use it for anything from simple brochure sites, blogs and landing pages to complex e-commerce sites and online stores.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--card">
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/articles/wordpress-community-plugins-of-the-year--cms-33133"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/articles/wordpress-community-plugins-of-the-year--cms-33133"><h1 class="nolinks">21 Best WordPress Community Plugins for 2022</h1></a></header><div class="posts__post-teaser">Whether you’re an online freelancer or running a brick-and-mortar business, having a website is no longer enough to get and retain customers. You need to...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/franc-lucas">Franc Lucas</a></address>
<time class="posts__post-publication-date" datetime="2022-07-27 02:40:00 UTC" title="27 Jul 2022">27 Jul 2022</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress-plugins">WordPress Plugins</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/articles/best-wordpress-dating-website-themes--cms-34364"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34364/preview_image/love_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34364/preview_image/love_pre.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34364/preview_image/love_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34364/preview_image/love_pre.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/34364/preview_image/love_pre.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/34364/preview_image/love_pre.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/articles/best-wordpress-dating-website-themes--cms-34364"><h1 class="nolinks">15+ Best WordPress (WP) Dating Website Themes for 2022</h1></a></header><div class="posts__post-teaser">These days, it’s becoming more and more common for couples to meet online. It may be a competitive market, but the opportunities are endless. Read on for 15+...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg" alt="Hermione Wright" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg" alt="Hermione Wright" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg" alt="Hermione Wright" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/profiles/21134/profileImage/hermione-wright.jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/hermione-wright">Hermione Wright</a></address>
<time class="posts__post-publication-date" datetime="2022-09-07 13:58:00 UTC" title="07 Sep 2022">07 Sep 2022</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress-themes">WordPress Themes</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/articles/add-engagement-with-interactive-media-plugins-for-wordpress--cms-33928"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33928/preview_image/cozy_summer_cinema_with_vintage_projector_in_the_e_2022_03_31_22_20_44_utc.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/articles/add-engagement-with-interactive-media-plugins-for-wordpress--cms-33928"><h1 class="nolinks">Add Engagement With Interactive Media Plugins for WordPress</h1></a></header><div class="posts__post-teaser">Discover some different types of interactive media plugins for WordPress available on CodeCanyon. This includes plugins for media library management and...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/franc-lucas">Franc Lucas</a></address>
<time class="posts__post-publication-date" datetime="2022-05-27 04:06:00 UTC" title="27 May 2022">27 May 2022</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress-plugins">WordPress Plugins</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/articles/top-ways-to-make-your-woocommerce-store-successful--cms-33232"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33232/preview_image/online_shopping_website_P6NA9XP.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/articles/top-ways-to-make-your-woocommerce-store-successful--cms-33232"><h1 class="nolinks">Top 12 Tips for a Better WooCommerce Store</h1></a></header><div class="posts__post-teaser">The right WooCommerce plugins can make your online store better and more successful. In this post, I'll share 12 ways you can improve your store and show you...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Franc Lucas" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/franc-lucas">Franc Lucas</a></address>
<time class="posts__post-publication-date" datetime="2022-05-27 02:46:26 UTC" title="27 May 2022">27 May 2022</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/woocommerce">WooCommerce</a></div></footer></article></li>
</ul>
<p>You can start with a few pages and add more as your website continues to grow. There is no limit to how much content you publish on your WordPress site, provided that the underlying host is capable of handling it and that you maintain your site regularly.</p>
<h2 id="disadvantages-of-wordpress toc-8463-disadvantages-of-wordpress" data-scroll-position-target="chapter">Disadvantages of WordPress</h2>
<h3 id="toc-wmg2-wordpress-is-prone-to-hacking">Con 1: WordPress Is Prone to Hacking</h3>
<p>In the <em>"WordPress Has a Strong Ecosystem"</em> section under <em>Advantages</em>, I mentioned how WordPress's popularity led to it having a vibrant ecosystem of tools, plugins, and themes, which is a huge advantage of using it.</p>
<p>However, this widespread use also makes WordPress a huge playing field for hackers. In fact, <a href="https://wpmanageninja.com/wordpress-security-statistics/">83% of all hacked CMS-based websites</a> are built on WordPress.</p>
<p>Hackers just love exploiting vulnerabilities in WordPress. They'll look for themes or plugins that have previously been hacked and find the websites still using them. They'll then target these websites using the same hacking techniques as the previous cases.</p>
<p>Once they find a vulnerability in any of the websites, they can then look up the data or even add malicious content to the site, leading to disastrous consequences for you.</p>
<p>You can find lots of information on securing your WordPress site here on Envato Tuts+.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--card">
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/articles/how-to-secure-your-wordpress-site--cms-35240"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/227/posts/35240/preview_image/wordpress%20security.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/articles/how-to-secure-your-wordpress-site--cms-35240"><h1 class="nolinks">How to Secure Your WordPress Site</h1></a></header><div class="posts__post-teaser">Learn the best ways to keep your WordPress site safe from hackers and keep it running smoothly.</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/rachel-mccollin">Rachel McCollin</a></address>
<time class="posts__post-publication-date" datetime="2020-06-25 03:13:48 UTC" title="25 Jun 2020">25 Jun 2020</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress">WordPress</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/how-to-add-two-factor-authentication-to-wordpress--cms-39061"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/39061/preview_image/two-factor-security-guard.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/how-to-add-two-factor-authentication-to-wordpress--cms-39061"><h1 class="nolinks">How to Add Two-Factor Authentication to WordPress</h1></a></header><div class="posts__post-teaser">Two-factor authentication can protect your site against more than 99.9% of account compromise attacks. Find out how to add this powerful additional security...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg" alt="Jessica Thornsby" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg" alt="Jessica Thornsby" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg" alt="Jessica Thornsby" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/profiles/1609/profileImage/jessica%20thornsby.jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/jessica-thornsby">Jessica Thornsby</a></address>
<time class="posts__post-publication-date" datetime="2021-11-29 17:48:00 UTC" title="29 Nov 2021">29 Nov 2021</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress">WordPress</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/how-to-backup-your-wordpress-site--cms-34634"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/how-to-backup-your-wordpress-site--cms-34634"><h1 class="nolinks">How to Backup Your WordPress Site</h1></a></header><div class="posts__post-teaser">This one’s an important one: in this tutorial you’ll learn how to backup your WordPress site through your hosting provider, with a plugin, or manually.</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="Adi Purdila" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/265/profileImage/adi.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="Adi Purdila" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/265/profileImage/adi.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="Adi Purdila" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/profiles/265/profileImage/adi.jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/adi-purdila">Adi Purdila</a></address>
<time class="posts__post-publication-date" datetime="2021-03-15 07:47:35 UTC" title="15 Mar 2021">15 Mar 2021</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress">WordPress</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/how-to-install-a-ssl-certificate-to-secure-wordpress--cms-34828"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/34828/preview_image/padlock.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/34828/preview_image/padlock.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/34828/preview_image/padlock.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/34828/preview_image/padlock.jpg 2x"><img class="posts__post-preview-image posts__post-preview-image--regular resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/227/posts/34828/preview_image/padlock.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/227/posts/34828/preview_image/padlock.jpg 2x"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/how-to-install-a-ssl-certificate-to-secure-wordpress--cms-34828"><h1 class="nolinks">How to Install an SSL Certificate to Secure WordPress</h1></a></header><div class="posts__post-teaser">Learn how to install an SSL certificate on your WordPress site and make it more secure as well as enhancing SEO.</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><img sizes="76px" class="posts__post-author_photo resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg" alt="Rachel McCollin" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/227/profiles/1328/profileImage/rachel-mccollin-jan2015-tutsplus.jpg 2x"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/rachel-mccollin">Rachel McCollin</a></address>
<time class="posts__post-publication-date" datetime="2020-03-23 13:54:17 UTC" title="23 Mar 2020">23 Mar 2020</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/wordpress">WordPress</a></div></footer></article></li>
</ul>
<h3 id="toc-bmx6-wordpress-can-be-difficult-to-maintain">Con 2: WordPress Can Be Difficult to Maintain</h3>
<p>WordPress is notoriously known for its incompatibility problems and critical errors. Just one corrupt plugin or theme can bring your entire website down.</p>
<p>Even worse, hackers can exploit loopholes in your website, leading to them stealing sensitive information or adding malicious content to it.</p>
<p>To ensure that your website remains active, responsive, and secure, you're required to upgrade your WordPress plugins, themes, and even PHP, on a frequent basis.</p>
<p>You're required to regularly perform backups and carry out other <a href="https://webdesign.tutsplus.com/articles/wordpress-website-maintenance-guide-for-beginners--cms-93117?_ga=2.234297049.615864667.1662987922-209838359.1657175621">essential maintenance tasks</a> to keep the site safe and working.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/wordpress-website-maintenance-guide-for-beginners--cms-93117"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/93117/preview_image/beautiful_woman_mechanic_repairing_and_maintenance_2022_02_02_22_57_34_utc.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">WordPress Website Maintenance Guide for Beginners</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/2776/profiles/21300/profileImage/otherone.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/2776/profiles/21300/profileImage/otherone.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/2776/profiles/21300/profileImage/otherone.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/2776/profiles/21300/profileImage/otherone.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/profiles/21300/profileImage/otherone.jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/profiles/21300/profileImage/otherone.jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Kingsley Ubah</div>
<div class="roundup-block__published-date">23 Aug 2022</div>
</div>
</div>
</div>
</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-essential-wordpress-utilities-to-manage-your-site--cms-30208"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/30208/preview_image/satisfied-business-woman-answering-emails-typing-o-KQSJ7FV.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">24 Essential WordPress Utilities to Manage Your Site</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Franc Lucas</div>
<div class="roundup-block__published-date">31 Dec 2021</div>
</div>
</div>
</div>
</div></a></li>
</ul>
<p>However, all of that can actually detract from the time you have to actually make content. Therefore, if you do not have the time to keep up with maintenance routines, then WordPress might not be the best option for you.</p>
<h3 id="toc-zaax-wordpress-doesnt-perform-too-well">Con 3: WordPress Doesn't Perform Well</h3>
<p>WordPress is 19-year-old software, and let's face it, a lot has changed in the last 19 years.</p>
<p>Since the advent of WordPress, we have witnessed, and continue to witness, the coming of newer, bleeding-edge technologies and tech stacks which allow for the creation of faster, better-performing websites.</p>
<p>It's no secret that faster websites perform better than their slower counterparts. Google has even <a href="https://themarketingintrovert.com/website-page-speed/">made it clear</a> that they consider loading speed as an important metric for ranking a site.</p>
<p>On average, most WordPress websites today are slower than websites built with modern tech stacks and frameworks. For example, a website created using a modern CMS tool like Squarespace is likely to outperform the average WordPress site.</p>
<p>However, this is not to say that all WordPress sites are slow. After all, there are many plugins that you can install to optimize your site's speed and performance. But that's the point: you have to install additional plugins; this will eventually lead to the problem of maintainability which I explained in the last section.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/why-is-my-wordpress-site-so-slow-and-how-to-fix-it--cms-37184"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/37184/preview_image/turtle-goes-slowly-in-the-sand-with-its-protective-SWDKDAS.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">Why Is My WordPress Site So Slow? (And How to Fix It)</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/profiles/21267/profileImage/PatrickB.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/profiles/21267/profileImage/PatrickB.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/profiles/21267/profileImage/PatrickB.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/profiles/21267/profileImage/PatrickB.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-c]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-09-15T13:00:44+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Fix the &#8220;There Has Been a Critical Error in Your Website&#8221; Error in WordPress]]></title>
      <link>//shineyrock.com/blog/read/how-to-fix-the-there-has-been-a-critical-error-in-your-website-error-i</link>
      <guid>https://shineyrock.com/blog/read/how-to-fix-the-there-has-been-a-critical-error-in-your-website-error-i#When:12:59:43Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="io9e">
<p>As a WordPress site owner, your site might occasionally suffer downtime caused by one or many critical errors in WordPress. When that happens, you'll see the dreaded error message which says, “There has been a critical error on your website” when you try to log in or view the site.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="870px" height="369px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="650px" height="279px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="380px" height="168px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x">
<figcaption>Critical Error Message in WordPress</figcaption>
</figure>
<p>With this message, WordPress is basically telling you that there is a fatal error on your website. During this period, the site will remain inaccessible to visitors, and you may be blocked from accessing the admin panel.</p>
<p>Fortunately, this error is easy to resolve, and in this article, we'll go over some possible fixes for the WordPress critical error. First, let's take a look at why this error might occur in the first place.</p>
<h2 id="causes-of-the-there-has-been-a-critical-error-in-your-website-error toc-z4oo-causes-of-the-there-has-been-a-critical-error-in-your-website-error">Causes of the "There Has Been a Critical Error in Your Website" Error</h2>
<p>The critical website error in WordPress can be caused by one or several things, but unfortunately, the error text is too vague to provide any idea of what exactly went wrong with your site. Therefore, it's up to you to figure out the reason behind it.</p>
<p>If you encounter this error while setting up WordPress for the first time, then it's very likely that you either specified the wrong database information or added an inaccessible database. In this case, you'll have to set your correct database details in the <strong>wp-config.php</strong> file of your WordPress installation.</p>
<p>Aside from setting the wrong database information, the critical WordPress error can also result from the following issues:</p>
<ul>
<li>corrupted database</li>
<li>poor hosting provider</li>
<li>lagging or overburdened web server</li>
<li>corrupted website cache or PHP code (including plugins and themes)</li>
<li>server file corruption</li>
<li>other server-related issues</li>
</ul>
<p>To help in fixing the issue, WordPress detects when a critical error happens and sends an email notification to the administrator's email address. This email contains the error details and a link for logging in to the site dashboard in recovery mode.</p>
<p>Note that, sometimes, this email might get sent to the spam folder. Therefore, be sure to check there if you don't find it in your main inbox. If you don't get the email at all, then you'll have to locate the issue yourself and fix it.</p>
<h2 id="how-to-fix-the-there-has-been-a-critical-error-on-your-website-error- toc-vair-how-to-fix-the-there-has-been-a-critical-error-on-your-website-error">How to Fix the “There Has Been a Critical Error on Your Website” Error</h2>
<p>Fixing the error requires you to know what caused it in the first place. In the notification email sent by WordPress, you'll be shown the corrupted PHP file(s) and even the line of code to correct. However, if you didn't get this message, don't worry.</p>
<p>Below are eight methods of resolving critical errors in your WordPress site. Click on the link below to skip to a particular section:</p>
</div><div data-content-block-type="TableOfContents" class="content-block content-block-tableofcontents" id="ilje"><ul class="visual-toc-list toc-ordered-list visual-toc__regular-theme div-container visual-toc-list__overflow" start="0">
<div class="visual-toc-column div-container">
<li class="toc-item-title"><a href="#toc-nn74-deactivate-your-site-plugins"><span class="visual-toc__heading-title content-container">Deactivate Your Site Plugins</span></a></li>
<li class="toc-item-title"><a href="#toc-b4hf-check-the-error-logs"><span class="visual-toc__heading-title content-container">Check the Error Logs</span></a></li>
<li class="toc-item-title"><a href="#toc-ec4m-return-to-a-default-theme"><span class="visual-toc__heading-title content-container">Return to a Default Theme</span></a></li>
<li class="toc-item-title"><a href="#toc-5viu-restore-your-website-from-the-most-recent-backup-copy"><span class="visual-toc__heading-title content-container">Restore Your Website From the Most Recent Backup Copy</span></a></li>
</div>
<div class="visual-toc-column div-container">
<li class="toc-item-title"><a href="#toc-h4ld-enable-debug-mode-for-wordpress"><span class="visual-toc__heading-title content-container">Enable Debug Mode for WordPress</span></a></li>
<li class="toc-item-title"><a href="#toc-x6h7-raise-the-upper-limit-for-upload-file-size"><span class="visual-toc__heading-title content-container">Raise the Upper Limit for Upload File Size</span></a></li>
<li class="toc-item-title"><a href="#toc-aobl-clear-your-site-cache"><span class="visual-toc__heading-title content-container">Clear Your Site Cache</span></a></li>
<li class="toc-item-title"><a href="#toc-1m68-upgrade-your-php-version"><span class="visual-toc__heading-title content-container">Upgrade Your PHP Version</span></a></li>
</div>
</ul></div><div data-content-block-type="Wysi" id="ie3h" class="content-block-wysi content-block">
<h3 id="toc-nn74-deactivate-your-site-plugins">
<span class="sectionnum">1.</span> Deactivate Your Site Plugins</h3>
<p>Corrupt plugins are one of the most common causes of critical website errors in WordPress. If the WordPress critical error occurred just after you installed a plugin, then you'll need to deactivate that particular plugin and see what happens after that.</p>
<p>You can deactivate a plugin from the <strong>Plugins</strong> area in your WordPress admin panel. But, in the event that you're blocked from accessing the back-end, you'll have to deactivate the plugins manually.</p>
<p>You can find all the plugins used in your site by navigating to <strong>wp-content &gt; plugins</strong> from your WordPress site's root directory.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="870px" height="320px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/plugins.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="650px" height="243px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/plugins.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="380px" height="147px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/plugins.png 2x">
<figcaption>Plugin directory</figcaption>
</figure>
<p>There, all you need to do is rename the plugin. This ensures that WordPress loads without the problematic plugin when you next restart your WordPress site, which should get rid of the error.</p>
<p>If you're not exactly sure which plugin is responsible, you can just rename them one by one until you find the culprit.</p>
<p>For hosted WordPress sites, you'll need to log in using FTP. Consult your hosting provider for information on how to do that.</p>
<h3 id="toc-b4hf-check-the-error-logs">
<span class="sectionnum">2.</span> Check the Error Logs</h3>
<p>Another method for checking the underlying cause of the critical error is by inspecting the <strong>error_log</strong> file, which stores PHP error information on your WordPress site. You can find this file within the <strong>wp-content</strong> folder of your WordPress installation.</p>
<p>The file lists all the errors in your WordPress site, as well as the time that each of them occurred. In addition, each error has detailed information about the responsible source file and even the line of code you'll need to fix.</p>
<h3 id="toc-ec4m-return-to-a-default-theme">
<span class="sectionnum">3.</span> Return to a Default Theme</h3>
<p>Themes are responsible for the look and feel of WordPress websites. Because they form the foundation of your site, you're very likely to get a critical error if there are conflicts in the PHP code powering your site's theme.</p>
<p>To check if a theme is responsible for your WordPress error, switch the current theme to a default one such as Twenty Twenty. If you can access the admin panel, go to <strong>Appearance &gt; Themes</strong> and search for a default theme to use.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="870px" height="502px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="650px" height="377px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="380px" height="224px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x">
<figcaption>Twenty Twenty Theme</figcaption>
</figure>
<p>If you don’t have access to the admin panel, you'll need to manually delete the theme folder in <strong>wp-content &gt; themes</strong>. But before you do that, make sure that your site is backed up so you don't end up permanently losing your theme files.</p>
<h3 id="toc-5viu-restore-your-website-from-the-most-recent-backup-copy">
<span class="sectionnum">4.</span> Restore Your Website From the Most Recent Backup Copy</h3>
<p>The mere possibility of your WordPress site suffering a critical error is a good enough reason for you to regularly back up your site. Restoring a recent backup may be all you need to do to get your website working again in the shortest time possible.</p>
<p>The process of restoring a backup depends on how the backup was made. If you used a backup plugin like <a href="https://updraftplus.com/">UpdraftPlus</a>, navigate to the backup plugin’s panel and find the restore functionality. The interface will differ depending on the plugin you're using, but generally, you're just required to select a backup file to restore the site.</p>
<p>If you're using a hosting platform which provides regular backups, you should be able to restore your website from the hosting dashboard or admin panel.</p>
<h3 id="toc-h4ld-enable-debug-mode-for-wordpress">5. Enable Debug Mode for WordPress</h3>
<p>In debug mode, WordPress is able to automatically detect PHP errors in either the main software or in the themes and plugins used on the site.</p>
<p>To enable debug mode in your WordPress site, open the <strong>wp-config.php</strong> file with a text editor or IDE and include the following code at the bottom of the file:</p>
<pre class="noskimlinks noskimwords"><code><span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG'</span>, <span class="hljs-literal">true</span> );

<span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG_DISPLAY'</span>, <span class="hljs-literal">false</span> );

<span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG_LOG'</span>, <span class="hljs-literal">true</span> );
</code></pre>
<p>The first setting above is what actually turns on debug mode on your site. The rest just defines how the logs will be shown.</p>
<p>Save the file and restart your website. Errors will be added to the log in a file called <strong>debug.log</strong>, which you can find in the <strong>wp-content </strong>folder. Inspect the logs and try to figure out the theme or plugin responsible for the error.</p>
<p>Make sure to remove these lines of code when you're done with debugging.</p>
<h3 id="toc-x6h7-raise-the-upper-limit-for-upload-file-size">6. Raise the Upper Limit for Upload File Size</h3>
<p>If you get the critical error message when attempting to upload a file to WordPress, it's probably because the maximum upload file size is too small. In that case, you can fix the issue by increasing the limit.</p>
<p>You should always first compare the current maximum upload size to the size of the file you want to upload. The maximum size is shown on the <strong>Media &gt; Add</strong> page, just beneath the file upload section.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="870px" height="515px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="650px" height="387px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="380px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x">
<figcaption>Checking maximum file size</figcaption>
</figure>
<p>To increase the limit, open the <strong>wp-config.php</strong> file with a text editor and set the new maximum upload size in <code>ini_set()</code> as shown below:</p>
<pre class="noskimlinks noskimwords"><code><span class="hljs-selector-tag">ini_set</span>(<span class="hljs-string">'upload_max_size'</span> , <span class="hljs-string">'256M'</span> );
<span class="hljs-selector-tag">ini_set</span>(<span class="hljs-string">'post_max_size'</span>,<span class="hljs-string">'256M'</span>);</code></pre>
<p>On the line above, we also increase the maximum size for text processing.</p>
<h3 id="toc-aobl-clear-your-site-cache">7. Clear Your Site Cache</h3>
<p>Caching helps your website to load faster by temporarily storing important and frequently used data. However, as data accumulates, it's possible for the cache to get corrupted. When this happens, you'll get a critical error on your site.</p>
<p>This problem can be resolved by clearing the cache. All the stale data will be deleted, and your site should start working again.</p>
<p>If you're using a plugin like <a href="https://wordpress.org/plugins/w3-total-cache/">W3 Total Cache</a>, go to the plugin's panel in your WordPress dashboard and look for the functionality for clearing the cache. You may need to log in using the link in WordPress's email in order to access your site's admin panel.</p>
<h3 id="toc-1m68-upgrade-your-php-version">8. Upgrade Your PHP Version</h3>
<p>Using an old version of PHP is a common cause of critical errors in a WordPress site. For this reason, you should always use the latest stable version of PHP for your WordPress site. Currently, that's between PHP 7.4 and 8.0.</p>
<p>Stable versions are not prone to errors like the older versions (PHP 5.x). You also don't have to worry much about plugin and theme compatibilities. If you're on an old PHP version, upgrade it to PHP 7.4 or higher. But before you do that, make sure you have backed up your website.</p>
<p>In most hosts, you can upgrade PHP from the hosting dashboard.</p>
<h2 id="summary toc-fppi-summary">Summary</h2>
<p>The WordPress critical error is one of the most common errors in WordPress, and fortunately, it's very easy to resolve. In this article, we looked at several ways to troubleshoot this error and bring your website back to life.</p>
<p>To briefly recap, they are as follows:</p>
<ul>
<li>Deactivate your site plugins</li>
<li>Check the error logs</li>
<li>Return to a default theme</li>
<li>Restore your website from the most recent backup copy</li>
<li>Enable debug mode for WordPress</li>
<li>Raise the upper limit for upload file size</li>
<li>Clear your site cache</li>
<li>Upgrade your PHP version</li>
</ul>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-09-12T12:59:43+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How To Fix  The &#8220;There Has Been A Critical Error in Your Website&#8221; Error in WordPress]]></title>
      <link>//shineyrock.com/blog/read/how-to-fix-the-there-has-been-a-critical-error-in-your-website-error-in-wor</link>
      <guid>https://shineyrock.com/blog/read/how-to-fix-the-there-has-been-a-critical-error-in-your-website-error-in-wor#When:12:59:43Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="io9e">
<p>As a WordPress site owner, your site might occasionally suffer downtime caused by one or many critical errors in WordPress. When that happens, you'll see the dreaded error message which says, “There has been a critical error on your website” when you try to log in or view the site.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="870px" height="369px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="650px" height="279px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/wp_error.png" alt="Critical Error Message in WordPress" loading="lazy" width="380px" height="168px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/wp_error.png 2x">
<figcaption>Critical Error Message in WordPress</figcaption>
</figure>
<p>With this message, WordPress is basically telling you that there is a fatal error on your website. During this period, the site will remain inaccessible to visitors and you may be blocked from accessing the admin panel.</p>
<p>Fortunately, this error is easy to resolve, and in this article, we'll go over the possible fixes for the WordPress critical error. First, let's take a look at why this error might occur in the first place.</p>
<h2 id="causes-of-the-there-has-been-a-critical-error-in-your-website-error toc-z4oo-causes-of-the-there-has-been-a-critical-error-in-your-website-error">Causes of the "There Has Been A Critical Error in Your Website" Error</h2>
<p>The Critical Website Error in WordPress can be caused by one or several things, but unfortunately, the error text is too vague to provide any idea of what exactly went wrong with your site. Therefore, it's up to you to figure out the reason behind it.</p>
<p>If you encounter this error while setting up WordPress for the first time, then it's very likely that you either specified the wrong database information or added an inaccessible database. In this case, you'll have to set your accurate database details inside the <strong>wp-config.php</strong> file of your WordPress installation.</p>
<p>Aside from setting wrong database information, the critical WordPress error can also result from the following issues:</p>
<ul>
<li>corrupted database</li>
<li>poor hosting provider</li>
<li>lagging or overburdened web server</li>
<li>corrupted website cache or PHP code (including plugins and themes)</li>
<li>server file corruption</li>
<li>other server-related issues</li>
</ul>
<p>To help in fixing the issue, WordPress detects when a critical error happens and sends an email notification to the administrator's email address. This email contains the error details and a link for logging into the site dashboard in recovery mode.</p>
<p>Note that, sometimes, this email might get sent to the spam folder. Therefore, be sure to check there if you don't find it in your main inbox. If you don't get the email at all, then you'll have to locate the issue yourself and fix it.</p>
<h2 id="how-to-fix-the-there-has-been-a-critical-error-on-your-website-error- toc-vair-how-to-fix-the-there-has-been-a-critical-error-on-your-website-error">How to Fix the “There Has Been a Critical Error on Your Website” Error?</h2>
<p>Fixing the error requires you to know what caused it in the first place. In the notification email sent by WordPress, you'll be shown the corrupted PHP file(s) and even the line of code to correct. However, if you didn't get this message, do not worry.</p>
<p>Below are eight methods of resolving critical errors in your WordPress site. Click on the link below to skip to a particular section:</p>
</div><div data-content-block-type="TableOfContents" class="content-block content-block-tableofcontents" id="ilje"><ul class="visual-toc-list toc-ordered-list visual-toc__regular-theme div-container visual-toc-list__overflow" start="0">
<div class="visual-toc-column div-container">
<li class="toc-item-title"><a href="#1-deactivate-your-site-plugins%20toc-nn74-deactivate-your-site-plugins"><span class="visual-toc__heading-title content-container">Deactivate Your Site Plugins</span></a></li>
<li class="toc-item-title"><a href="#2-check-the-error-logs%20toc-b4hf-check-the-error-logs"><span class="visual-toc__heading-title content-container">Check the Error Logs</span></a></li>
<li class="toc-item-title"><a href="#3-return-to-a-default-theme%20toc-ec4m-return-to-a-default-theme"><span class="visual-toc__heading-title content-container">Return to a Default Theme</span></a></li>
<li class="toc-item-title"><a href="#4-restore-your-website-from-the-most-recent-backup-copy%20toc-5viu-restore-your-website-from-the-most-recent-backup-copy"><span class="visual-toc__heading-title content-container">Restore Your Website from the Most Recent Backup Copy</span></a></li>
</div>
<div class="visual-toc-column div-container">
<li class="toc-item-title" id="iospz"><a href="#5-enable-debug-mode-for-wordpress%20toc-h4ld-enable-debug-mode-for-wordpress"><span class="visual-toc__heading-title content-container">Enable Debug Mode for WordPress</span></a></li>
<li class="toc-item-title"><a href="#6-raise-the-upper-limit-for-upload-file-size%20toc-x6h7-raise-the-upper-limit-for-upload-file-size"><span class="visual-toc__heading-title content-container">Raise the Upper Limit for Upload File Size</span></a></li>
<li class="toc-item-title"><a href="#7-clear-your-site-cache%20toc-aobl-clear-your-site-cache"><span class="visual-toc__heading-title content-container">Clear Your Site Cache</span></a></li>
<li class="toc-item-title"><a href="#8-upgrade-your-php-version%20toc-1m68-upgrade-your-php-version"><span class="visual-toc__heading-title content-container">Upgrade Your PHP Version</span></a></li>
</div>
</ul></div><div data-content-block-type="Wysi" id="ie3h" class="content-block-wysi content-block">
<h3 id="1-deactivate-your-site-plugins toc-nn74-deactivate-your-site-plugins">
<span class="sectionnum">1.</span> Deactivate Your Site Plugins</h3>
<p>Corrupt plugins are one of WordPress's most common causes of critical website errors. If the WordPress critical error occurred just after you installed a plugin, then you'll need to deactivate that particular plugin and see what happens after that.</p>
<p>You can deactivate a plugin from the plugins area in your WordPress admin panel. But, in the event that you're blocked from accessing the back-end, you'll have to deactivate the plugins manually.</p>
<p>You can find all the plugins used in your site by navigating to <strong>wp-content &gt; plugins</strong> from your WordPress site's root directory.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="870px" height="320px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/plugins.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="650px" height="243px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/plugins.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/plugins.png" alt="Plugin directory" loading="lazy" width="380px" height="147px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/plugins.png 2x">
<figcaption>Plugin directory</figcaption>
</figure>
<p>There all you simply need to do is rename the plugin. This ensures that WordPress loads without the problematic plugin when next you restart your WordPress site, which should get rid of the error.</p>
<p>If you're not exactly sure which plugin is responsible, you can just rename them one by one until you find the culprit.</p>
<p>For hosted WordPress sites, you'll need to log in using FTP. Consult your hosting provider for information on how to do that.</p>
<h3 id="2-check-the-error-logs toc-b4hf-check-the-error-logs">
<span class="sectionnum">2.</span> Check the Error Logs</h3>
<p>Another method for checking the underlying cause of the critical error is by inspecting the <strong>error_log</strong> file, which stores PHP error information on your WordPress site. You can find this file within the <strong>wp-content</strong> folder of your WordPress installation.</p>
<p>The file lists all the errors in your WordPress site as well as the time that each of them occurred. In addition, each error has detailed information about the responsible source file and even the line of code you'll need to fix.</p>
<h3 id="3-return-to-a-default-theme toc-ec4m-return-to-a-default-theme">
<span class="sectionnum">3.</span> Return to a Default Theme</h3>
<p>Themes are responsible for the look and feel of WordPress websites. Because they form the foundation of your site, you're very likely to get a critical error if there are conflicts in the PHP code powering your site's theme.</p>
<p>To check if a theme is responsible for your WordPress error, switch the current theme to a default one such as Twenty Twenty. If you can access the admin panel, go to <strong>Appearance &gt; Themes</strong> and search for a default theme to use.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="870px" height="502px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="650px" height="377px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/themeimage.png" alt="Twenty Twenty Theme" loading="lazy" width="380px" height="224px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/themeimage.png 2x">
<figcaption>Twenty Twenty Theme</figcaption>
</figure>
<p>If you don’t have access to the admin panel, you'll need to manually delete the theme folder in <strong>wp-content &gt; themes</strong>. But before you do that, make sure that your site is backed up so you don't end up permanently losing your theme files.</p>
<h3 id="4-restore-your-website-from-the-most-recent-backup-copy toc-5viu-restore-your-website-from-the-most-recent-backup-copy">
<span class="sectionnum">4.</span> Restore Your Website from the Most Recent Backup Copy</h3>
<p>The mere possibility of your WordPress site suffering a critical error is a good enough reason for you to regularly back up your site. Restoring a recent backup can be all you need to get your website working again, in the shortest time possible.</p>
<p>The process of restoring to a backup depends on how the backup was made. If you used a backup plugin like <a href="https://updraftplus.com/">UpdraftPlus</a>, navigate to the backup plugin’s panel and find the restore functionality. The interface will differ depending on the plugin you're using, but generally, you're just required to select a backup file to restore the site.</p>
<p>If you're using a hosting platform which provides regular backups, you should be able to restore your website from the hosting dashboard or admin panel.</p>
<h3 id="5-enable-debug-mode-for-wordpress toc-h4ld-enable-debug-mode-for-wordpress">5. Enable Debug Mode for WordPress</h3>
<p>In debug mode, WordPress is able to automatically detect PHP errors in either the main software or in the themes and plugins used on the site.</p>
<p>To enable debug mode in your WordPress site, open the wp-config.php file with a text editor or IDE and include the following code at the bottom of the file:</p>
<pre class="noskimlinks noskimwords"><code><span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG'</span>, <span class="hljs-literal">true</span> );

<span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG_DISPLAY'</span>, <span class="hljs-literal">false</span> );

<span class="hljs-class"><span class="hljs-keyword">define</span></span>( <span class="hljs-string">'WP_DEBUG_LOG'</span>, <span class="hljs-literal">true</span> );
</code></pre>
<p>The first setting above is what actually turns on debug mode on your site. The rest just define how the logs will be shown.</p>
<p>Save the file and restart your website. Errors will be added to the log in a file debug.log, which you can find in the wp-content folder. Inspect the logs and try to figure out the theme or plugin responsible for the error.</p>
<p>Make sure to remove the like lines of code when you're done with debugging.</p>
<h3 id="6-raise-the-upper-limit-for-upload-file-size toc-x6h7-raise-the-upper-limit-for-upload-file-size">6. Raise the Upper Limit for Upload File Size</h3>
<p>If you get the critical error message when attempting to upload a file to WordPress, it's probably because the maximum upload file size is too small. In that case, you can fix the issue by increasing the limit.</p>
<p>You should always first compare the current maximum upload size to the size of the file you want to upload. The maximum size is shown to you at the <strong>Media &gt; Add</strong> page, just beneath the file upload section.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="870px" height="515px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="650px" height="387px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93228/image-upload/maxupload.png" alt="Checking maximum file size" loading="lazy" width="380px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93228/image-upload/maxupload.png 2x">
<figcaption>Checking maximum file size</figcaption>
</figure>
<p>To increase the limit, open the <strong>wp-config.php</strong> file with a text editor and set the new maximum upload size in <code>ini_set()</code> as shown below:</p>
<pre class="noskimlinks noskimwords"><code><span class="hljs-selector-tag">ini_set</span>(<span class="hljs-string">'upload_max_size'</span> , <span class="hljs-string">'256M'</span> );
<span class="hljs-selector-tag">ini_set</span>(<span class="hljs-string">'post_max_size'</span>,<span class="hljs-string">'256M'</span>);</code></pre>
<p>On the line above, we also increase the maximum size for text processing.</p>
<h3 id="7-clear-your-site-cache toc-aobl-clear-your-site-cache">7. Clear Your Site Cache</h3>
<p>Caching helps your website to load faster by temporarily storing important and frequently used data. However, as data accumulates, it's possible for the cache to get corrupted. When this happens, you'll get a critical error on your site.</p>
<p>This problem can be resolved by clearing the cache. All the stale data will be deleted and your site should start working again.</p>
<p>If you're using a plugin like <a href="https://wordpress.org/plugins/w3-total-cache/">W3 Total Cache</a>, go to the plugin's panel in your WordPress dashboard and look for the functionality for clearing the cache. You may need to log in using the link in WordPress's email in order to access your site's admin panel.</p>
<h3 id="8-upgrade-your-php-version toc-1m68-upgrade-your-php-version">8. Upgrade Your PHP Version</h3>
<p>Using an old version of PHP is a common cause of critical errors in a WordPress site. For this reason, you should always use the latest stable version of PHP for your WordPress site. Currently, that's between PHP 7.4 and 8.0.</p>
<p>Stable versions are not prone to errors like the older versions (PHP 5.x). You also don't have to worry much about plugin and theme compatibilities. If you're on an old PHP version, upgrade it to PHP 7.4 or higher. But before you do that, make sure you have backed up your website.</p>
<p>In most hosts, you can upgrade PHP from the hosting dashboard.</p>
<h2 id="summary toc-fppi-summary">Summary</h2>
<p>The WordPress critical error is one of the most common errors in WordPress, and fortunately, it's very easy to resolve. In this article, we looked at several ways to troubleshoot this error and bring your website back to life.</p>
<p>To briefly recap, they are as follows:</p>
<ul>
<li>Deactivate your site plugins</li>
<li>Check the error logs</li>
<li>Return to a default theme</li>
<li>Restore your website from the most recent backup copy</li>
<li>Enable Debug Mode for WordPress</li>
<li>Raise the Upper Limit for Upload File Size</li>
<li>Clear Your Site Cache</li>
<li>Upgrade Your PHP Version</li>
</ul>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-09-12T12:59:43+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Create a Privacy Policy Page in WordPress]]></title>
      <link>//shineyrock.com/blog/read/how-to-create-a-privacy-policy-page-in-wordpress</link>
      <guid>https://shineyrock.com/blog/read/how-to-create-a-privacy-policy-page-in-wordpress#When:12:43:43Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="i5yb">
<p>A Privacy Policy page is a page on a website where users and visitors can find a detailed statement about how the website or company collects, manages, and processes their personal information, such as name, address, email, #censored#, nationality, and so on. It states whether that information is kept confidential or is shared with third parties (and perhaps the circumstances for that).</p>
<p>In this tutorial, I'll show you how to add a privacy policy page to your WordPress website. To follow along, you'll need to have a WordPress installation on your local machine or a hosting provider.</p>
<h2 id="check-if-you-already-have-a-privacy-policy-page toc-4u43-check-if-you-already-have-a-privacy-policy-page">Check if You Already Have a Privacy Policy Page</h2>
<p>If you're using version 5.9 or a later version of WordPress, you should have the privacy policy page included by default. This might be true for other 5.x versions.</p>
<p>To check for it, log in to your WordPress admin dashboard and navigate to <strong>Pages &gt; All Pages</strong>. If the privacy page is included, you'll find it there.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png" alt="Accessing pages in the WP admin dashboard" loading="lazy" width="870px" height="494px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png" alt="Accessing pages in the WP admin dashboard" loading="lazy" width="650px" height="371px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png" alt="Accessing pages in the WP admin dashboard" loading="lazy" width="380px" height="221px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress.png 2x">
<figcaption>Accessing pages in the WP admin dashboard</figcaption>
</figure>
<p>But if you're using an older version of WordPress, chances are it won't be automatically included. If that's the case for you, read on to learn how to create one from scratch.</p>
<h2 id="create-a-new-privacy-policy-page-in-wordpress toc-73f5-create-a-new-privacy-policy-page-in-wordpress">Create a New Privacy Policy Page in WordPress</h2>
<p>In the sidebar, navigate to <strong>Settings &gt; Privacy.</strong></p>
<p>You'll have two different options for creating the Privacy Policy page:</p>
<ol>
<li>You can create a new page from scratch (option 1 in the image below).</li>
<li>You can simply select an existing page to be your privacy policy page (option 2 in the image below).</li>
</ol>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png" alt="Create new policy or use existing page" loading="lazy" width="870px" height="393px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png" alt="Create new policy or use existing page" loading="lazy" width="650px" height="297px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png" alt="Create new policy or use existing page" loading="lazy" width="380px" height="178px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93119/image-upload/Privacy_Hello_World_WordPress.png 2x">
<figcaption>Create a new policy or use an existing page</figcaption>
</figure>
<p>For this tutorial, we'll be creating one from scratch. To do this, click on <strong>Create</strong> to open the block editor.</p>
<p>In the block editor, you'll be provided with a template or rough outline of a privacy policy to edit. It's important that you rewrite it to suit your brand or business.</p>
<div class="callout-block">
<span class="callout-icon callout-tip"></span>
<div class="callout-message">
<strong>Tip:</strong> If you don't exactly know what to write and you don't want to spend money getting a lawyer to set one up for you, there are several websites where you can generate a privacy policy for free. For example, <a href="https://getterms.io/pricing">GetTerms</a> lets you create a privacy policy page which is tailored for your business. If you're going to be taking in different types of information such as cookies and emails, you'll need to go with one of the paid plans.</div>
</div>
<p>Once you're done writing and editing your privacy policy in the editor, click on the <strong>Publish</strong> button in the top-right corner to publish the page. You can also schedule it to be published at a later time or change the <strong>Visibility</strong> to <strong>Private</strong> if you don't want it to be visible to users.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png" alt="Publish the page" loading="lazy" width="870px" height="469px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png" alt="Publish the page" loading="lazy" width="650px" height="353px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png" alt="Publish the page" loading="lazy" width="380px" height="210px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93119/image-upload/Edit_Page_Privacy_Policy_Hello_World_WordPress.png 2x">
<figcaption>Publish the page</figcaption>
</figure>
<h2 id="change-the-permalink toc-omyq-change-the-permalink">Change the Permalink</h2>
<p>Often, when you create and publish a new privacy policy page (or any other page, for that matter), its URL will have a random number attached to it. Here's an example: <strong><a href="https://ubahthebuilder.tech/privacy-policy-2/">https://my-domain.com/privacy-policy-2/</a></strong>.</p>
<p>However, you might want the URL to be like this instead: <strong><a href="http://ubahthebuilder.tech/privacy-policy/">https://my-domain.com/privacy-policy/</a>.</strong></p>
<p>To edit the permalink, navigate to <strong>Settings &gt; Permalinks</strong> in your WordPress dashboard. Choose the <strong>Post name</strong> option under <strong>Common Settings</strong>.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png" alt="Edit Permalink" loading="lazy" width="870px" height="576px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png" alt="Edit Permalink" loading="lazy" width="650px" height="432px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png" alt="Edit Permalink" loading="lazy" width="380px" height="255px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93119/image-upload/Permalink_Settings_Hello_World_WordPress.png 2x">
<figcaption>Use Post name</figcaption>
</figure>
<p>Scroll down and click on <strong>Save Changes</strong>.</p>
<p>Now navigate to <strong>Pages &gt; All Pages</strong> and click <strong>Quick Edit</strong> on the Privacy Policy page whose URL you want to update. Under <strong>QUICK EDIT</strong>, simply remove the numbers from the <strong>Slug</strong> as I have done in the following image.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png" alt="Editing Permalink" loading="lazy" width="870px" height="327px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png" alt="Editing Permalink" loading="lazy" width="650px" height="248px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png" alt="Editing Permalink" loading="lazy" width="380px" height="150px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2776/posts/93119/image-upload/Pages_Hello_World_WordPress_1_.png 2x">
<figcaption>Editing Permalink</figcaption>
</figure>
<p>Click <strong>Update</strong> to save the changes. This will remove all numbers from the page's URL.</p>
<h2 id="conclusion toc-ex9h-conclusion">Conclusion</h2>
<p>I hope you found this tutorial helpful. We have many other articles about WordPress—<a href="https://code.tutsplus.com/categories/wordpress">check them out</a>!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-08-22T12:43:43+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[WordPress Website Maintenance Guide For Beginners]]></title>
      <link>//shineyrock.com/blog/read/wordpress-website-maintenance-guide-for-beginners</link>
      <guid>https://shineyrock.com/blog/read/wordpress-website-maintenance-guide-for-beginners#When:10:30:20Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="iqc6">
<p>If you bought a car and failed to maintain it for a long period of time, you'll definitely see a downturn in its performance. And If you continue the neglect the car, it will eventually break down completely.</p>
<p>The same rule applies to websites. If you fail to maintain your website, you'll deter people from visiting it. No one wants to use a poorly designed website that has broken links, is slow and insecure, can't submit a form, uses outdated plugin software, or constantly breaks down.</p>
<p>Fortunately, WordPress sites are easy to maintain. Routinely carrying out maintenance tasks on your website will ensure that your site is safe, secure and performing at the best of its capacity.</p>
<p>In this article, I'll cover ten crucial maintenance tasks that you should carry out regularly on your WordPress website, and how to do them. But before that, you'll need to know how often the maintenance should be carried out.</p>
<h2 id="how-regularly-should-i-perform-wordpress-maintenance-tasks- toc-5su5-how-regularly-should-i-perform-wordpress-maintenance-tasks">How Regularly Should I Perform WordPress Maintenance Tasks?</h2>
<p>Generally, WordPress sites that get a lot of traffic requires maintenance more frequently than sites with little traffic. The same rule applies to sites that with a lot of content as opposed to sites with little content.</p>
<p>To answer your question, you should implement the routine tasks from this article every two months if your site gets a lot of traffic, and every five months if your site has low traffic and content.</p>
<p>Now that we have that out of the way, let's take a look at the tasks you need to perform to maintain your WordPress site. Feel free to use the following links to jump to each task's section.</p>
</div><div data-content-block-type="TableOfContents" class="content-block content-block-tableofcontents"><ul class="visual-toc-list toc-ordered-list visual-toc__regular-theme div-container visual-toc-list__overflow" start="0">
<div class="visual-toc-column div-container">
<li class="toc-item-title"><a href="#1-open-and-inspect-the-website-on-a-browser%20toc-4mpl-open-and-inspect-the-website-on-a-browser"><span class="visual-toc__heading-title content-container">Open and Inspect The Website on a Browser</span></a></li>
<li class="toc-item-title"><a href="#2-backup-your-website-regularly%20toc-4c5y-backup-your-website-regularly"><span class="visual-toc__heading-title content-container">Backup Your Website Regularly</span></a></li>
<li class="toc-item-title"><a href="#3-change-and-update-your-passwords-frequently%20toc-udjt-change-and-update-your-passwords-frequently"><span class="visual-toc__heading-title content-container">Change And Update Your Passwords Frequently</span></a></li>
<li class="toc-item-title"><a href="#4-keep-your-website-updated%20toc-gzhi-keep-your-website-updated"><span class="visual-toc__heading-title content-container">Keep Your Website Updated</span></a></li>
<li class="toc-item-title"><a href="#5-clean-and-optimize-your-database%20toc-zte5-clean-and-optimize-your-database"><span class="visual-toc__heading-title content-container">Clean and Optimize Your Database</span></a></li>
</div>
<div class="visual-toc-column div-container">
<li class="toc-item-title"><a href="#6-optimize-your-images-for-a-quicker-page-load-time%20toc-1cag-optimize-your-images-for-a-quicker-page-load-time"><span class="visual-toc__heading-title content-container">Optimize Your Images for A Quicker Page Load Time</span></a></li>
<li class="toc-item-title"><a href="#7-install-and-use-an-audit-log-tool%20toc-h4if-install-and-use-an-audit-log-tool"><span class="visual-toc__heading-title content-container">Install and Use An Audit Log Tool</span></a></li>
<li class="toc-item-title"><a href="#8-turn-on-maintenance-mode%20toc-hlj6-turn-on-maintenance-mode"><span class="visual-toc__heading-title content-container">Turn On Maintenance Mode</span></a></li>
<li class="toc-item-title"><a href="#9-monitor-your-search-engine-optimization%20toc-ymsi-monitor-your-search-engine-optimization"><span class="visual-toc__heading-title content-container">Monitor Your Search Engine Optimization</span></a></li>
<li class="toc-item-title"><a href="#10-regularly-run-performance-tests%20toc-4bco-regularly-run-performance-tests"><span class="visual-toc__heading-title content-container">Regularly Run Performance Tests</span></a></li>
</div>
</ul></div><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="iqc6-2">
<h2 id="1-open-and-inspect-the-website-on-a-browser toc-4mpl-open-and-inspect-the-website-on-a-browser">
<span class="sectionnum">1.</span> Open and Inspect The Website on a Browser</h2>
<p>You're probably thinking that this should be an obvious thing to do, right? Unfortunately, it's not uncommon for WordPress site owners to either overlook testing the website on the browser or to carry out a very superficial test.</p>
<p>Most of the work you'll do in WordPress happens in the backend. But it is equally important to open your website on a web browser after you're done in the back-end to test if it works as intended. By doing this, you're very likely to spot obvious errors in the UI.</p>
<p>Here are some crucial activities to do when inspecting the website:</p>
<ul>
<li>
<strong>Go through the different pages on the website.</strong> See if all the pages are accessible. Find and fix all 404 errors on the site.</li>
<li>
<strong>Check for broken links.</strong> Click on the links and ensure that they're going to the right destinations. Fix broken links.</li>
<li>
<strong>Check if the site is responsive.</strong> Open the website using different devices (mobile phones, tablets, desktops, etc) and ensure that the site looks good on all of them. You can simulate these devices directly in your browser by using the built-in developer tools (click F12 to toggle it on Google Chrome)</li>
<li>
<strong>Inspect the images.</strong> Check that all the site's images are displayed and are shown properly (uses the right dimensions, has alt texts, etc)</li>
<li>
<strong>Interact with the UI elements and see if they're responding as intended.</strong> Test all your WordPress forms, hover on tooltips, check the dropdown menus to see if they animate properly and so on.</li>
</ul>
<p>Basically, go through the website and see if you can spot obvious errors in the UI.</p>
<h2 id="2-backup-your-website-regularly toc-4c5y-backup-your-website-regularly">
<span class="sectionnum">2.</span> Backup Your Website Regularly</h2>
<p>Even though most hosting providers implement regular backups for customers and even do a great job at it, you should also backup your site and own a copy of the backup just to be safe.</p>
<p>Though it's not common, it's still possible for a hosting company to go down or go completely out of business overnight. When this happens, there's a likelihood that customers will lose their entire website in the process. But if you own a copy of your site, you can easily move it to a new hosting provider without suffering any losses.</p>
<p><a href="https://updraftplus.com">UpdraftPlus</a> is a very free WordPress plugin for performing regular, automated backups. It allows you to upload your website copy to Dropbox, Google Drive or any other remote location of your choice. There are several other options for you to choose from.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-backup-your-wordpress-site--cms-34634"><div class="roundup-block__content-container">
<div class="roundup-block__preview">
<img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/34634/preview_image/download_pre.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/34634/preview_image/download_pre.jpg 2x">
</div>
<div class="roundup-block__content-meta">
<div class="roundup-block__content-title">How to Backup Your WordPress Site</div>
<div class="roundup-block__author-info">
<div class="roundup-block__author-profile-image">
<img class="roundup-block__author-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/265/profileImage/adi.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="" loading="lazy" width="420px" height="420px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/profiles/265/profileImage/adi.jpg 2x"><img class="roundup-block__author-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/profiles/265/profileImage/adi.jpg" alt="" loading="lazy" width="380px" height="380px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/profiles/265/profileImage/adi.jpg 2x">
</div>
<div class="roundup-block__author-meta">
<div class="roundup-block__author-name">Adi Purdila</div>
<div class="roundup-block__published-date">15 Mar 2021</div>
</div>
</div>
</div>
</div></a></li></ul>
<h2 id="3-change-and-update-your-passwords-frequently toc-udjt-change-and-update-your-passwords-frequently">
<span class="sectionnum">3.</span> Change And Update Your Passwords Frequently</h2>
<p>Poor, easy-to-guess passwords are one of the quickest ways that hackers can gain access to your WordPress website.</p>
<p>Here are some essential tips for creating secure passwords:</p>
<ul>
<li>Do not use personal information such as name, birthday or email</li>
<li>Make your passwords long</li>
<li>Make your passwords as meaningless as possible</li>
<li>Avoid using common words</li>
<li>Use a combination of letters, numbers, and characters.</li>
<li>Don't repeat passwords</li>
</ul>
<p>These rules also apply to application passwords for REST APIs.</p>
<h2 id="4-keep-your-website-updated toc-gzhi-keep-your-website-updated">
<span class="sectionnum">4.</span> Keep Your Website Updated</h2>
<p>Frequently update plugins, themes and even WordPress itself.</p>
<p>Every new version of WordPress comes with bug fixes, improvements and additional features that help with performance. While I don't recommend always upgrading to the latest version, since it might still be buggy and unstable, I definitely recommend that you use versions that are close to the latest version.</p>
<p>Keep in mind that a certain version of a plugin or theme might only be compatible with certain versions of WordPress. Therefore, before upgrading your plugin or theme, always check that the version that you're upgrading to is also compatible with your WordPress setup.</p>
<h2 id="5-clean-and-optimize-your-database toc-zte5-clean-and-optimize-your-database">
<span class="sectionnum">5.</span> Clean and Optimize Your Database</h2>
<p>All content used on your WordPress website site is stored inside the database. If your database is broken or filled with accumulated post trash, it'll negatively impact the speed and efficiency with which data is retrieved from the database.</p>
<p>Database optimization should be a part of your regular maintenance activity. There are serval plugins in WordPress for optimizing databases. <a href="https://wordpress.org/plugins/wp-optimize/">WP Optimize</a> is an all-in-one database cleaner tool that automatically carries out cleanup tasks in the database, from deleting corrupted data to clearing out accumulated post trash.</p>
<h2 id="6-optimize-your-images-for-a-quicker-page-load-time toc-1cag-optimize-your-images-for-a-quicker-page-load-time">
<span class="sectionnum">6.</span> Optimize Your Images for A Quicker Page Load Time</h2>
<p>Images are typically one of the heaviest assets in a website. As such, they have a considerable impact on the load time of a website.</p>
<p>You should always optimize your images to enable your website to load quicker. There are several free WordPress plugins for optimizing images. Feel free to read our other post on <a href="https://code.tutsplus.com/articles/wpcompress-tutorial--cms-34010">how to optimize images with WP Compress</a>.</p>
<h2 id="7-install-and-use-an-audit-log-tool toc-h4if-install-and-use-an-audit-log-tool">
<span class="sectionnum">7.</span> Install and Use An Audit Log Tool</h2>
<p>Your website's backend should have audit log tool for recording the important events that occur in WordPress such as publishing a post, replying to a comment or deleting a table in the database.</p>
<p>Frequently inspecting your logs will allow you to keep track of all the changes made to the website. You can spot mistakes made by yourself or a team member and correct them without your website having any downtime.</p>
<p>WordPress doesn't take logs by default but there are several plugins that you can install for that purpose, for example, <a href="https://wordpress.org/plugins/simple-history/">Simple History</a>. Once installed, the plugin will start taking logs of whatever changes that occur on your website and will show them on your WordPress dashboard.</p>
<h2 id="8-turn-on-maintenance-mode toc-hlj6-turn-on-maintenance-mode">
<span class="sectionnum">8.</span> Turn On Maintenance Mode</h2>
<p>To create a pleasant experience for your website users, it's recommended that you switch to maintenance mode when carrying out work on your website.</p>
<p>For example, if you're working on updating your website's theme, it's best to use maintenance mode to temporarily take the website offline while you or your team are making improvements.</p>
<p>There are several plugins for enabling maintenance mode in WordPress. One of them is called <a href="https://wordpress.org/plugins/wp-maintenance-mode/">WP Maintenance Mode</a>. This plugin lets you show a nice alert screen that tells your visitors that the site is currently under maintenance.</p>
<h2 id="9-monitor-your-search-engine-optimization toc-ymsi-monitor-your-search-engine-optimization">
<span class="sectionnum">9.</span> Monitor Your Search Engine Optimization</h2>
<p>Unless you do not want organic traffic, which is very unlikely, you'll definitely want to track your website's performance on Google's search rankings.</p>
<p>There is no shortage of WordPress plugins in the SEO department, but one of the household names is Yeast SEO. This plugin makes ranking your page so much easier. Once installed and enabled, it'll scan your content and advice you on how to optimize your pages and posts for them to be more visible in the search results.</p>
<p>Once a post follows the SEO guidelines that Yoast SEO provides, it'll go from a red light to a green light. After then, it's only a matter of time before your page ascends on Google's search rankings!</p>
<h2 id="10-regularly-run-performance-tests toc-4bco-regularly-run-performance-tests">
<span class="sectionnum">10.</span> Regularly Run Performance Tests</h2>
<p>As I mentioned at the beginning of this post, no one wants to spend time on a slow website. Slow websites don't do well in SEO as well.</p>
<p>Optimizing your website's performance should be a reoccurring task and not something you do just one time. It should happen for as long as you're adding new content, installing new plugins and updating the website theme.</p>
<p>For best results, feel free to read our post on <a href="https://webdesign.tutsplus.com/courses/wordpress-seo-without-plugins/lessons/site-performance">how to boost speed and performance on WordPress sites</a>.</p>
<h2 id="summary toc-m0yc-summary">Summary</h2>
<p>Regular maintenance of your WordPress site is crucial if you want users to trust it and to keep coming back to it.</p>
<p>In this article, we looked at several essential and effective WordPress maintenance tasks for WordPress websites.</p>
<p>To briefly recap, they are as follows:</p>
<ol>
<li>Open and Inspect The Website on a Browser</li>
<li>Backup Your Website Regularly</li>
<li>Change And Update Your Passwords Frequently</li>
<li>Keep Your Website Updated</li>
<li>Clean and Optimize Your Database</li>
<li>Optimize Your Images for A Quicker Page Load Time</li>
<li>Install and Use An Audit Log Tool</li>
<li>Turn On Maintenance Mode</li>
<li>Monitor Your Search Engine Optimization</li>
<li>Run Tests Regularly</li>
</ol>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-08-22T10:30:20+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How Long Does It Take to Learn JavaScript?]]></title>
      <link>//shineyrock.com/blog/read/how-long-does-it-take-to-learn-javascript1</link>
      <guid>https://shineyrock.com/blog/read/how-long-does-it-take-to-learn-javascript1#When:15:23:12Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="idm6">
<p>According to <a href="https://octoverse.github.com/" target="_blank" rel="noopener">"The State of the Octoverse" by GitHub</a>, the statistics show that JavaScript is the most popular language globally. It is a good investment to learn JavaScript for front-end or back-end programming.</p>
<h2>How Long Will It Take?</h2>
<p>In the book <em>Outliers</em> by Malcolm Gladwell, the 10,000 hours rule states that you need so many accumulated hours of practice to achieve mastery in any field. If you invest 10,000 hours in learning and practicing JavaScript, you will be a true master!</p>
<p>However, you can learn the basic concepts in a much shorter amount of time. You could even get started writing your first program today—take a look at the Hello World program below!</p>
<h2>Beginner JavaScript Concepts From Easy to Hard</h2>
<p>The technical concepts in JavaScript can be associated with different skill levels. Take a look at the concepts below and see where you stand in terms of skill level. Based on the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank" rel="noopener">Mozilla Developer Network, MDN Web Docs</a>, the basic technical concepts in JavaScript are:</p>
<h4>Language Fundamentals</h4>
<ul>
<li>variables</li>
<li>conditional statements</li>
<li>loops</li>
<li>functions</li>
<li>objects</li>
</ul>
<h4>Coding for the Web</h4>
<ul>
<li>events</li>
<li>asynchronous JavaScript</li>
<li>the Document Object Model</li>
<li>Web APIs</li>
</ul>
<h4>Frameworks and Libraries</h4>
<ul>
<li>client-side frameworks like React and Vue</li>
<li>connecting to REST APIs</li>
<li>server-side JavaScript with Node</li>
</ul>
<p>So if you are a beginner, set your sites on learning the beginner topics, one at a time. With our free online courses <a href="https://code.tutsplus.com/courses/how-to-become-a-web-developer" target="_self">How to Become a Web Developer</a> and <a href="https://code.tutsplus.com/courses/javascript-fundamentals" target="_self">Modern JavaScript Fundamentals</a>, you can start learning these concepts today.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/how-to-become-a-web-developer"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><div class="roundup-block__primary-category topic-code">Web Development</div>
<div class="roundup-block__content-title">How to Become a Web Developer</div>
<div class="roundup-block__author">Jeremy McPeak</div></a>
</li>
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/javascript-fundamentals"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">Modern JavaScript Fundamentals</div>
<div class="roundup-block__author">Dan Wellman</div></a>
</li>
</ul>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;t=0">
            <iframe data-src="https://www.youtube.com/embed/cVD0uZJFnn4?rel=0&amp;start=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;feature=emb_title" target="_blank">
              How to Become a Web Developer
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/cVD0uZJFnn4/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<h2>Hello World Code Example</h2>
<p>You can write your first line of JavaScript code right now! Just press <strong>Control-Shift-J </strong>in Chrome, <strong>Control-Shift-I</strong> in Firefox, or <strong>Option-Command-C</strong> in Safari. This will bring up the JavaScript console. Now type the following line of code and press <strong>Enter</strong>.</p>
<pre class="brush: javascript noskimlinks noskimwords">alert("Hello World");</pre>
<p>This is the traditional first program to create when you're learning any new programming language.</p>
<p>As you're learning—or even if you're an expert programmer—the JavaScript console is a great place to try out new concepts or ideas.</p>
<h2>Factors Affecting How Long It Takes to Learn JavaScript</h2>
<h3>Is It Your First Computer Language?</h3>
<p>If you already know another language, it will be much easier to learn JavaScript—the fundamental concepts of computer programming will already be familiar to you. Translating what you know to JavaScript won't be too hard. However, it is more challenging to learn JavaScript as a first language because you'll be learning to think like a coder at the same time.</p>
<p>However, many people choose JavaScript as their first programming language—it's very popular, and there are almost limitless free learning resources online.</p>
<h3>What Is Your Level of Dedication?</h3>
<p>Learning how to program as a complete beginner is a lot of work, and it takes a real commitment to achieve mastery of JavaScript. You should expect to struggle and meet many challenges as you practice.</p>
<p>It's best to come up with a timetable. Even a few minutes of practice every day will keep you in the learning zone. Whatever your schedule, don't go too long without practicing or your new skills will start to fade.</p>
<h3>Do You Want to Be a Hobbyist or a Professional Programmer?</h3>
<p>If you are just coding for a hobby, there is no real end to your learning. Every project is a challenge and an opportunity to learn. However, if you want to work as a professional, you'll need to skill up to the point that you can work at the requisite level—and that might take more time.</p>
<h3>What Is Your Learning Style?</h3>
<p>You can find a huge volume of learning resources on JavaScript available on the internet, and they come in various forms. Each form has its pros and cons. For example, books tend to be more in-depth, going deeper into explaining the different concepts, but they lack practicality and they go out of date more quickly. </p>
<p>Videos, on the other hand, are more focused on results and action, and they encourage the viewer to get involved in the coding process. By getting involved, you are introduced to the nuances that you may not get to learn from a book. </p>
<p>Video-sharing platforms like YouTube have made it possible to access an abundance of recent video lessons on JavaScript from different online educators.</p>
<p>In addition, these tutors all have their own unique ways of teaching and explaining the various programming concepts to their audience.</p>
<p>To help speed up the learning process of JavaScript, it's better to identify and go with the style that helps you understand better—be it books, videos, courses, a particular tutor, and so on.</p>
<h2>Free JavaScript Education</h2>
<p>There are great free JavaScript courses at Code Tuts+. Check out these for starters:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/how-to-become-a-web-developer"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><div class="roundup-block__primary-category topic-code">Web Development</div>
<div class="roundup-block__content-title">How to Become a Web Developer</div>
<div class="roundup-block__author">Jeremy McPeak</div></a>
</li>
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/javascript-fundamentals"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">Modern JavaScript Fundamentals</div>
<div class="roundup-block__author">Dan Wellman</div></a>
</li>
</ul>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;t=0">
            <iframe data-src="https://www.youtube.com/embed/cVD0uZJFnn4?rel=0&amp;start=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;feature=emb_title" target="_blank">
              How to Become a Web Developer
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/cVD0uZJFnn4/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<h2>Summary</h2>
<p>In this article, we looked at how much learning you need for different skill levels. More results will come with more time invested.</p>
<p>JavaScript can be easy if you want to learn only the basics. Or you can spend a decade mastering its complexities.</p>
<p>Good luck, and have fun learning!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-04-12T15:23:12+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How Long Does it Take to Learn JavaScript]]></title>
      <link>//shineyrock.com/blog/read/how-long-does-it-take-to-learn-javascript</link>
      <guid>https://shineyrock.com/blog/read/how-long-does-it-take-to-learn-javascript#When:15:23:12Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="idm6">
<p>According to <a href="https://octoverse.github.com/" target="_blank" rel="noopener">"The State of the Octoverse" by GitHub</a>, the statistics show that JavaScript is the most popular language globally. It is good investment to learn JavaScript for front-end or back-end programming.</p>
<h2>How Long Will it Take?</h2>
<p>In the book Outliers by Malcolm Gladwell, there is the 10,000 hours rule. This rule states that there need to be so many accumulated hours of practice for achieving mastery in any field. If you invest 10,000 hours in learning and practicing JavaScript, you will be a true master!</p>
<p>However, you can learn the basic concepts in a much shorter amount of time. You could even get started writing your first program today—take a look at the Hello World program below!</p>
<h2>Beginner JavaScript Concepts from Easy to Hard</h2>
<p>The technical concepts in JavaScript can be associated with different skill levels. Take a look at the concepts below and see where you stand in terms of skill level. Based on the <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript" target="_blank" rel="noopener">Mozilla Developer Network, MDN Web Docs</a>, the basic technical concepts in JavaScript are:</p>
<h4>Language Fundamentals</h4>
<ul>
<li>variables</li>
<li>conditional statements</li>
<li>loops</li>
<li>functions</li>
<li>objects</li>
</ul>
<h4>Coding for the Web</h4>
<ul>
<li>events</li>
<li>asynchronous JavaScript</li>
<li>the Document Object Model</li>
<li>Web APIs</li>
</ul>
<h4>Frameworks and Libraries</h4>
<ul>
<li>client-side frameworks like React and Vue</li>
<li>connecting to REST APIs</li>
<li>server-side JavaScript with Node</li>
</ul>
<p>So if you are a beginner, set your sites on learning the beginner topics, one at a time. With our free online courses How to Become a Web Developer, or Modern JavaScript Fundamentals, you can start learning these concepts today.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/how-to-become-a-web-developer"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><div class="roundup-block__primary-category topic-code">Web Development</div>
<div class="roundup-block__content-title">How to Become a Web Developer</div>
<div class="roundup-block__author">Jeremy McPeak</div></a>
</li>
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/javascript-fundamentals"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">Modern JavaScript Fundamentals</div>
<div class="roundup-block__author">Dan Wellman</div></a>
</li>
</ul>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;t=0">
            <iframe data-src="https://www.youtube.com/embed/cVD0uZJFnn4?rel=0&amp;start=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;feature=emb_title" target="_blank">
              How to Become a Web Developer
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/cVD0uZJFnn4/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<h2>Hello World Code Example</h2>
<p>You can write your first line of JavaScript code right now! Just press <strong>Ctrl + Shift + J </strong>in Chrome, <strong>Ctrl + Shift + I</strong> in Firefox, or <strong>Option + Command + C</strong> in Safari. This will bring up the JavaScript console. Now type the following line of code and press <strong>Enter</strong>.</p>
<pre class="brush: javascript noskimlinks noskimwords">alert("Hello World");</pre>
<p>This is the traditional first program to create when you're learning any new programming language.</p>
<p>As you're learning—or even if you're an expert programmer—the JavaScript console is a great place to try out new concepts or ideas.</p>
<h2>Factors Affecting How Long it Takes to Learn JavaScript</h2>
<h3>It it Your First Computer Language?</h3>
<p>If you already know another language, it will be much easier to learn JavaScript—the fundamental concepts of computer programming will already be familiar to you. Translating what you know to JavaScript won't be too hard. However, it is more challenging to learn JavaScript as a first language because you'll be learning to think like a coder at the same time.</p>
<p>However, many people choose JavaScript as their first programming language—it's very popular and there are almost limitless free learning resources online.</p>
<h3>What is Your Level of Dedication?</h3>
<p>Learning how to program as a complete beginner is a lot of work, and it takes a real commitment to achieve mastery of JavaScript. You should expect to struggle and meet many challenges as you practice.</p>
<p>It's best to come up with a timetable. Even a few minutes of practice every day will keep you in the learning zone. Whatever your schedule, don't go too long without practicing or your new skills will start to fade.</p>
<h3>Will You be Hobby or Professional Programming?</h3>
<p>If you are just coding for a hobby, there is no real end to your learning. Every project is a challenge and an opportunity to learn. However, if you want to work as a professional, you'll need to skill up to the point that you can work at the requisite level—and that might take more time.</p>
<h3>What is Your Learning Style?</h3>
<p>There are a huge volume of learning resources on JavaScript available on the internet and they come in various forms. Each form has its pros and cons. For example, books tend to be more in-depth, going deeper into explaining the different concepts, but they lack practicality and they go out of date more quickly. </p>
<p>Videos, on the other hand, are more result and action oriented and they encourage the viewer to get involved in the coding process. By getting involved, you are introduced to the nuances that you may not get to learn from a book. </p>
<p>Video-sharing platforms like YouTube have made it possible to access an abundance of recent video lessons on JavaScript from different online educators.</p>
<p>In addition, these tutors all have their own unique ways of teaching and explaining the various programming concepts to their audience.</p>
<p>To help speed up the learning process of JavaScript, it's better to identify and go with the style that helps you understand better—be it books, videos, courses, a particular tutor and so on.</p>
<h2>Free JavaScript Education</h2>
<p>There are great, free JavaScript courses at Code Tuts+. Check out these for starters:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/how-to-become-a-web-developer"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/711/preview_image/understanding-web-dev-1.png 2x"><div class="roundup-block__primary-category topic-code">Web Development</div>
<div class="roundup-block__content-title">How to Become a Web Developer</div>
<div class="roundup-block__author">Jeremy McPeak</div></a>
</li>
<li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/javascript-fundamentals"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/71/courses/544/preview_image/js400.jpg" alt="" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/71/courses/544/preview_image/js400.jpg 2x"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">Modern JavaScript Fundamentals</div>
<div class="roundup-block__author">Dan Wellman</div></a>
</li>
</ul>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;t=0">
            <iframe data-src="https://www.youtube.com/embed/cVD0uZJFnn4?rel=0&amp;start=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=cVD0uZJFnn4&amp;feature=emb_title" target="_blank">
              How to Become a Web Developer
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/cVD0uZJFnn4/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<h2> </h2>
<h2>Summary</h2>
<p>In this article, we looked at how much learning you need for different skill levels. More results will come with more time invested.</p>
<p>JavaScript can be easy if you want to learn only the basics. Or you can spend a decade mastering its complexities.</p>
<p>Good luck and have fun learning!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-04-12T15:23:12+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[The Best Way to Deep Copy an Object in JavaScript]]></title>
      <link>//shineyrock.com/blog/read/the-best-way-to-deep-copy-an-object-in-javascript</link>
      <guid>https://shineyrock.com/blog/read/the-best-way-to-deep-copy-an-object-in-javascript#When:12:25:06Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="i5da">
<p>In this article, you'll learn what shallow and deep copying are, and the best way to deep copy an object in JavaScript.</p>
<h2>Shallow Copying vs. Deep Copying</h2>
<p>In a reassignment operation involving primitive data types such as strings, numbers, and booleans, the original variable is <strong>copied</strong> by JavaScript. </p>
<p>For example, consider the following code:</p>
<pre class="brush: javascript noskimlinks noskimwords">let x = 3
y = x //  x is copied into y

y++ // y is incremented

console.log(y) // now 4
console.log(x) // still 3
</pre>
<p>In this case, the value <code>3</code> is copied into <code>y</code>, and then <code>x</code> is disconnected from <code>y</code>. So mutating <code>y</code> does not affect <code>x</code>.</p>
<p>Conversely, with non-primitive data types like arrays and objects, only a reference to the values is passed. So when the copy is mutated, the original also gets mutated. This is also known as <strong>shallow copying</strong>.</p>
<pre class="brush: javascript noskimlinks noskimwords">let adam = {name: "Adam"};

let jason = adam;
jason.name = "Jason";

console.log(adam.name);  // outputs "Jason"
console.log(jason.name); // outputs "Jason"</pre>
<p>If we instead want to copy an object so that we can modify it without affecting the original object, we need to make a <strong>deep copy</strong>. </p>
<h2>5 Ways to Deep Copy Objects in JavaScript</h2>
<p>In JavaScript, we can perform a copy on objects using the following methods:</p>
<table>
<tbody>
<tr>
<td><strong>Method</strong></td>
<td><strong>Pros</strong></td>
<td><strong>Cons</strong></td>
</tr>
<tr>
<td><a href="#shallow">shallow copy with <code>=</code></a></td>
<td>clear and direct, the default</td>
<td>only shallow copies objects</td>
</tr>
<tr>
<td><a href="#json"><code>JSON.stringify()</code> and <code>JSON.parse()</code></a></td>
<td>deep copies nested objects</td>
<td>doesn't copy functions</td>
</tr>
<tr>
<td><a href="#object-assign">Object.assign()</a></td>
<td>copies the immediate members of an object—including functions</td>
<td>doesn't deep copy nested objects</td>
</tr>
<tr>
<td><a href="#spread">the <code>...</code> spread operator</a></td>
<td>simple syntax, the preferred way to copy an object</td>
<td>doesn't deep copy nested objects</td>
</tr>
<tr>
<td><a href="#lodash">Lodash <code>cloneDeep()</code></a></td>
<td>clones nested objects including functions</td>
<td>adds an external dependency to your project</td>
</tr>
</tbody>
</table>
<p>These methods all have their pros and cons. Let's take a closer look at each of them.</p>
<h3>
<a name="shallow"></a>Shallow Copy an Object by Assignment</h3>
<p>You can create a shallow copy of an object by simply assigning the original object to a new variable. </p>
<p>Consider the following object:</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer"
}</pre>
<p>To create a copy of the object <code>user</code>, we assign the object to a new variable like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">const clone = user

console.log(user)
console.log(clone)

/*
{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}

{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}
*/</pre>
<p>As observed in the console output, we have now copied the object from <code>user</code> into <code>clone</code>.</p>
<p>However, all we did was create a reference to the original object. Whenever we mutate a property in the object <code>clone</code>, we'll also end up mutating the original object (<code>user</code>) as we do in the following code:</p>
<pre class="brush: javascript noskimlinks noskimwords">clone.age = 30

console.log(user)
console.log(clone)

/*
{
  age: 30,
  job: "Web Developer",
  name: "Kingsley"
}
{
  age: 30,
  job: "Web Developer",
  name: "Kingsley"
}
*/</pre>
<p>So when a non-primitive data type (array or object) is assigned to a new variable, JavaScript makes a shallow copy of the original object.</p>
<h3>
<a name="json"></a>Copy an Object With <code>JSON.stringify()</code> and <code>JSON.parse()</code>
</h3>
<p>The <code>JSON.stringify()</code> method takes in an object and creates a JSON string from it. The <code>JSON.parse()</code> method parses a string and returns a JavaScript object.</p>
<p>We can combine both of these methods to create a copy of an object in the following way:</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer"
}

let clone = JSON.parse(JSON.stringify(user))

console.log(user)
console.log(clone)

/*
{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}
{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}
*/</pre>
<p>When the copy object is mutated, the original object stays the same:</p>
<pre class="brush: javascript noskimlinks noskimwords">clone.age = 32

console.log(user)
console.log(clone)

/*
{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}
{
  age: 32,
  job: "Web Developer",
  name: "Kingsley"
}
*/</pre>
<p>However, there is one caveat to using this approach: <code>JSON.stringify()</code> does not copy functions.</p>
<p>Suppose we have a method in our object <code>user</code> called <code>incrementAge</code>:</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer",
    incrementAge: function() {
  	  this.age++
    }
}</pre>
<p>The function will not be available in the copied object. Thus, this method achieves deep copy only if there is no function within the object.</p>
<h3>
<a name="object-assign"></a>Copy an Object With <code>Object.assign()</code>
</h3>
<p>Before ES6, <code>Object.assign()</code> was the most popular way to deep copy an object.</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer",
    incrementAge: function() {
  	  this.age++
    }
}

let clone = Object.assign({}, user) // Copies user into clone</pre>
<p><code>Object.assign()</code> will copy everything into the new object, including any functions. Mutating the copied object also doesn't affect the original object.</p>
<pre class="brush: javascript noskimlinks noskimwords">clone.age = 32

console.log(user)
console.log(clone)

/*
{
     age: 28,
     incrementAge: function() {
       this.age++
     },
     job: "Web Developer",
     name: "Kingsley"
}
{
     age: 32,
     incrementAge: function() {
       this.age++
     },
     job: "Web Developer",
     name: "Kingsley"
}
*/</pre>
<p>However, one thing to remember about <code>Object.assign()</code> is that the method only performs a partial deep copy on objects.</p>
<p>To understand what that means, let's consider the following:</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer",
    location: {
      city: "Lagos",
    }
}

const clone = Object.assign({}, user)</pre>
<p>As observed, we added the location property and passed an object as its value. Now we have a more complex structure that contains a nested object. </p>
<p>Whenever we mutate a property within the nested object (in <code>clone</code>), it will also mutate the same property in the original object (<code>users</code>). Let's take a look:</p>
<pre class="brush: javascript noskimlinks noskimwords">clone.age = 32
clone.location.city = "New York"


console.log(user)
console.log(clone)

/*
{
  age: 28,
  job: "Web Developer",
  location: {
    city: "New York"
  },
  name: "Kingsley"
}

{
  age: 32,
  job: "Web Developer",
  location: {
    city: "New York"
  },
  name: "Kingsley"
}
*/</pre>
<p>While the <code>age</code> property in the original object remained untouched, the <code>city</code> property was mutated by the reassignment operation.</p>
<p>Hence, the <code>Object.assign()</code> method should be used to deep copy objects that have no nested objects. </p>
<h3>
<a name="spread"></a>The Best Way to Deep Copy in JavaScript: The Spread Operator</h3>
<p>Another way to deep copy objects in JavaScript is with the ES6 spread operator. Using the three dots (<code>...</code>) collects all values on the original object into another object.</p>
<pre class="brush: javascript noskimlinks noskimwords">const user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer"
}

const clone = {...user}

console.log(clone);

/*
{
  age: 28,
  job: "Web Developer",
  name: "Kingsley"
}
*/</pre>
<p>However, much like with <code>Object.assign()</code>, the spread operator only makes a partial copy. So any object with a nested object will not be deep copied.</p>
<p>To make a complete deep copy with the spread operator, we'll have to write some additional code.</p>
<p>Consider the same user object but with a nested object:</p>
<pre class="brush: javascript noskimlinks noskimwords">let user = {
    name: "Kingsley",
    age: 28,
    job: "Web Developer",
    location: {
        city: "Lagos",
    }
}

let clone = {...user}</pre>
<p>To avoid mutating the original object, which is <code>user</code>, we must spread the copy object before making direct changes to any of its properties. For any nested object, we must also spread that sub-object before making changes to any of its properties:</p>
<pre class="brush: javascript noskimlinks noskimwords">clone = {
    ...clone,
  age: 32,
  location: {
  	...clone.location,
    city: "New York"
  }
}</pre>
<p>Here, we mutated <code>age</code>, which is a top-level property in <code>clone</code>, and <code>city</code>, which is a sub-property.</p>
<p>This time, the spread operation will give a complete deep copy wherein the original object will be unaffected by any mutation on the copy (<code>clone</code>).</p>
<pre class="brush: javascript noskimlinks noskimwords">console.log(user)
console.log(clone)

/*
{
  age: 28,
  job: "Web Developer",
  location: {
    city: "Lagos"
  },
  name: "Kingsley"
}

{
  age: 32,
  job: "Web Developer",
  location: {
    city: "New York"
  },
  name: "Kingsley"
}
*/</pre>
<h3>
<a name="lodash"></a>Use Lodash <code>cloneDeep()</code> for Deep Copying</h3>
<p>Lodash also provides a utility method <code>_.cloneDeep()</code> for deep cloning of objects in JavaScript.  <a href="https://lodash.com/docs/4.17.15#cloneDeep" target="_blank" rel="noopener">Read more about the method</a>.</p>
<h2>Conclusion</h2>
<p>As you've seen, there are a number of ways to copy a variable in JavaScript. None of them is perfect for every occasion, so you'll have to be careful to choose the best method for each situation.</p>
<p>To review, here are the methods and their pros and cons.</p>
<table>
<tbody>
<tr>
<td><strong>Method</strong></td>
<td><strong>Pros</strong></td>
<td><strong>Cons</strong></td>
</tr>
<tr>
<td><a href="#shallow">shallow copy with <code>=</code></a></td>
<td>clear and direct, the default</td>
<td>only shallow copies objects</td>
</tr>
<tr>
<td><a href="#json"><code>JSON.stringify()</code> and <code>JSON.parse()</code></a></td>
<td>deep copies nested objects</td>
<td>doesn't copy functions</td>
</tr>
<tr>
<td><a href="#object-assign">Object.assign()</a></td>
<td>copies the immediate members of an object—including functions</td>
<td>doesn't deep copy nested objects</td>
</tr>
<tr>
<td><a href="#spread">the <code>...</code> spread operator</a></td>
<td>simple syntax, the preferred way to copy an object</td>
<td>doesn't deep copy nested objects</td>
</tr>
<tr>
<td><a href="#lodash">Lodash <code>cloneDeep()</code></a></td>
<td>clones nested objects including functions</td>
<td>adds an external dependency to your project</td>
</tr>
</tbody>
</table>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2022-01-11T12:25:06+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Read a CSV to an Array in PHP]]></title>
      <link>//shineyrock.com/blog/read/read-a-csv-to-an-array-in-php</link>
      <guid>https://shineyrock.com/blog/read/read-a-csv-to-an-array-in-php#When:19:04:27Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="i2y7">
<p>In this post, I'll show you how to use PHP's built-in functions to read and print the contents of a CSV file and convert it into an array. We'll use <code>fopen()</code> and <code>fgetcsv()</code> to read the contents of a CSV file, and then we'll convert it into an array using the <code>array_map()</code> and <code>str_getcsv()</code> functions.</p>
<h2>Introduction</h2>
<p>Storing data files in comma-separated values (CSV) format is no new thing. In fact, it’s one of the most common ways of storing data due to its simplicity—CSV files are easy to read and write, and can be opened in a basic text editor. This type of file stores tabular data in the form of plain text.</p>
<p>An example of such a file would look like this:</p>
<pre class="brush: plain noskimlinks noskimwords">Elias,40,nurse
Rehema,15,programmer
Beatrice,23,doctor</pre>
<p>This data represents information about three people, with columns corresponding to their names, age, and job. Although it's a simple data format, it can be tricky to read and consume.</p>
<p>Therefore, in this article, I will teach you how to open CSV files using PHP's native functions like <code>fopen()</code>, how to read the contents of this file with the use of the <code>fgetcsv()</code> method, and lastly how to convert this CSV file into an array using the <code>array_map()</code> function.</p>
<p>Of course, there are a number of third-party packages we could use to achieve this, but PHP has built-in native functions that work great. </p>
<h3>Prerequisites</h3>
<p>To proceed with this article, you'll need the following:</p>
<ul>
<li>PHP version 5.6 or above installed on your machine</li>
<li>a development environment for PHP—either <a href="https://www.apachefriends.org/" target="_self">XAMPP</a> or <a href="https://www.wampserver.com/en/" target="_self">WampServer</a> work well</li>
<li>some basic understanding of PHP concepts</li>
</ul>
<p>Let’s begin!</p>
<h2>Displaying a CSV File as a Table</h2>
<p>In this section of the article, we will be reading a simple CSV file that contains a few words separated by the comma delimiter. For a start, we will use the simple file we used above, and then later we can proceed to using a random larger file. Of course, you can create your own file using Microsoft Excel or a text editor and save it with the CSV extension.</p>
<p>To read the file, we first have to find it in the folder or location it is saved in. For easier access, you may want to save it in the same folder where you have your program file. Then we can use the <code>fopen()</code> function to read the file.</p>
<p>Afterward, the <code>fgetcsv()</code> function checks for CSV fields from a parsed line of the open file. This function requires three parameters: the file handle returned from <code>fopen()</code>, the maximum length of the line to be read, and the special separator character—which we refer to as the "delimiter". This can be a comma, a semi-colon, or any other separator.</p>
<p>Now let’s get practical.</p>
<p>Create a file named <strong>csvtable.php </strong>somewhere it can be served with WAMP or XAMPP, and copy the following code.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

$file_to_read = fopen('data.csv', 'r');

if($file_to_read !== FALSE){

    echo "&lt;table&gt;\n";
    while(($data = fgetcsv($file_to_read, 100, ',')) !== FALSE){
        echo "&lt;tr&gt;";
        for($i = 0; $i &lt; count($data); $i++) {
            echo "&lt;td&gt;".$data[$i]."&lt;/td&gt;";
        }
        echo "&lt;/tr&gt;\n";
    }
    echo "&lt;/table&gt;\n";

    fclose($file_to_read);
}

?&gt;</pre>
<p>In this file, we're first opening the <strong>data.csv</strong> file, which should contain some comma-separated data. <code>fopen</code> will look for this file in the same folder as <strong>csvtable.php</strong>. The <code>'r'</code> parameter tells <code>fopen</code> to open the file as read-only. </p>
<p>If the file is opened successfully, <code>fopen</code> will return a file handle which can be used for other file reading operations. Otherwise, it will return <code>FALSE</code>. Therefore, we check that the file handle is not <code>FALSE</code> before continuing to read the file.</p>
<p>The <code>fgetcsv()</code> file then fetches CSV fields from the opened file, one line at a time. We tell <code>fgetcsv</code> to read at most 100 characters per line, and to use the comma separator as its delimiter. The words found in the file are then looped through and printed into an HTML table.</p>
<p>The last function is the <code>fclose()</code> function, which closes the opened file. This releases the memory used by the open file and allows other processes to have access to the file.</p>
<p>Open <strong>csvtable</strong><strong>.php</strong> through the WAMP or XAMPP localhost server, or run <code>php read.php</code> from the command line to see the following output:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="870px" height="150px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="650px" height="116px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="380px" height="75px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"></figure>
<p>The first part of what we needed to achieve is done already!</p>
<p>Now, we’ll jump into converting the raw CSV fields into an array.</p>
<h2>Converting the Raw CSV File Into an Array</h2>
<p>Now, there's more than one way to produce the array. We can use the <code>fgetcsv()</code> function to automatically convert the contents of the CSV file into an array, or we can use <code>array_map</code>.</p>
<h3>Using <code>fgetcsv()</code> to Convert a CSV File Into an Array</h3>
<p>This is similar to the example above, where we used <code>fgetcsv()</code> to render a CSV file as an HTML table. Let’s see this in action. Create a PHP file with the following contents:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
function csvToArray($csvFile){

    $file_to_read = fopen($csvFile, 'r');

    while (!feof($file_to_read) ) {
        $lines[] = fgetcsv($file_to_read, 1000, ',');

    }

    fclose($file_to_read);
    return $lines;
}

//read the csv file into an array
$csvFile = 'data.csv';
$csv = csvToArray($csvFile);

//render the array with print_r
echo '&lt;pre&gt;';
print_r($csv);
echo '&lt;/pre&gt;';
?&gt;</pre>
<p>In the above code, we created a function to read a CSV file and convert it to an array. We pass in a parameter with the CSV document file name and path.</p>
<p>Then, we use the <code>feof()</code> function to check whether the end of file has been reached. Until it has, we need to parse the CSV fields using the <code>fgetcsv()</code> function, just like we did in the example above.</p>
<p>The parsed CSV fields from the CSV file are converted into an array using the <code>fgetcsv()</code> function and are appended one at a time to the <code>$lines[]</code> variable.</p>
<p>Finally, don't forget to use the <code>fclose()</code> function to close the opened file before exiting the function.</p>
<p>We then call the <code>readDocument</code> function, which passes the CSV document as a parameter, and next, the contents of the CSV file are displayed as below:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="870px" height="545px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="650px" height="409px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="380px" height="242px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"></figure>
<h3>Using <code>array_map()</code> to Read a CSV File</h3>
<p>Alternatively, you can use the <code>array_map()</code> function to read a CSV file into an array. To do this, you'll use <code>str_getcsv</code> as a callback function. This is a built-in PHP function that is used to parse a CSV string into an array.</p>
<p>A callback function is some executable code that is passed to another piece of code as an argument. This argument is expected to be called back later on by the code it is passed to.</p>
<p>Here is how we can use <code>array_map</code> and <code>str_getcsv</code> to map our CSV data into an array:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
$csv = array_map('str_getcsv', file('data.csv'));
echo '&lt;pre&gt;';
print_r($csv);
echo '&lt;/pre&gt;';
?&gt;</pre>
<p>The above code uses the <code>file()</code> method to read the CSV file into an array of lines. Then, with array map, it calls <code>str_getcsv()</code> on each line and stores the data for the entire file in <code>$csv</code>. The <code>str_getcsv()</code> function parses the CSV field contents of each line into an array.</p>
<p>The output of the above code snippet will be the same as above.</p>
<p>Notice how much less code is required when using <code>file()</code> and the <code>array_map()</code> function directly?</p>
<h2>Conclusion</h2>
<p>In this article, you learned how to handle a CSV file in PHP by reading and displaying its contents using PHP native functions like <code>fopen()</code> and <code>fgetcsv()</code> and converting the CSV fields into an array. I showed you two ways to do this. </p>
<p>Now, try doing it yourself. Happy coding!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-12-25T19:04:27+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Read a CSV to Array in PHP]]></title>
      <link>//shineyrock.com/blog/read/read-a-csv-to-array-in-php</link>
      <guid>https://shineyrock.com/blog/read/read-a-csv-to-array-in-php#When:19:04:27Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="i2y7">
<p>In this post, I'll show you how to use PHP's built-in functions to read and print the contents of a CSV file and convert it into an array. We'll use <code>fopen()</code> and <code>fgetcsv()</code> to read the contents of a CSV file, then we'll convert it into an array using the <code>array_map()</code> and <code>str_getcsv()</code> function.</p>
<h2>Introduction</h2>
<p>Storing data files in comma-separated values (CSV) format is no new thing. In fact, it’s one of the most common ways of storing data due to its simplicity—CSV files are easy to read and write, and can be opened in a basic text editor. This type of file stores tabular data in form of plain text.</p>
<p>An example of such a file would like this:</p>
<pre class="brush: plain noskimlinks noskimwords">Elias,40,nurse
Rehema,15,programmer
Beatrice,23,doctor</pre>
<p>This data represents information about three people, with columns corresponding to their names, age, and job. Although it's a simple data format, it can be tricky to read and consume it.</p>
<p>Therefore, in this article, I will teach you how to open CSV files using PHP's native functions like <code>fopen()</code>, how to read the contents of this file with the use of the <code>fgetcsv()</code> method, and lastly how to convert this CSV file into an array using the <code>array_map()</code> function.</p>
<p>Of course, there are a number of third-party packages we could use to achieve this, but PHP has built-in native functions that work great. </p>
<h3>Prerequisites</h3>
<p>To proceed with this article, you'll need the follwing:</p>
<ul>
<li>PHP version 5.6 or above installed on your machine</li>
<li>a development environment for PHP—either <a href="https://www.apachefriends.org/" target="_self">XAMPP</a> or <a href="https://www.wampserver.com/en/" target="_self">WampServer</a> work well</li>
<li>some basic understanding of PHP concepts</li>
</ul>
<p>Let’s begin!</p>
<h2>Displaying a CSV File as a Table</h2>
<p>In this section of the article, we will be reading a simple CSV file that contains a few words separated by the comma delimiter. For a start, we will use the simple file we used above, then we can later proceed using a random larger file. Of course, you can create your own file using Microsoft Excel or a text editor and save it with the CSV extension.</p>
<p>To read the file, we first have to find it in the folder or location it is saved in. For easier access, you may want to save it in the same folder where you have your program file. Then we can use the <code>fopen()</code> function to read the file.</p>
<p>Afterward, the <code>fgetcsv()</code> function checks for CSV fields from a parsed line of the open file. This function requires three parameters: the file handle returned from <code>fopen()</code>, the maximum length of the line to be read, and the special separator character—which we refer to as the "delimiter". This can either be a comma or a semi-colon or any other separator.</p>
<p>Now let’s get practical.</p>
<p>Create a file named <strong>csvtable.php </strong>somewhere it can be served with WAMP or XAMPP and copy the following code.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

$file_to_read = fopen('data.csv', 'r');

if($file_to_read !== FALSE){

    echo "&lt;table&gt;\n";
    while(($data = fgetcsv($file_to_read, 100, ',')) !== FALSE){
        echo "&lt;tr&gt;";
        for($i = 0; $i &lt; count($data); $i++) {
            echo "&lt;td&gt;".$data[$i]."&lt;/td&gt;";
        }
        echo "&lt;/tr&gt;\n";
    }
    echo "&lt;/table&gt;\n";

    fclose($file_to_read);
}

?&gt;</pre>
<p>In this file, we're first opening the <strong>data.csv</strong> file, which should contain some comma-separated data. <code>fopen</code> will look for this file in the same folder as <strong>csvtable.php</strong>. The <code>'r'</code> parameter tells <code>fopen</code> to open the file as read-only. </p>
<p>If the file is opened successfully, <code>fopen</code> will return a file handle which can be used for other file reading operations. Otherwise it will return <code>FALSE</code>. Therefore, we check that the file handle is not <code>FALSE</code> before continuing to read the file.</p>
<p>The <code>fgetcsv()</code> file then fetches CSV fields from the opened file, one line at a time. We tell <code>fgetcsv</code> to read at most 100 characters per line, and to use the comma separator as its delimiter. The words found in the file are then looped through and printed into an HTML table.</p>
<p>The last function is the <code>fclose()</code> function that closes the opened file. This releases the memory used by the open file and allows other processes to have access to the file.</p>
<p>Open <strong>csvtable</strong><strong>.php</strong> through the WAMP or XAMPP localhost server, or run <code>php read.php</code> from the command line to see the following output:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="870px" height="150px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="650px" height="116px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg" alt="output of read.php file" loading="lazy" width="380px" height="75px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/39471/image-upload/csvtoarray1b.jpg 2x"></figure>
<p>The first part of what we needed to achieve is done already!</p>
<p>Now, we’ll jump into converting the raw CSV fields into an array.</p>
<h2>Converting the Raw CSV File Into an Array</h2>
<p>Now, there exists more than one way to produce the array. We can use the <code>fgetcsv()</code> function to automatically convert the contents of the CSV file into an array, or we can use <code>array_map</code>.</p>
<h3>Using <code>fgetcsv()</code> to Convert a CSV File Into an Array</h3>
<p>This is similar to the example above where we used <code>fgetcsv()</code> to render a CSV file as an HTML table. Let’s see this in action. Create a PHP file with the following contents:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
function csvToArray($csvFile){

    $file_to_read = fopen($csvFile, 'r');

    while (!feof($file_to_read) ) {
        $lines[] = fgetcsv($file_to_read, 1000, ',');

    }

    fclose($file_to_read);
    return $lines;
}

//read the csv file into an array
$csvFile = 'data.csv';
$csv = csvToArray($csvFile);

//render the array with print_r
echo '&lt;pre&gt;';
print_r($csv);
echo '&lt;/pre&gt;';
?&gt;</pre>
<p>In the above code, we created a function to read a CSV file and convert it to an array. We pass in a parameter with the CSV document file name and path.</p>
<p>Then, we use the <code>feof()</code> function to check whether the end of file has been reached. Until it has, we need to parse the CSV fields using the <code>fgetcsv()</code> function. Just like we did in the example above.</p>
<p>The parsed CSV fields from the CSV file are converted into an array using the <code>fgetcsv()</code> function and are appended one at a time to the <code>$lines[]</code> variable.</p>
<p>Finally, don't forget to use <code>fclose()</code> function to close the opened file before exiting the function.</p>
<p>We then call the <code>readDocument</code> function that passes the csv document as a parameter and next, the contents of the CSV file are displayed as below:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="870px" height="545px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="650px" height="409px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg" alt="output of csv to array example" loading="lazy" width="380px" height="242px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/39471/image-upload/csvtoarray2b.jpg 2x"></figure>
<h3>Using <code>array_map()</code> to Read a CSV File</h3>
<p>Alternatively, you can use the <code>array_map()</code> function to read a CSV file into an array. To do this, you'll use <code>str_getcsv</code> as a callback function. This is a built-in PHP function that is used to parse a CSV string into an array.</p>
<p>A callback function is an executable code that is passed to another code as an argument. This argument is expected to be called back later on by the code it is passed to.</p>
<p>Here is how we can use <code>array_map</code> and <code>str_getcsv</code> to map our CSV data into an array:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
$csv = array_map('str_getcsv', file('data.csv'));
echo '&lt;pre&gt;';
print_r($csv);
echo '&lt;/pre&gt;';
?&gt;</pre>
<p>The above code uses the <code>file()</code> method to read the csv file into an array of lines. Then, with array map, it calls <code>str_getcsv()</code> on each line, and store the data for the entire file in <code>$csv</code>. The <code>str_getcsv()</code> function that parses the CSV field contents of each line into an array.</p>
<p>The output of the above code snippet will be the same as above.</p>
<p>Notice how much less code is required when using <code>file()</code> and the the <code>array_map()</code> function directly?</p>
<h2>Conclusion</h2>
<p>In this article, you learned how to handle a CSV file in PHP by reading and displaying its contents using PHP native functions like <code>fopen()</code> and <code>fgetcsv()</code> and converting the CSV fields into an array. I have showed you two ways to do this. </p>
<p>Now try doing it yourself. Happy coding!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-12-25T19:04:27+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Adding and Removing Elements From Arrays in JavaScript]]></title>
      <link>//shineyrock.com/blog/read/adding-and-removing-elements-from-arrays-in-javascript</link>
      <guid>https://shineyrock.com/blog/read/adding-and-removing-elements-from-arrays-in-javascript#When:15:10:56Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="iwu1">
<p>In this article, we'll take a look at various ways to add and remove elements from an array in JavaScript.</p>
<p>Here's a quick reference table for the different array methods that let you add or remove items. Click on the method name to jump to the description below.</p>
<table>
<thead>
<tr>
<th>Method</th>
<th>Position</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#pop"><code>pop()</code></a></td>
<td>end</td>
<td>remove and return item</td>
</tr>
<tr>
<td><a href="#shift"><code>shift()</code></a></td>
<td>beginning</td>
<td>remove and return item</td>
</tr>
<tr>
<td><a href="#push"><code>push()</code></a></td>
<td>end</td>
<td>add item</td>
</tr>
<tr>
<td><a href="#unshift"><code>unshift()</code></a></td>
<td>beginning</td>
<td>add item</td>
</tr>
<tr>
<td><a href="#splice"><code>splice()</code></a></td>
<td>anywhere</td>
<td>add, remove, or replace items</td>
</tr>
</tbody>
</table>
<h2>What Is an Array in JavaScript?</h2>
<p>An array is a special variable that can hold more than one value at a time. Each value is separated by a comma.</p>
<p>The values can be strings:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']</pre>
<p>Or they can be objects:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = [
    { name: "patrick", age: 21 },
    { name: "chimamanda", age: 25 },
    { name: "joe", age: 32 },
    { name: "sam", age: 16 },
]</pre>
<p>Values can also be of any data type, including number, boolean, and even another array.</p>
<p>You can manipulate or get information about an array using array methods. For example, we can reverse an array using the <code>reverse()</code> method as follows:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

let reversedPeople = people.reverse()

console.log(reversedPeople)

// ["sam", "joe", "chimamanda", "Patrick"]</pre>
<p>We can also use the <code>includes()</code> method to check if a value exists in an array:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

console.log(people.includes('sam')) // true
console.log(people.includes('jack')) // false</pre>
<p>Specifically, let's take a look at the methods responsible for inserting items into an array and removing items from an array.</p>
<h3>
<a name="pop"></a>Remove the Last Item From an Array With <code>pop()</code>
</h3>
<p>The <code>pop()</code> method removes the last value from an array and returns that value.</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

const lastPerson = people.pop()

console.log(lastPerson) // "sam"
console.log(people) // ["patrick", "chimamanda", "joe"]</pre>
<p>When <code>pop()</code> is called on the <code>people</code> array, the last value in the array is removed and assigned to <code>lastPerson</code>. The original array (<code>people</code>) is also mutated.</p>
<h3>Add One or More Items to the End of an Array With <code>push()</code>
</h3>
<p><a name="push"></a>The <code>push()</code> method adds one or more items at the end of an array and returns the length of the array.</p>
<p>For example, let's add two more names to the <code>people</code> array with <code>push()</code>:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

const count = people.push('akilah', 'isaac')

console.log(count) // 6
console.log(people) // ["patrick", "chimamanda", "joe", "sam", "akilah", "isaac"]</pre>
<h3>
<a name="shift"></a>Remove the First Value From an Array With <code>shift()</code>
</h3>
<p>The <code>shift()</code> method removes the first value from an array and returns that value. This method's behaviour is the direct opposite of the <code>pop()</code> method.</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

const firstPerson = people.shift()

console.log(firstPerson) // "patrick"
console.log(people) // ["chimamanda", "joe", "sam"]</pre>
<p>When <code>shift()</code> is called on the <code>people</code> array, the first value in the array is removed and assigned to <code>firstPerson</code>. As a result, the original array is mutated.</p>
<h3>
<a name="unshift"></a>Add One or More Items to the Beginning of an Array With <code>unshift()</code>
</h3>
<p>The <code>unshift()</code> method add one or more values to the beginning of an array and returns the length of the array. This is the opposite of <code>push()</code>, which inserts the values at the end.</p>
<p>In this example, <code>unshift()</code> adds two names at the beginning of the array:</p>
<pre class="brush: javascript noskimlinks noskimwords">const people = ['patrick', 'chimamanda', 'joe', 'sam']

const count = people.unshift('akilah', 'isaac')

console.log(count) // 6
console.log(people) // ["akilah", "isaac", "patrick", "chimamanda", "joe", "sam"]</pre>
<h3>
<a name="splice"></a>Remove and Replace Items With <code>splice()</code>
</h3>
<p>You can use <code>splice()</code> to insert a value inside an array or to replace a value with another value.</p>
<p>The following example shows <code>splice()</code> inserting an item at index 2 (that is, the third spot):</p>
<pre class="brush: javascript noskimlinks noskimwords">const numbers = ['one', 'two', 'four', 'five']

numbers.splice(2, 0, "three")

console.log(numbers) // ["one", "two", "three", "four", "five"]</pre>
<p>You can also replace a value with another value. In the following example, <code>splice()</code> will replace the value at index 0 (the beginning of the array) with another single value:</p>
<pre class="brush: javascript noskimlinks noskimwords">const numbers = ['five', 'two', 'three', 'four', 'five']

numbers.splice(0, 1, "one")

console.log(numbers) // ["one", "two", "three", "four", "five"]</pre>
<h2>Summary</h2>
<p>The <code>pop()</code> method removes the last item from an array, while <code>shift()</code> removes the first. <code>push()</code> adds one or more values at the end of an array, while <code>unshift()</code> adds them at the beginning. <code>splice()</code> changes an array by replacing the values.</p>
<table>
<thead>
<tr>
<th>Method</th>
<th>Position</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#pop"><code>pop()</code></a></td>
<td>end</td>
<td>remove and return item</td>
</tr>
<tr>
<td><a href="#shift"><code>shift()</code></a></td>
<td>beginning</td>
<td>remove and return item</td>
</tr>
<tr>
<td><a href="#push"><code>push()</code></a></td>
<td>end</td>
<td>add item</td>
</tr>
<tr>
<td><a href="#unshift"><code>unshift()</code></a></td>
<td>beginning</td>
<td>add item</td>
</tr>
<tr>
<td><a href="#splice"><code>splice()</code></a></td>
<td>anywhere</td>
<td>add, remove, or replace items</td>
</tr>
</tbody>
</table>
<p>Note that these methods all mutate the original array. So use them with caution!</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-12-02T15:10:56+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Create a JavaScript AJAX Post Request: With and Without jQuery]]></title>
      <link>//shineyrock.com/blog/read/create-a-javascript-ajax-post-request-with-and-without-jquery</link>
      <guid>https://shineyrock.com/blog/read/create-a-javascript-ajax-post-request-with-and-without-jquery#When:12:19:04Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="im7w">
<p>In this article, we'll take a look at what AJAX is, why it is important, and how we can make an AJAX <code>POST</code> request with XHR, <code>fetch()</code>, and jQuery.</p>
<h2>What Is AJAX?</h2>
<p>AJAX stands for <strong>Asynchronous JavaScript and XML</strong>. AJAX is a technique in web development used to update content on a website without having to reload the entire page.</p>
<p>In an AJAX application, JavaScript is used to make real-time updates on parts of a page as the user interacts with it, thereby turning an otherwise static HTML page into a dynamic one.</p>
<p>Social networking web applications such as Facebook and Twitter use AJAX to update user feeds and notifications.</p>
<p>Let's take the Twitter web app as an example. After a specified time interval, the Twitter app makes an AJAX request to the server requesting new information. That is how the user receives the latest tweets on their feeds without having to reload the page.</p>
<p>All of this happens asynchronously; the user can continue to use the application while it requests information from the web server in the background. That's precisely why a user can scroll through their feed and react to tweets while the feed gets updated with new tweets.</p>
<p>In a traditional client-server request, the user will have to reload the page to get any new information from the server.</p>
<div>
<h2>Benefits of AJAX</h2>
<p>AJAX uses client-side JavaScript to fetch and display content in the background. This technique greatly improves the user experience, since the page doesn't have to be reloaded every time fresh content is needed.</p>
<p>Using AJAX leads to faster page renders because it can be used to update only the parts of the page that need to change, as opposed to reloading the entire page.</p>
<p>That also reduces the frequency of requests to the web server, which in turn leads to faster response times.</p>
<h2>What Is a POST Request?</h2>
<p>When performing API requests from the browser, the two HTTP methods you'll use for data transport are GET and POST. The main difference between these two methods lies in the way data gets sent to the web server application.</p>
<p>HTTP GET passes data to the server application in name and value pairs. These request parameters are appended to the URL. For example, the following is a URL for a GET request containing two request parameters that will be sent to the server:</p>
<p><code>www.mysite.com/id=12&amp;name="chris"</code></p>
<p>Since data is visible in the URL, the <code>GET</code> method should never be used to transport sensitive information such as passwords and bank details.</p>
<p>Instead, the <code>POST</code> method should always be used to transport sensitive data. The <code>POST</code> method transports data in the request body. Data can be transported in JSON and XML formats.</p>
<h2>How to Make an AJAX POST Request With XHR</h2>
<p>You can use the <code>XMLHttpRequest</code> object (XHR) to communicate with a web server using the AJAX technique. This is the classic way to do AJAX, but it's not the best way now that the Fetch API is supported in modern browsers. In the next section, I'll show you a better way to make a POST request using <code>fetch()</code>.</p>
<p>Now suppose we want to post the following data (a blog post) to a web server:</p>
<pre class="brush: javascript noskimlinks noskimwords">/* Data which will be sent to server */
let postObj = {
    id: 1,
    title: "What is AJAX",
    body: "AJAX stands for Asynchronous JavaScript..."
}</pre>
<p>We can use XHR to post the data to a web server like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">let post = JSON.stringify(postObj)

const url = "https://jsonplaceholder.typicode.com/posts"
let xhr = new XMLHttpRequest()

xhr.open('POST', url, true)
xhr.setRequestHeader('Content-type', 'application/json; charset=UTF-8')
xhr.send(post);

xhr.onload = function () {
    if(xhr.status === 201) {
        console.log("Post successfully created!")
    }
}</pre>
<p>We began by converting the object to a JSON string to be transported via HTTP. Then we created an <code>xhr</code> object from the <code>XMLHttpRequest</code> class.</p>
<p>After that, we opened the request by calling the <code>open()</code> method, passing in the following options:</p>
<ul>
<li>
<code>'POST'</code>: the request method; we are posting data to the server</li>
<li>
<code>url</code>: this is URL of the server to where we are posting the resource to</li>
<li>
<code>true</code>: tells the browser to run the code asynchronously</li>
</ul>
<p>We proceeded to set the request header, telling the server how to process the data we send over. Then we sent the body of our request.</p>
<p>When the request is successfully completed, the <code>onload</code> function will be invoked. Inside this function, we made an <code>if</code> check to ensure that the resource was successfully created on the server (as indicated by 201 status) before logging a message to the console.</p>
<p>You can also directly access values from a form in the page, like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">let postObj = {
    id: Math.random(),
    title: document.querySelector('#post-title').value,
    body: document.querySelector('#post-body').value
}

// [...]

xhr.onload = function () {
    if(xhr.status === 201) {
        let AlertDiv = document.querySelector('#alert')
        AlertDiv.innerHTML =  xhr.response.message
    }
}</pre>
<p>Here we grab the values directly from the UI and display a response message to the user if the resource is created successfully.</p>
<h2>How to Make an AJAX POST Request With <code>fetch()</code>
</h2>
<p>Another way to make AJAX calls in JavaScript is with the <code>fetch()</code> method. <code>fetch()</code> is an API utility method built into the web browser environment. It's a newer API than <code>XMLHttpRequest</code>, with modern features making it easier to use. I recommend you use <code>fetch()</code> for AJAX.</p>
<p>The following code makes a POST request to the server using <code>fetch()</code>:</p>
<pre class="brush: javascript noskimlinks noskimwords">fetch("https://jsonplaceholder.typicode.com/posts", {
    method: 'post',
    body: post,
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
    }
}).then((response) =&gt; {
    return response.json()
}).then((res) =&gt; {
    if (res.status === 201) {
        console.log("Post successfully created!")
    }
}).catch((error) =&gt; {
    console.log(error)
})</pre>
<p><code>fetch()</code> takes in the server URL and an object containing options like the <code>HTTP</code> method, request body, and request headers. <code>Accept</code> indicates what kind of response from the server the client can accept. <code>Content-Type</code> indicates the data format of the current request or response. Since our request has a payload, we have to use a content-type request header.</p>
<p>When the request is successfully executed on the server, we chain along the <code>then()</code> and <code>catch()</code> methods to handle the server response and errors respectively.</p>
<p>The first <code>then()</code> method simply converts the response data into a JavaScript object and returns the object. In the following <code>then()</code> method, we check for the status and log a success message to the console.</p>
<p>If any error is encountered along the chain, it will be handled by <code>catch()</code>.</p>
<h2>How to Make an AJAX POST Request With jQuery</h2>
<p>So far, we have only used browser Web APIs to perform AJAX requests.</p>
<p>We can also execute an AJAX request using a library like jQuery. POST requests in jQuery are executed using the <code>post()</code> function.</p>
<p>I'll show you how to use jQuery to execute an AJAX request, but honestly with the new JavaScript Fetch API, there's really no need to import a whole library like jQuery just for AJAX.</p>
<p>Now let's make a <code>POST</code> request using jQuery instead:</p>
<pre class="brush: javascript noskimlinks noskimwords">$.post("https://jsonplaceholder.typicode.com/posts",
{
    id: 1,
    title: "What is AJAX",
    body: "AJAX stands for Asynchronous JavaScript..."
},
function(data, status) {
    if(status === "success") {
        console.log("Post successfully created!")
    }
},
"json")</pre>
<p><code>post()</code> takes in four arguments: the URL, request body, callback function, and data format.</p>
<p>When the request is successfully completed, the callback function passed to <code>post()</code> will be invoked. This function takes in the response and status from the post request, both as arguments.</p>
<p>In the callback function, we check for the request status and log a message to the console.</p>
<h2>Conclusion</h2>
<p>AJAX is a modern web technology used for updating page contents asynchronously. This means that a user can still interact with a page while the app uses JavaScript to fetch information from the server and update the page.</p>
<p>In this article, we looked at three ways to make AJAX post requests in a web application. We used the <code>XMLHttpRequest</code> object, the fetch method, and jQuery.</p>
<p>Because <code>fetch()</code> uses modern JavaScript features like promises, I strongly recommended using it over the other options. This is because you get to learn and use promise constructs like <code>then()</code>, <code>catch()</code>, and <code>async/await</code>.</p>
<p>With the availability of native APIs such as <code>fetch()</code> and <code>XMLHttpRequest</code>, there is no need to import a whole library like jQuery just to make AJAX requests in your application.</p>
</div>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-12-02T12:19:04+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[5 Real-Life Uses for the JavaScript reduce() Method]]></title>
      <link>//shineyrock.com/blog/read/5-real-life-uses-for-the-javascript-reduce-method</link>
      <guid>https://shineyrock.com/blog/read/5-real-life-uses-for-the-javascript-reduce-method#When:16:42:11Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" class="content-block content-block-wysi" id="in8j">
<p>In this article, we'll take a look at some handy uses for the JavaScript array reduce method. I'll show you five practical uses, including finding the sum of an array.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-use-map-filter-reduce-in-javascript--cms-26209"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/26209/preview_image/javascript-wide-retina-preview.png 2x"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">How to Use Map, Filter, and Reduce in JavaScript</div>
<div class="roundup-block__author">Peleke Sengstacke</div></a></li></ul>
<h2>What Is the <code>reduce()</code> Method?</h2>
<p>The JavaScript array <code>reduce</code> method is a built-in iteration method used for performing an accumulative action on an array:</p>
<pre class="brush: javascript noskimlinks noskimwords">array.reduce(callback, initialvalue)</pre>
<p>The method accepts a callback function that's called once for every item in the array. Every callback function call must always return an accumulated value.</p>
<p>The second argument passed to <code>reduce()</code> is an optional initial value which is used as the accumulator on the first iteration. If the second argument is omitted, the first item in the array will be used as the initial value instead.</p>
<p>The JavaScript <code>reduce()</code> method is very versatile, with some really handy use cases, even though it is widely considered to be the most confusing of all JavaScript iterators.</p>
<p>Let's take a look at some use cases for the JavaScript <code>reduce()</code> method.</p>
<h2>
<span class="sectionnum">1. </span>Summing an Array Using <code>reduce()</code>
</h2>
<p>The easiest and perhaps most popular use of the JavaScript reduce method is to get the sum total of a list of numbers.</p>
<p>For example, here's the code for summing together the total points using <code>reduce</code>:</p>
<pre class="brush: javascript noskimlinks noskimwords">const topSix = [
    { name: "Nigeria", position: "1st", points: 43 },
    { name: "England", position: "2nd", points: 37 },
    { name: "USA", position: "3rd", points: 35 },
    { name: "South Africa", position: "4th", points: 30 },
    { name: "Brazil", position: "5th", points: 27 },
    { name: "Korea", position: "6th", points: 23 }
]

const totalPoints = topSix.reduce((acc, currTeam) =&gt; acc + currTeam.points, 0);

console.log(totalPoints) // Prints 195</pre>
<p>On every iteration, we simply added the current teams' points to the previously accumulated points, and then we returned that as the accumulated value for the next iteration.</p>
<p>Another very similar use for JavaScript <code>reduce()</code> is to get the total count of items within an array collection, like getting the team count:</p>
<pre class="brush: javascript noskimlinks noskimwords">const teamsCount = topSix.reduce((acc, currTeam) =&gt; acc + 1, 0);

console.log(teamsCount) // Prints 6</pre>
<p>Of course, it's better to use the <code>count</code> property to get the total count of an array, but this example shows how you can count using <code>reduce()</code> as well.</p>
<h2>
<span class="sectionnum">2. </span>Counting Occurrences of Items in an Array Using <code>reduce()</code>
</h2>
<p>Another simple use for JavaScript <code>reduce()</code> is to obtain the number of times each item appears inside an array collection.</p>
<p>For example, here is the code for getting the total number of occurrences for each fruit in an array of fruits:</p>
<pre class="brush: javascript noskimlinks noskimwords">const fruits = [ 'Banana', 'Orange', 'Apple', 'Orange', 'Pear', 'Banana']

const occurrences = fruits.reduce((acc, currFruit) =&gt; {
    return {...acc, [currFruit]: (acc[currFruit] || 0) + 1 }
}, {})

console.log(occurrences)

/*
{
  Apple: 1,
  Banana: 2,
  Orange: 2,
  Pear: 1
}
*/</pre>
<p>Note that at each step of the iteration, the accumulator will be a hash map (i.e. a JavaScript object) with a key for each fruit in the array so far, and the values will be the number of times each fruit has occurred. This is the expression where we update the accumulator:</p>
<pre class="brush: javascript noskimlinks noskimwords">{...acc, [currFruit]: (acc[currFruit] || 0) + 1 }</pre>
<p>Let's break this down a little. First, using the spread operator, <code>...acc</code> copies over all the existing values from the accumulator.</p>
<p>Then, <code>[currFruit]:</code> sets the value for the current fruit in the array. For example, on the very first iteration over the fruits collection, this will create the <code>Banana</code> property. <code>acc[currFruit] || 0</code> retrieves the value for that fruit from the previous version of the accumulator. If the fruit doesn't exist in the accumulator, it will start with a value of zero. </p>
<p>Finally, we add 1 to the value of that fruit and return the new accumulator.</p>
<h2>
<span class="sectionnum">3. </span>Converting Between Types Using <code>reduce()</code>
</h2>
<p>You can also reduce an array to any other data type.</p>
<p>For example, suppose we want to get just the names of each student from an array of objects. We can reduce the array from an array of objects to an array of string values, like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">const students = [
    { name: "Kingsley", score: 70 },
    { name: "Jack", score: 80 },
    { name: "Joe", score: 63 },
    { name: "Beth", score: 75 },
    { name: "Kareem", score: 59 },
    { name: "Sarah", score: 93 }
]

const names = students.reduce((acc, student) =&gt; [...acc, student.name], [])

console.log(names)

// Prints ["Kingsley", "Jack", "Joe", "Beth", "Kareem", "Sarah"]
</pre>
<p>In the code above, we accessed just the names on each iteration, and passed each name into the accumulated array using the spread operator. Since an array literal was set as the initial value, it was used as the wrapper for the final values.</p>
<p>Normally, we'd use <code>map()</code> for this use case, but I wanted to show you how we can do almost anything with <code>reduce()</code>. In many ways, the JavaScript <code>reduce</code> method is like the <code>map</code> method, but on steroids.</p>
<p>In the following example, we will reduce a students array to a single object:</p>
<pre class="brush: javascript noskimlinks noskimwords">const studentsArray = [
    { name: "Kingsley", score: 70, position: "1st" },
    { name: "Jack", score: 80, position: "2nd" },
    { name: "Joe", score: 63, position: "3rd" },
    { name: "Beth", score: 75, position: "4rd" },
    { name: "Kareem", score: 59, position: "5th" },
    { name: "Sarah", score: 93, position: "6th" }
]


const studentObj = studentsArray.reduce((acc, student) =&gt; {
	return {...acc, [student.name]: student.position}
}, {})

console.log(studentObj)

/*
{
  Beth: "4rd",
  Jack: "2nd",
  Joe: "3rd",
  Kareem: "5th",
  Kingsley: "1st",
  Sarah: "6th"
}
*/
</pre>
<p>Here, we restructured our data collection from an array of objects into a single object.</p>
<h2>
<span class="sectionnum">4. </span>Getting Max and Min Values From an Array Using <code>reduce()</code>
</h2>
<p>You can easily obtain the maximum and minimum numerical values from an array in a few lines of code, using JavaScript <code>reduce()</code>.</p>
<p>For example, we can obtain the maximum score from a list of scores, like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">const students = [
    { name: "Kingsley", score: 70 },
    { name: "Jack", score: 80 },
    { name: "Joe", score: 63 },
    { name: "Beth", score: 75 },
    { name: "Kareem", score: 59 },
    { name: "Sarah", score: 93 }
]

const max = students.reduce((acc, student) =&gt; {
    if(acc === null || student.score &gt; acc)
        return student.score
    return acc
}, null)

console.log(max) // Prints 93</pre>
<p>In the code above, at each iteration step we check if the current score value is greater than the accumulated value, or if the accumulator is null. If so, we update the accumulator with the new high score.</p>
<p>In other words, we just return the highest score so far at each step.</p>
<p>Conversely, in the following example, we'll be obtaining the minimum value instead:</p>
<pre class="brush: javascript noskimlinks noskimwords">const min = students.reduce((acc, student) =&gt; {
    if (acc === null || student.score &lt; acc) {
        return student.score
    }
    return acc
}, null)

console.log(min) // Prints 59</pre>
<p>The only difference between this and that of max is the change in operator—from greater than to less than. </p>
<h2>
<span class="sectionnum">5. </span>Flatten a List of Arrays Using <code>reduce()</code>
</h2>
<p>The <code>reduce()</code> method has another handy use: flattening nested arrays.</p>
<p>For example, we can flatten a list of arrays into a single array, like so:</p>
<pre class="brush: javascript noskimlinks noskimwords">const arrOfArrs = [
    ['aaron', 'ake', 'anna', 'aje'],
    ['becky', 'ben', 'bright'],
    ['cara', 'chris'],
    ['david', 'daniel', 'danielle', 'djenue'],
]

const flattened = arrOfArrs.reduce((acc, array) =&gt; acc.concat(array))

console.log(flattened)

// ["aaron", "ake", "anna", "aje", "becky", "ben", "bright", "cara", "chris", "david", "daniel", // "danielle", "djenue"]</pre>
<p>In this snippet, we just concatenate each array into the accumulator, merging them into a single array.</p>
<h2>Conclusion</h2>
<p>The JavaScript <code>reduce()</code> is an in-built array method used to perform an accumulative action on an array.</p>
<p>The method has a wide array of uses, from summing up values to flattening array lists.</p>
<p>Though the method is very versatile and can be used in many cases, it is important to consider other specialized methods for specific tasks: like using <code>find()</code> to find an item or <code>map()</code> to transform each of the elements in an array.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-11-23T16:42:11+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Enable or Disable a Button With JavaScript: jQuery vs. Vanilla]]></title>
      <link>//shineyrock.com/blog/read/how-to-enable-or-disable-a-button-with-javascript-jquery-vs.-vanilla</link>
      <guid>https://shineyrock.com/blog/read/how-to-enable-or-disable-a-button-with-javascript-jquery-vs.-vanilla#When:15:48:54Z</guid>
      <description><![CDATA[<div data-content-block-type="Wysi" class="content-block-wysi">
<p>In this article, we’ll discuss how you can enable or disable a button with JavaScript. First, we’ll go through how it works in vanilla JavaScript, and later on we’ll see how to do it with jQuery.</p>
<p>JavaScript is one of the core technologies of the web. The majority of websites use it, and all modern web browsers support it without the need for plugins. In this series, we’re discussing different tips and tricks that will help you in your day-to-day JavaScript development.</p>
<p>When you’re working with JavaScript, more often than not you need to enable or disable a button based on some actions. Usually, when you’re working with forms, you want to keep the submit button disabled until a user fills all the mandatory fields in a form. Once a user fills all the mandatory fields, you would like to automatically enable it so that the user can click on a button to submit the form.</p>
<p>In HTML, a button element has its own state, and thus, you can keep it either enabled or disabled. For example, when a form is loaded, you can keep a button in the disabled state. Later on, you can enable it with the help of JavaScript.</p>
<p>Today, we’ll discuss how you can enable or disable a button with JavaScript with a couple of real-world examples.</p>
<h2>Enable or Disable a Button With Vanilla JavaScript</h2>
<p>In this section, we’ll discuss a real-world example, which demonstrates how you can enable or disable a button with vanilla JavaScript.</p>
<p>Let’s go through the following example.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;html&gt;
    &lt;head&gt;
        &lt;script&gt;
            function toggleButton()
            {
                var username = document.getElementById('username').value;
                var password = document.getElementById('password').value;

                if (username &amp;&amp; password) {
                    document.getElementById('submitButton').disabled = false;
                } else {
                    document.getElementById('submitButton').disabled = true;
                }
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;form action="/submit.php" method="post"&gt;
                Username:&lt;input type="text" name="username" id="username" onchange="toggleButton()"&gt;
                Password:&lt;input type="password" name="password" id="password"  onchange="toggleButton()"&gt;
                &lt;input id="submitButton" type="submit" value="Submit" disabled/&gt;
            &lt;/form&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p>In the above example, we’ve built a very simple form which has a couple of text fields along with a submit button. It’s important to note that when a form is loaded, the submit button is in the disabled state. We’ve used the <code>disabled</code> property to set the default state of the submit button to disabled.</p>
<p>Next, we’ve defined the <code>onchange</code> event on the username and password input fields. So when a user changes the value of these fields, it would trigger the <code>onchange</code> event, which eventually calls the <code>toggleButton</code> function. In the <code>toggleButton</code> function, we’re checking if the user has entered values in both the mandatory fields. If that’s the case, we’ll set the <code>disabled</code> property of the submit button to <code>false</code>, which eventually enables the submit button so that the user can click on that. On the other hand, if either the username or the password field is blank, we’ll set the <code>disabled</code> property to <code>true</code>, which disables the submit button so that the user can’t click on it.</p>
<p>In the above example, we’ve used an input submit button, but you can also use an HTML button as shown in the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;button id="submitButton" disabled/&gt;Submit&lt;/button&gt;</pre>
<p>So that’s how you can use vanilla JavaScript to enable or disable a button. In the next section, we’ll see how you can use the jQuery library.</p>
<h2>Enable or Disable a Button With jQuery</h2>
<p>In this section, we’ll discuss how you can toggle the state of a button with the help of the jQuery library.</p>
<p>Let’s revise the example we discussed in the previous section.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;html&gt;
    &lt;head&gt;
    &lt;script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"&gt;&lt;/script&gt;
    &lt;script&gt;
        function toggleButton()
        {
            var username = $('#username').val();
            var password = $('#password').val();

            if (username &amp;&amp; password) {
                $('#submitButton').attr('disabled', false);
            } else {
                $('#submitButton').attr('disabled', true);
            }
        }
    &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;form action="/submit.php" method="post"&gt;
                Username:&lt;input type="text" name="username" id="username" onchange="toggleButton()"&gt;
                Password:&lt;input type="password" name="password" id="password"  onchange="toggleButton()"&gt;
            &lt;input id="submitButton" type="submit" value="Submit" disabled/&gt;
            &lt;/form&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p>First of all, we’ve loaded the jQuery library so that we can use it in our function. The only difference in the above example is that we’ve used the <code>attr</code> method of the jQuery object to alter the state of the button.</p>
<p>The <code>attr</code> method of the jQuery object is used to either set or get the value of the specific attribute of an element. If you use it with only a single argument, it’s used to get the value of the attribute. On the other hand, if you use it with two arguments, it’s used to set the value of the attribute. In our case, we’ve used it to set the value of the <code>disabled</code> attribute of the button. Apart from that, everything is the same.</p>
<p>If you’re using jQuery 1.5+, you'll need to use the <code>prop</code> method instead of the <code>attr</code> method, as shown in the following snippet.</p>
<pre class="brush: javascript noskimlinks noskimwords">//...
$('#submitButton').prop('disabled', true);</pre>
<p>Alternatively, if you want to remove any attribute of an element, you can also use the <code>removeAttr</code> method of the jQuery object, as shown in the following snippet. It would have the same outcome as if you had set the <code>disabled</code> attribute to <code>false</code>.</p>
<pre class="brush: javascript noskimlinks noskimwords">//...
$('#submitButton').removeAttr('disabled');</pre>
<p>So these are the different ways that you can use jQuery to enable or disable a button.</p>
<h2>Conclusion</h2>
<p>Today, we discussed how you can enable or disable a button in JavaScript with a couple of real-world examples. Along with vanilla JavaScript, we also discussed how to achieve it with the help of the jQuery library.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-07-15T15:48:54+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Enable or Disable a Button With JavaScript: jQuery vs Vanilla]]></title>
      <link>//shineyrock.com/blog/read/how-to-enable-or-disable-a-button-with-javascript-jquery-vs-vanilla</link>
      <guid>https://shineyrock.com/blog/read/how-to-enable-or-disable-a-button-with-javascript-jquery-vs-vanilla#When:15:48:54Z</guid>
      <description><![CDATA[<div data-content-block-type="Wysi" class="content-block-wysi">
<p>In this article, we’ll discuss how you can enable or disable a button with JavaScript. First, we’ll go through how it works in vanilla JavaScript and later on we’ll see how to do it with jQuery.</p>
<p>JavaScript is one of the core technologies of the web. The majority of websites use it, and all modern web browsers support it without the need for plugins. In this series, we’re discussing different tips and tricks that will help you in your day-to-day JavaScript development.</p>
<p>When you’re working with JavaScript, more often than not you need to enable or disable a button based on some actions. Usually, when you’re working with forms, you want to keep the submit button disabled until a user fills all the mandatory fields in a form. Once a user fills all the mandatory fields, you would like to automatically enable it so that a user can click on a button to submit the form.</p>
<p>In HTML, a button element has its own state, and thus, you can keep it either enabled or disabled. For example, when a form is loaded, you can keep a button in the disabled state. Later on, you can enable it with the help of JavaScript.</p>
<p>Today, we’ll discuss how you can enable or disable a button with JavaScript with a couple of real-world examples.</p>
<h2>Enable or Disable a Button With Vanilla JavaScript</h2>
<p>In this section, we’ll discuss a real-world example, which demonstrates how you can enable or disable a button with vanilla JavaScript.</p>
<p>Let’s go through the following example.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;html&gt;
    &lt;head&gt;
        &lt;script&gt;
            function toggleButton()
            {
                var username = document.getElementById('username').value;
                var password = document.getElementById('password').value;

                if (username &amp;&amp; password) {
                    document.getElementById('submitButton').disabled = false;
                } else {
                    document.getElementById('submitButton').disabled = true;
                }
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;form action="/submit.php" method="post"&gt;
                Username:&lt;input type="text" name="username" id="username" onchange="toggleButton()"&gt;
                Password:&lt;input type="password" name="password" id="password"  onchange="toggleButton()"&gt;
                &lt;input id="submitButton" type="submit" value="Submit" disabled/&gt;
            &lt;/form&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p>In the above example, we’ve built a very simple form which has a couple of text fields along with a submit button. It’s important to note that when a form is loaded, the submit button is in the disabled state. We’ve used the <code>disabled</code> property to set the default state of the submit button to disabled.</p>
<p>Next, we’ve defined the <code>onchange</code> event on the username and password input fields. So when a user changes the value of these fields, it would trigger the <code>onchange</code> event, which eventually calls the <code>toggleButton</code> function. In the <code>toggleButton</code> function, we’re checking if a user has entered values in both the mandatory fields. If that’s the case, we’ll set the <code>disabled</code> property of the submit button to <code>false</code>, which eventually enables the submit button so that a user can click on that. On the other hand, if either the username or the password field is blank, we’ll set the <code>disabled</code> property to <code>true</code>, which disables the submit button so that a user can’t click on it.</p>
<p>In the above example, we’ve used an input submit button, but you can also use an HTML button as shown in the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;button id="submitButton" disabled/&gt;Submit&lt;/button&gt;</pre>
<p>So that’s how you can use vanilla JavaScript to enable or disable a button. In the next section, we’ll see how you can use the jQuery library.</p>
<h2>Enable or Disable a Button With jQuery</h2>
<p>In this section, we’ll discuss how you can toggle the state of a button with the help of the jQuery library.</p>
<p>Let’s revise the example which we’ve just discussed in the previous section.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;html&gt;
    &lt;head&gt;
    &lt;script src="https://code.jquery.com/jquery-3.6.0.js" integrity="sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk=" crossorigin="anonymous"&gt;&lt;/script&gt;
    &lt;script&gt;
        function toggleButton()
        {
            var username = $('#username').val();
            var password = $('#password').val();

            if (username &amp;&amp; password) {
                $('#submitButton').attr('disabled', false);
            } else {
                $('#submitButton').attr('disabled', true);
            }
        }
    &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div&gt;
            &lt;form action="/submit.php" method="post"&gt;
                Username:&lt;input type="text" name="username" id="username" onchange="toggleButton()"&gt;
                Password:&lt;input type="password" name="password" id="password"  onchange="toggleButton()"&gt;
            &lt;input id="submitButton" type="submit" value="Submit" disabled/&gt;
            &lt;/form&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre>
<p>First of all, we’ve loaded the jQuery library so that we can use it in our function. The only difference in the above example is that we’ve used the <code>attr</code> method of the jQuery object to alter the state of a button.</p>
<p>The <code>attr</code> method of the jQuery object is used to either set or get the value of the specific attribute of an element. If you use it with only a single argument, it’s used to get the value of the attribute. On the other hand, if you use it with two arguments, it’s used to set the value of the attribute. In our case, we’ve used it to set the value of the <code>disabled</code> attribute of a button. Apart from that, everything is the same.</p>
<p>If you’re using jQuery 1.5+, you'll need to use the <code>prop</code> method instead of the <code>attr</code> method as shown in the following snippet.</p>
<pre class="brush: javascript noskimlinks noskimwords">//...
$('#submitButton').prop('disabled', true);</pre>
<p>Alternatively, if you want to remove any attribute of an element, you can also use the <code>removeAttr</code> method of the jQuery object as shown in the following snippet. It would have the same outcome as if you would have set the <code>disabled</code> attribute to <code>false</code>.</p>
<pre class="brush: javascript noskimlinks noskimwords">//...
$('#submitButton').removeAttr('disabled');</pre>
<p>So these are the different ways that you can use jQuery to enable or disable a button.</p>
<h2>Conclusion</h2>
<p>Today, we discussed how you can enable or disable a button in JavaScript with a couple of real-world examples. Along with vanilla JavaScript, we also discussed how to achieve it with the help of the jQuery library.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-07-15T15:48:54+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Confirm Yes or No With JavaScript]]></title>
      <link>//shineyrock.com/blog/read/confirm-yes-or-no-with-javascript</link>
      <guid>https://shineyrock.com/blog/read/confirm-yes-or-no-with-javascript#When:17:10:07Z</guid>
      <description><![CDATA[<div data-content-block-type="Wysi" class="content-block-wysi">
<p>In this quick article, we’ll discuss how to display a confirm dialog box using JavaScript. The confirm dialog box allows you to perform actions based on the user input.</p>
<p>JavaScript is one of the core technologies of the web. The majority of websites use it, and all modern web browsers support it without the need for plugins. Here at Envato Tuts+, we’re discussing tips and tricks that will help you in your day-to-day JavaScript development.</p>
<p>As a JavaScript developer, you often need to take user input in the form of yes or no question, and based on that you want to perform certain operations. Specifically, there are certain operations that are sensitive and can’t be undone, and you would like to warn or confirm with users if they really intend to perform the operation, so they don’t do it mistakenly. For example, if there’s a delete link which allows you to delete an entity from a database, you would like to confirm with users if they really want to delete it. So even if users click on the delete link by mistake, they at least get a chance to cancel it.</p>
<p>In this post, I'll show you two ways to confirm a user action in JavaScript: using the <code>confirm</code> method and using a hidden confirmation <code>div</code>.</p>
<h2>Syntax of the <code>confirm</code> Method</h2>
<p>In JavaScript, you can use the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm" target="_self"><code>confirm</code></a> method of the <code>window</code> object to display a dialog box, and wait for the user to either confirm or cancel it. Today, we’ll discuss how it works along with a real-world example.</p>
<p>In this section, we’ll go through the syntax of the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/confirm" target="_self"><code>window.confirm</code></a> method.</p>
<p>The syntax of the confirm method looks like this:</p>
<pre class="brush: javascript noskimlinks noskimwords">var result = window.confirm(message);</pre>
<p>The confirm method takes a single string argument, and you can pass a message which you want to display in a dialog box. It’s an optional argument, but you'll want to pass a sensible message—otherwise a blank dialog box with yes and no options will be displayed and probably won’t make any sense to your visitors. Usually, a message is in the form of a question, and a user is presented with two options to choose from.</p>
<p>In a dialog box, there are two buttons: <strong>OK</strong> and <strong>Cancel</strong>. If a user clicks on the OK button, the confirm method returns <code>true</code>, and if a user clicks on the cancel button, the confirm method returns <code>false</code>. So you can use the return value of the confirm method to know the user's selection. (If you want the buttons to say something different, like <strong>Yes</strong> and <strong>No</strong>, I'll show you how at the bottom of this post.)</p>
<p>Since the <code>window</code> object is always implicit, which is to say its properties and methods are always in scope, you can also call the <code>confirm</code> method, as shown in the following snippet.</p>
<pre class="brush: javascript noskimlinks noskimwords">var result = confirm(message);</pre>
<p>It’s important to note that the confirmation dialog is modal and synchronous. Thus, JavaScript code execution is stopped when the dialog is displayed, and it is continued after the user dismisses the dialog box by clicking on either the OK or cancel button.</p>
<p>So that’s an overview of the syntax of the <code>confirm</code> method. In the next section, we’ll go through a real-world example.</p>
<h2>A Real-World Example of the <code>confirm</code> Method</h2>
<p>In this section, we’ll go through a real-world example which demonstrates how you can use the <code>confirm</code> method in JavaScript.</p>
<p>Take a look at the following example.</p>
<p><iframe src="https://codepen.io/tutsplus/embed/mdmBRPY?height=447&amp;theme-id=light&amp;default-tab=html%2Cresult&amp;editable=true" width="100%" height="447" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<p>When a user clicks on the <strong>Delete My Profile!</strong> button, it calls the <code>deleteProfile</code> function. In the <code>deleteProfile</code> function, we’ve called the confirm method which presents the confirmation dialog box to the user.</p>
<p>Finally, if a user clicks on the <strong>OK</strong> button in that confirmation dialog, we’ll go ahead and redirect the user to the <code>/deleteProfile.php</code> page, which will perform the delete operation. On the other hand, if a user clicks on the <strong>Cancel</strong> button, we won’t do anything. JavaScript execution is halted until the user makes a choice and dismisses the confirmation dialog box.</p>
<p>So that’s how you can use the confirm method in JavaScript to present a yes or no selection dialog box.</p>
<h2>Confirm Yes or No With a Hidden Div</h2>
<p>There are some drawbacks of using the <code>confirm</code> method to get user confirmation. One is that the confirmation dialog will not be part of your app or website's UI. It will not use your branding or color scheme. It also cannot be customized, for example if you want to say <strong>Yes</strong> or <strong>No</strong> instead of <strong>OK</strong> and <strong>Cancel</strong>. Finally, the confirmation dialog is modal, so as long as it is being displayed, the user will not be able to interact with any other part of your app's interface.</p>
<p>Another way to confirm yes or no is with a hidden div on your page. Take a look at the following example:</p>
<p><iframe src="https://codepen.io/tutsplus/embed/MWmEJVO?height=447&amp;theme-id=light&amp;default-tab=html%2Cresult&amp;editable=true" width="100%" height="447" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<p>In this example, we have a hidden confirmation div with the id <code>confirm</code>. To show the div, we simply set its <code>hidden</code> property to <code>true</code>. We set <code>hidden</code> to <code>true</code> when we want to show the confirmation, and set it to <code>false</code> again to hide it.</p>
<p>As you can see, this method of confirming yes or no allows us more flexibility and customization than the <code>window.confirm</code> method.</p>
<h2>Conclusion</h2>
<p>Today, we discussed two ways to get user confirmation in JavaScript. First we looked at the simplest way: the <code>window.confirm</code> method. However, this doesn't create a great user experience. Then I showed you how to use a hidden div to get user confirmation with more control over how the confirmation will look and behave.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-07-09T17:10:07+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Change the URL in JavaScript: Redirecting]]></title>
      <link>//shineyrock.com/blog/read/how-to-change-the-url-in-javascript-redirecting</link>
      <guid>https://shineyrock.com/blog/read/how-to-change-the-url-in-javascript-redirecting#When:12:03:11Z</guid>
      <description><![CDATA[<div data-content-block-type="Wysi" class="content-block-wysi">
<p>In this quick article, we’ll discuss how to change the URL in JavaScript by redirecting. We’ll go through a couple of different methods that you can use to perform JavaScript redirects.</p>
<p>JavaScript is one of the core technologies of the web. The majority of websites use it, and all modern web browsers support it without the need for plugins. In this series, we’re discussing different tips and tricks that might help you in your day-to-day JavaScript development.</p>
<p>When you’re working with JavaScript, you often need to redirect users to a different page. JavaScript provides different ways of doing that.</p>
<p>Today, we’ll discuss how to perform URL redirections in vanilla JavaScript and with the jQuery library.</p>
<h2>How to Change the URL in Vanilla JavaScript</h2>
<p>In this section, we’ll go through the different built-in methods provided by JavaScript to implement URL redirection. In fact, JavaScript provides the <code>location</code> object, a part of the window object, which allows you to perform different URL-related operations.</p>
<h3>The <code>location.href</code> Method</h3>
<p>The <code>location.href</code> method is one of the most popular ways to perform JavaScript redirects. If you try to get the value of <code>location.href</code>, it returns the value of the current URL. Similarly, you can also use it to set a new URL, and users will then be redirected to that URL.</p>
<p>Let’s go through the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">console.log(location.href);
// prints the current URL

location.href = 'https://code.tutsplus.com';
// redirects the user to https://code.tutsplus.com</pre>
<p>As you can see, it’s fairly easy to redirect users with the <code>location.href</code> method. Since the <code>location</code> object is part of the <code>window</code> object, the above snippet can also be written as:</p>
<pre class="brush: javascript noskimlinks noskimwords">window.location.href = 'https://code.tutsplus.com';</pre>
<p>So in this way, you can use the <code>location.href</code> method to change the URL and redirect users to a different webpage.</p>
<h3>The <code>location.assign</code> Method</h3>
<p>The <code>location.assign</code> method works very similarly to the <code>location.href</code> method and allows you to redirect users to a different web page.</p>
<p>Let’s quickly see how it works with the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">location.assign('https://code.tutsplus.com');</pre>
<p>As you can see, it’s pretty straightforward. You just need to pass the URL in the first argument of the <code>assign</code> method, and it will redirect users to that URL. It’s important to note that the <code>assign</code> method maintains the state of the <code>History</code> object. We’ll discuss this in detail in the next section.</p>
<h3>The <code>location.replace</code> Method</h3>
<p>You can also use the <code>location.replace</code> method to perform JavaScript redirects. The <code>location.replace</code> method allows you to replace the current URL with a different URL to perform redirection.</p>
<p>Let’s see how it works with the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">location.replace('https://code.tutsplus.com');</pre>
<p>Although the <code>location.replace</code> method looks very similar to the <code>location.href</code> and <code>location.assign</code> methods of redirecting users to a different URL, there’s an important difference between them. When you use the <code>location.replace</code> method, the current page won’t be saved in the session, and it’s actually removed from the JavaScript <code>History</code> object. So users won’t be able to use the back button to navigate to it.</p>
<p>Let’s try to understand it with the following example.</p>
<pre class="brush: javascript noskimlinks noskimwords">// let’s assume that a user is browsing https://code.tutsplus.com

// a user is redirected to a different page with the location.href method
location.href = 'https://design.tutsplus.com';

// a user is redirected to a different page with the location.replace method
location.replace('https://business.tutsplus.com');</pre>
<p>In the above example, we’ve assumed that a user is browsing the <code>https://code.tutsplus.com</code> webpage. Next, we have used the <code>location.href</code> method to redirect the user to the <code>https://design.tutsplus.com</code> webpage. Finally, we’ve used the <code>location.replace</code> method to redirect the user to the <code>https://business.tutsplus.com</code> webpage. Now, if the user clicks on the back button, it would go back to <code>https://code.tutsplus.com</code> instead of <code>https://design.tutsplus.com</code>, since we’ve used the <code>location.replace</code> method, and it has actually replaced the current URL with <code>https://business.tutsplus.com</code> in the <code>History</code> object.</p>
<p>So you should understand the difference between <code>location.replace</code> and other methods before you use them. You can’t use them interchangeably since the <code>location.replace</code> method alters the state of the JavaScript <code>History</code> object. And thus, if you want to preserve the state of the <code>History</code> object, you should use other methods of redirecting users.</p>
<h2>How to Perform URL Redirections With jQuery</h2>
<p>Although vanilla JavaScript offers enough options when it comes to URL redirection, if you’re still wondering how to do it with the jQuery library, we’ll quickly go through it in this section.</p>
<p>In jQuery, you can use the <code>attr</code> method to perform redirection, as shown in the following snippet.</p>
<pre class="brush: javascript noskimlinks noskimwords">$(location).attr('href', 'https://design.tutsplus.com');</pre>
<p>As you can see, it’s fairly easy to redirect users with jQuery!</p>
<p>So that’s it for the different ways of performing JavaScript redirects. And with that, we’ve reached the end of this quick article as well.</p>
<h2>Conclusion</h2>
<p>Today, we discussed how you can implement JavaScript redirects. We discussed different methods that you can use to perform JavaScript redirects, along with some examples.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-06-19T12:03:11+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[15+ Best WordPress Twitter Widgets]]></title>
      <link>//shineyrock.com/blog/read/15-best-wordpress-twitter-widgets</link>
      <guid>https://shineyrock.com/blog/read/15-best-wordpress-twitter-widgets#When:02:58:18Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>As a website owner, you should always try to use all the tools at your disposal to increase visitor traffic to your website. For many websites, more traffic drives up revenue to further expand business or improve the quality of the services you currently provide. Social media plays an important role when it comes to driving traffic to a website.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-timeline-feed-wordpress-plugin/25422800"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg" alt="Try this new WordPress Twitter plugin for your website." loading="lazy" width="870px" height="449px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg" alt="Try this new WordPress Twitter plugin for your website." loading="lazy" width="650px" height="338px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg" alt="Try this new WordPress Twitter plugin for your website." loading="lazy" width="380px" height="202px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin-intro1.jpg 2x"></a>
<figcaption>Try this <a href="https://codecanyon.net/item/twitter-timeline-feed-wordpress-plugin/25422800" target="_blank" rel="noopener">new WordPress Twitter plugin</a> for your website.</figcaption>
</figure>
<p>Proper use of social media helps businesses in two ways:</p>
<ol>
<li>First, it brings visitors and clients from sources other than search engines.</li>
<li>Second, it gives followers a way to interact with you in places other than your website.</li>
</ol>
<p>One of the most popular social media platforms for engagement with customers is Twitter. In this post, I'll list the best <a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="noopener">Twitter widget WordPress plugins</a> that you can start using today.</p>
<h2>Top WordPress Twitter Widgets on CodeCanyon for 2021</h2>
<p>There are currently <a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="noopener">over 250 WordPress widgets related to Twitter</a> available on CodeCanyon. You can use them to do all kinds of things like showing tweet and follow buttons, fetching the feed of a Twitter user or hashtag, or automatically posting tweets about the latest article on your website.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="870px" height="564px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"></a>
<figcaption>Buy <a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="noopener">Twitter widget WordPress plugins</a> on CodeCanyon.</figcaption>
</figure>
<p>The price of these plugins starts from as low as $6. The best-sellers offer regular updates and a lot of features. You also get six months of free support. This should be enough to help you get started with your website.</p>
<h2>14 Best Twitter Widget WordPress Plugins for 2021</h2>
<p>Here are the top 14 WordPress widgets and plugins that you can buy on CodeCanyon and add to your website:</p>
<h3>1. <a href="https://codecanyon.net/item/twitter-timeline-feed-wordpress-plugin/25422800" target="_blank" rel="noopener">Twitter Timeline Feed WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-timeline-feed-wordpress-plugin/25422800"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg" alt="Twitter Timeline Feed WordPress Plugin" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg" alt="Twitter Timeline Feed WordPress Plugin" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg" alt="Twitter Timeline Feed WordPress Plugin" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/27127/image-upload/Twitter%20Timeline%20Feed%20WordPress%20Plugin.jpg 2x"></a></figure>
<p>This new Twitter feed widget for WordPress is super easy to set up and customize. It's the best Twitter plugin for WordPress if you're just starting to use these tools.</p>
<p>This WP Twitter plugin stands out because it's really user-friendly. You just enter any Twitter username and the plugin will automatically grab your tweets.</p>
<h3>2. <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener">Twitter Feed: WordPress Twitter Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"></a></figure>
<p>Looking for the best Twitter plugin for WordPress? This <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener">Twitter feed plugin by Elfsight</a> displays a Twitter feed for a specific profile or hashtag directly on a website. As a result, people start engaging more with your website, as well as the Twitter profile.</p>
<p>This Twitter feed WordPress plugin has multiple templates to display Twitter feeds on your website. You can display these feeds for any username you want or any hashtag that your website visitors and clients are likely to use.</p>
<p>Sometimes, visitors might not directly express their satisfaction with your service on your website. If your clients usually tweet good things about you on Twitter, you can use this plugin to display those tweets on your website as testimonials.</p>
<p>The Twitter card plugin for WordPress is fully compatible and works with all themes, including many popular ones that you find on CodeCanyon. Ensure that you take a look at the Elfsight Twitter feed widget WordPress plugin!</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-responsive-wordpress-themes--cms-29973"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">31+ Best Responsive WordPress Themes (For Sites in 2021)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li></ul>
<h3>3. <a href="https://codecanyon.net/item/easy-social-share-buttons-for-wordpress/6394476" target="_blank" rel="noopener">Easy Social Share Buttons for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-social-share-buttons-for-wordpress/6394476"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg" alt="Easy Social Share Buttons for WordPress" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg" alt="Easy Social Share Buttons for WordPress" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg" alt="Easy Social Share Buttons for WordPress" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/27127/image-upload/Easy%20Social%20Share%20Buttons%20for%20WordPress.jpg 2x"></a></figure>
<p>Looking for the best Twitter share plugin WordPress? This is one of the best-selling and best-rated WP Twitter plugins. The Twitter share plugin WordPress is packed with everything you need to connect your website to social media. </p>
<p>Easy Social Share Buttons is compatible with over 50 social media networks and offers plenty of design options with endless customization.</p>
<h3>4. <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener">AccessPress Twitter Feed Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/access_press.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/access_press.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/access_press.jpg 2x"></a></figure>
<p>The <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener">AccessPress Twitter Feed Pro WordPress plugin</a> also allows you to showcase Twitter feeds on a website. The feed may come from a single user account, multiple user accounts, or specific hashtags.</p>
<p>The Twitter feed widget WordPress plugin has three different modes or layouts—called default mode, slider mode, and ticker mode—to display the latest tweets from your feed.</p>
<p>There are more than 20 different templates for displaying the feed, and they all look absolutely stunning. You can easily choose a template that looks great on your own website.</p>
<p>The Twitter card plugin for WordPress also added a lot of new features with its recent update. This includes things like showing user cards, displaying retweet information, and a shortcode generator to make the plugin as user-friendly as possible.</p>
<h3>5. <a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener">Twitter Plus: Plugin WordPress Twitter Add-On</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"></a></figure>
<p>The <a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener">Twitter Plus</a> WordPress plugin makes it incredibly easy for you to add Twitter buttons to any post or page on your website. It will automatically add Twitter buttons for tweet, follow, mention, or hashtags on all pages and posts that you select.</p>
<p>You can also choose to show either the username or the follower count (or both) on the follow buttons. The WP Twitter plugin lets you choose the buttons that you want to show on different posts. You don't have to show all four of them everywhere. Just pick the ones you like and tell the plugin to add them either at the top or bottom of your page or post.</p>
<h3>6. <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener">WordPress to Twitter: Twitter Bot</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"></a></figure>
<p>Running and maintaining a website takes a lot of work. Therefore, it makes sense to automate some simple tasks and use the time you save to improve the website.</p>
<p>The <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener">WordPress to Twitter</a> plugin allows you to do exactly that. Once you purchase and install the Twitter comments WordPress plugin, you can set it up to tweet different types of posts from categories that you select.</p>
<p>You can specify the delay time that will determine the interval between different tweets. You can also tell the plugin if it should include the post title or link in the tweets. Each tweet can also contain some custom additional text, a mention, or hashtags.  All these features make this Twitter comments WordPress plugin a good tool to save time and automate some of your social media outreach workload.</p>
<h3>7. <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener">Twitter Feed Grid With Carousel for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"></a></figure>
<p>This is yet another plugin that you can use to show the Twitter feed for any particular user or hashtag. However, there are a few things that make this one different from the others.</p>
<p>You can either show the Twitter feed as a grid or as a carousel. When shown as a grid, the plugin comes with a bunch of options to control things like the number of columns on desktops, tablets, and mobile devices. You can also choose to use a box layout or a full-width layout.</p>
<p>The Twitter card plugin for WordPress comes with seven different grid styles to display the feed. When visitors hover over any tweet in the feed, the plugin will display social share buttons to allow users to directly share the tweets on their favorite social media platform.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="870px" height="360px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="650px" height="272px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="380px" height="164px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"></figure>
<p>The Carousel also offers eight more completely different layouts to display a bunch of tweets on the website. You should definitely check out <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener">the live preview</a> of this plugin.</p>
<h3>8. <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener">Social Locker for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"></a></figure>
<p>Almost every website places social share buttons somewhere on its pages in the hope that users will share the content that they like. While some people do click these share buttons, most visitors just ignore them.</p>
<p>This WP Twitter plugin, called <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener">Social Locker for WordPress</a>, can actually help you get more people to share your articles. The basic idea is that some of the content on the webpage is hidden behind a message that asks people to either tweet about the article, like it, or follow you on Facebook. Whichever option they choose, it will help you get more visibility on social media platforms.</p>
<p>Besides articles, you can use it to lock all kinds of things like videos, PDFs, videos, and download files. Give the plugin a try, and see your Twitter followers go up!</p>
<h3>9. <a href="https://codecanyon.net/item/easy-twitter-embedded-feed/25548193" target="_blank" rel="noopener">Easy Twitter Embedded Feed</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-twitter-embedded-feed/25548193"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"></a>
<figcaption>Easy Twitter Embedded Feed</figcaption>
</figure>
<p>Sometimes all you need is something simple, and simplicity works best. If you're looking for a simple WordPress Twitter Widget to display your recent tweets, some solutions are overkill and a little too complex.</p>
<p>Easy Twitter Embedded Feed is a great little Twitter card plugin for WordPress that enables the use of shortcodes for embedding a Twitter feed. Customize the height and width. This comes with multi-language support.</p>
<h3>10. <a href="https://codecanyon.net/item/wp-social-stream-designer/26344658" target="_blank" rel="noopener">Social Stream Designer</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-social-stream-designer/26344658"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"></a>
<figcaption>Social Stream Designer</figcaption>
</figure>
<p>Social Stream Designer is ideal if you're looking for a WordPress Twitter plugin to showcase your tweets.</p>
<p>Made by an Envato Elite Author, Social Stream Designer gives you four templates with variations and six layouts. Choose from grid, list, masonry, horizontal slider, vertical slider, and timeline. And customize further with drag-and-drop functionality. Great if you're looking for a Twitter feed carousel.</p>
<p>It's not just Twitter, Social Stream Designer is the go-to Twitter comments WordPress plugin for integrating social networks on your WordPress site.</p>
<h3>11. <a href="https://codecanyon.net/item/twitter-tweets-pro/22679508" target="_blank" rel="noopener">Twitter Tweets Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-tweets-pro/22679508" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"></a>
<figcaption>Twitter Tweets Pro</figcaption>
</figure>
<p>Twitter Tweets Pro is an advanced Twitter plugin for WordPress Twitter feeds. It displays Twitter feeds on a WordPress site and can be customized to match the site. It may support multiple Twitter accounts without limitation. Features and benefits include:</p>
<ul>
<li>multiple Twitter feeds with no limitations</li>
<li>feeds of multiple users, hashtags, or search terms</li>
<li>filter tweets by hashtag or words</li>
<li>display tweets in a slider</li>
<li>configurable number of tweets to display</li>
<li>load more tweets</li>
<li>feed background color</li>
<li>tweet background color</li>
<li>tweet font color</li>
<li>tweet actions (reply, retweet, like)</li>
<li>share tweets on social media</li>
</ul>
<h3>12. <a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292" target="_blank" rel="noopener">WordPress Any Contact Us</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"></a>
<figcaption>WordPress Any Contact Us</figcaption>
</figure>
<p>WordPress Any Contact Us is a simple and powerful WordPress Twitter widget that gives you the ability to add awesome social shortcode buttons to any WordPress site. This means that website visitors can contact you easily via Twitter. </p>
<p>And it also includes contact methods via a range of other popular social media platforms, too! Increase your revenue by connecting with clients wherever they are:</p>
<ul>
<li>direct email</li>
<li>schedule call</li>
<li>shortcode and HTML in popup</li>
<li>typing animation</li>
<li>smart message popup</li>
<li>fully customizable</li>
<li>smooth animations</li>
<li>GDPR-ready</li>
<li>beautifully responsive</li>
<li>WhatsApp, Skype, Telegram, Twitter, and much more…</li>
<li>unlimited social contact</li>
<li>24/7 premium support</li>
</ul>
<h3>13. <a href="https://codecanyon.net/item/woocommerce-save-and-share-cart-plugin/29150907" target="_blank" rel="noopener">WooCommerce Save and Share Cart Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-save-and-share-cart-plugin/29150907"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg" alt="WooCommerce Save and Share Cart Plugin" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg" alt="WooCommerce Save and Share Cart Plugin" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg" alt="WooCommerce Save and Share Cart Plugin" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/27127/image-upload/WooCommerce%20Save%20and%20Share%20Cart%20Plugin.jpg 2x"></a></figure>
<p>If you have a WooCommerce online store, a Twitter share plugin WordPress can be super helpful. </p>
<p>Would you like your customers to share what's on the shopping cart from your store? This is the best Twitter plugin for WordPress for that. Users can easily save their order and share it on social media. Check out this plugin WordPress Twitter add-on!</p>
<h3>14. <a href="https://codecanyon.net/item/fs-poster-wordpress-auto-poster-scheduler/22192139" target="_blank" rel="noopener">FS Poster: WordPress Auto Poster</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/fs-poster-wordpress-auto-poster-scheduler/22192139"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg" alt="FS Poster - WordPress Auto Poster" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg" alt="FS Poster - WordPress Auto Poster" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg" alt="FS Poster - WordPress Auto Poster" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/27127/image-upload/FS%20Poster%20-%20WordPress%20Auto%20Poster.jpg 2x"></a></figure>
<p>FS Poster is a top WordPress Twitter plugin. This Twitter widget WordPress add-on supports Facebook, Instagram, Twitter, Pinterest, LinkedIn, Telegram, Medium, Reddit, and more.</p>
<p>This plugin actually provides 14 services in one. Be sure to check this top-selling Twitter share plugin for WordPress.</p>
<h2>3 Free WordPress Twitter Plugins</h2>
<p>If you're not sure about buying premium plugins right now, there are also many free WordPress Twitter plugins. However, they generally have some downsides like fewer features and slow support—if it's provided at all.</p>
<p>Now, here are some free WordPress Twitter plugins that you can try.</p>
<h3>1. <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_self">Custom Twitter Feeds</a>
</h3>
<p>You can use the Custom Twitter Feeds plugin to display customizable and responsive tweets. The content of these tweets is also crawlable by search engines. The source of the feed can be any user or a specific hashtag.</p>
<h3>2. <a href="https://wordpress.org/plugins/wp-to-twitter/" target="_self">WP to Twitter</a>
</h3>
<p>The WP to Twitter plugin helps post tweets from WordPress to Twitter. You can also do a couple of other things with it, like displaying your recent tweets in the sidebar.</p>
<h3>3. <a href="https://wordpress.org/plugins/social-locker/" target="_self">OnePress Social Locker</a>
</h3>
<p>The OnePress Social Locker WordPress plugin is simply a free version of the premium Social Locker plugin on CodeCanyon. It has limited features, but it should give you an idea of its capabilities.</p>
<h2>Tips for Using Twitter Widgets and Plugins</h2>
<p>There are a couple of things that you should be aware of when using these WordPress Twitter plugins on your website.</p>
<h3>1. Don't Fill Your Website With Twitter Feeds</h3>
<p>It may sound tempting to add Twitter feeds from different accounts and hashtags on your webpages because you get automatically generated content. However, don't overdo it. The feeds have to add some value to the website. If the visitors only wanted to see the Twitter feeds, they would just go to Twitter!</p>
<h3>2. Don't Put All Your Content Behind Social Lockers</h3>
<p>It is also important to not put all your content behind a social locker. Use it only when you have something unique and useful to offer. If every article on your website is behind a social locker, people will just start visiting your competition.</p>
<h3>3. Don't Use Too Many Social Sharing Buttons</h3>
<p>Unless you are focusing your marketing campaign exclusively on Twitter, you should not put the tweet, follow, mention, and other such buttons on every page. This, when combined with like and follow buttons from other networks, will become very distracting.</p>
<h2>Explore More Cool WordPress Widgets and Resources</h2>
<p>This has been a selection of <a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="noopener">top WordPress Twitter plugins</a> from CodeCanyon. Are you looking for even more WordPress widgets for your website? Here are more awesome resources.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/what-is-a-widget-in-wordpress--cms-34620"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/34620/preview_image/galleries.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/34620/preview_image/galleries.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/34620/preview_image/galleries.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/34620/preview_image/galleries.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/34620/preview_image/galleries.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/34620/preview_image/galleries.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">What Is a Widget in WordPress?</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/10-best-wordpress-facebook-widgets--cms-27289"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1225/posts/27289/preview_image/facebook%20wordpress%20widget.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">10 Best WordPress Facebook Widgets (And 5 Free Plugins)</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/twitter-facebook-instagram-adding-social-media-icons-to-wordpress--cms-34471"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/34471/preview_image/twitter-facebook-instagram-adding-social-media-wordpress.png 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">How to Add Social Media Icons to WordPress</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/7-best-weather-wordpress-widgets-plugins--cms-28813"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28813/preview_image/weather.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28813/preview_image/weather.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28813/preview_image/weather.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28813/preview_image/weather.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/28813/preview_image/weather.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/28813/preview_image/weather.png 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">15 Best WordPress Weather Widgets &amp; Plugins (With 5 Free)</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/wordpress-community-plugins-of-the-year--cms-33133"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33133/preview_image/community%20plugins.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">12 Best WordPress Community Plugins for 2021</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/5-ways-to-take-better-control-of-your-wordpress-website--cms-31404"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/31404/preview_image/pre.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/31404/preview_image/pre.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/31404/preview_image/pre.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/31404/preview_image/pre.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/31404/preview_image/pre.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/31404/preview_image/pre.png 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">5 Ways to Take Better Control of Your WordPress Website</div>
<div class="roundup-block__author">Eric Karkovack</div></a></li>
</ul>
<h2>Set Up Your Twitter Widget Today</h2>
<p>I hope that this article helped you find the perfect WordPress Twitter plugin for your website. This small list of plugins covers all the important things that you might want to do, like showing your Twitter feed on your website or giving users an easy way to share your content on Twitter.</p>
<p>If you're looking for something that isn't covered in this article, make sure you check out some of the other <a href="https://codecanyon.net/category/wordpress/social-networking" target="_self">best-selling WordPress social networking plugins and widgets</a> on CodeCanyon.</p>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/maria-villanueva" target="_blank" rel="noopener">Maria Villanueva</a>. Maria is a staff writer with Envato Tuts+.</em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-06-08T02:58:18+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[27 Best Tab and Accordion Widget Plugins for WordPress (Free &amp; Premium)]]></title>
      <link>//shineyrock.com/blog/read/27-best-tab-and-accordion-widget-plugins-for-wordpress-free-premium</link>
      <guid>https://shineyrock.com/blog/read/27-best-tab-and-accordion-widget-plugins-for-wordpress-free-premium#When:13:33:35Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Your website's content should be organized and beautiful. By adding a tab or accordion widget plugin to your WordPress website, you will be able to display your website's content in an elegant way. </p>
<p>An interactive accordion and tab plugin can tidy up the design and readability of your webpages.</p>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=6kXrUXDqZiY">
            <iframe data-src="https://www.youtube.com/embed/6kXrUXDqZiY?rel=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=6kXrUXDqZiY&amp;feature=emb_title" target="_blank">
              How to Build a WordPress Accordion FAQ Page
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/6kXrUXDqZiY/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<p>Accordions and tabs are great ways to communicate text-heavy information in a stylish and condensed way. Keeping your website clutter-free and interactive should be the main priority for your website, and accordions and tabs help you accomplish this. </p>
<p>Before you head over to <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a> and <a href="https://elements.envato.com/wordpress/plugins/user+interface/properties-responsive+retina-ready/sort-by-popular" target="_blank" rel="noopener">Envato Elements</a> to find the right tabs and accordion widget plugins, let's explore the benefits of a <a href="https://elements.envato.com/subscribe/create-account" target="_blank" rel="noopener">monthly subscription to Envato Elements</a>. </p>
<h2>Envato Elements: Unlimited Downloads</h2>
<p>Envato Elements is a service that provides an <a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">unlimited download subscription</a>, meaning that you are free to download as many items as you like from millions of digital assets. This includes premium WordPress themes and plugins, stock photography, royalty-free audio, stock video, and graphics.</p>
<p>The subscription is covered by simple commercial licensing that gives you the rights to use the item in a broad variety of projects, including those of a commercial nature.</p>
<p>The licensing is future-proof, meaning even if you unsubscribe and can't download items from Envato Elements any more, any existing uses that you registered are still covered.</p>
<figure class="post_image"><a href="https://elements.envato.com/"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." width="870px" height="520px" loading="lazy"></a></figure>
<p><a class="call-to-action-btn call-to-action-btn-primary" href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self" rel>Subscribe Today</a> </p>
<p><a href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self">Subscribe today</a> and start creating or learn more about why <a href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702" target="_self">Envato Elements is Great for WordPress Developers</a>! </p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">40 Reasons Envato Elements Is Great for WordPress Developers</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<p>At Envato Elements and <a href="https://codecanyon.net/" target="_blank" rel="external noopener">CodeCanyon</a>, you will be able to choose from a library of premium <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">WordPress accordion plugins</a> and find a tab and accordion plugin that will fit your website's theme and allow you to display your website's information without crowding your page's designs. </p>
<p>These powerful tab and accordion plugins allow you to display your website's text and media in a systematic order that fits your particular website. These widgets and plugins come with plenty of features that can enhance your website, including:</p>
<ul>
<li>pagination</li>
<li>animated layers</li>
<li>customizable columns and rows</li>
<li>touch-enabled mobile functionality </li>
<li>lightboxes</li>
</ul>
<p>Let's look at some premium tab and accordion plugins available on Envato Elements and <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">CodeCanyon</a>.</p>
<h2><strong>WordPress Tab and Accordion Plugins on Envato Elements </strong></h2>
<h3>1. <a href="https://elements.envato.com/faq-accordions-for-elementor-TXVL9KY" target="_blank" rel="noopener">FAQ Accordions for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/faq-accordions-for-elementor-TXVL9KY"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="870px" height="584px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="650px" height="438px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"></a></figure>
<p>This Elementor widget adds an FAQ accordion to your in a few simple clicks and customizes it to fit your website design. You can build yours according using any of five customizable templates. You can add schema markup automatically for your questions block and information will display as rich snippets in Google search. Don't forget to make your text vibrant by customizing fonts, color, typography, alignment, and more. There is an icon library at your disposal, including SVG.</p>
<p>Your FAQs will look great on all devices and all modern browsers. </p>
<h3>2. <a href="https://elements.envato.com/accordion-footer-menu-widget-for-elementor-Z5SE2JU" target="_blank" rel="noopener">Accordion Footer Menu Widget For Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-footer-menu-widget-for-elementor-Z5SE2JU/preview"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="870px" height="589px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="650px" height="442px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="380px" height="261px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"></a></figure>
<p>Thanks to Accordion Footer Menu Widget, you don't need coding skills to build a great footer menu for your desktop and mobile website. Menus built using this responsive custom list menu widget for Elementor work perfectly on both desktop and mobile. On desktop they will display as an expanded menu, and they'll transform into a collapsed accordion on mobile. You can style your headings, typography, and icons to evoke the feeling of your website.  </p>
<h3>3. <a href="https://elements.envato.com/accordion-faq-wordpress-plugin-WCW4ZN9" target="_blank" rel="noopener">Accordion FAQ WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-faq-wordpress-plugin-WCW4ZN9"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="870px" height="623px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="650px" height="467px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="380px" height="275px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"></a></figure>
<p>Accordion FAQ WordPress plugin allows you to present an attractive FAQ section on your website and leave your visitors satisfied. The drag and drop makes it easy for you to build multiple FAQ pages, reorder each category, choose between accordion and list style, and customize how your FAQ is presented. You can modify the colors, icons, border radius, and font sizes. You can also set up FAQs with a shortcode generator. The plugin is translation-ready using Poedit tools. It's also well documented. </p>
<h3>4. <a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ" target="_blank" rel="noopener">Accordion Slider PRO</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="870px" height="556px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="650px" height="417px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="380px" height="247px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"></a></figure>
<p>You just need Accordion Slider Pro to create sleek presentations that blow engagement on your website through the roof. Images, YouTube videos, and Vimeo videos will open in a lightbox window. The images can be deep linked and can also be shared on Facebook, Twitter, or Pinterest. You can adjust the width and height of sliders, add image titles and descriptions, and employ smooth zoom effects. The descriptions will be indexed by search engines and increase your SEO ranking. The plugin will adapt to the width of any device, screen, and orientation. It has full-width or centered options.</p>
<h3>5. <a href="https://elements.envato.com/wordpress-accordion-faq-plugin-CFPRDT9" target="_blank" rel="noopener">WordPress Accordion FAQ Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-accordion-faq-plugin-CFPRDT9"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="870px" height="586px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"></a></figure>
<p>With this plugin, you can anticipate and provide comprehensible, easy-to-find answers to visitors' questions. The FAQ section can be set up as accordion, list, or multicolumn. Choose the Accordion layout to show answers on click, the list layout to display answers below questions, or the multicolumn layout to automatically spread the content into columns. Choose from four customizable styles and 36 category icons. You can modify the question text, answer text, and category names. The plugin is Schema-ready to help boost your SEO. </p>
<h3>6. <a href="https://elements.envato.com/product-tabs-for-woocommerce-9NVK23S" target="_blank" rel="noopener">Product Tabs for WooCommerce</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/product-tabs-for-woocommerce-9NVK23S"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="870px" height="545px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="650px" height="409px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="380px" height="242px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"></a></figure>
<p>This plugin allows you to create WooCommerce product page tabs with tables from CSV files that you can easily update. The tabs support image, video, text, HTML, or shortcode. You can also easily create tabs from product meta keys, and even conditional tabs. The plugin supports translation. </p>
<h3>7. <a href="https://elements.envato.com/woocommerce-products-tab-for-elementor-NGXQ5WU" target="_blank" rel="noopener">WooCommerce Products Tab for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/woocommerce-products-tab-for-elementor-NGXQ5WU"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="870px" height="581px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="650px" height="436px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"></a></figure>
<div class="_3SYpB6Pl">
<p>Using WooCommerce Products Tab, you can build your WooCommerce products tabs in one minute.</p>
<p>Features include: </p>
<ul>
<li>custom color for each tab </li>
<li>responsive</li>
<li>animations</li>
<li>translation-ready (includes .po/.mo files)</li>
</ul>
</div>
<h2>WordPress Tab and Accordion Plugins on CodeCanyon</h2>
<p>Discover CodeCanyon's extensive library of the best tab and <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">accordion WordPress widgets</a> and plugins ever created. With a cheap one-time payment, you can purchase one of these high-quality WordPress widgets and plugins and draw in more traffic to your website. </p>
<p>Here are a few of the best-selling tab and accordion WordPress widgets available on CodeCanyon for 2021.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="870px" height="547px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/accord.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="650px" height="411px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/accord.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="380px" height="243px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/accord.jpg 2x"></a>
<figcaption>Best-selling tab and accordion widgets and plugins available on CodeCanyon </figcaption>
</figure>
<h3>8. <a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="870px" height="471px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="650px" height="354px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="380px" height="211px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"></a></figure>
<p>The WooCommerce Category Accordion is designed specifically for WooCommerce users. It can be used as a widget or shortcode to list product categories and subcategories. The best features of this WordPress accordion are:</p>
<ul>
<li>supports unlimited categories and subcategories</li>
<li>14 Font Awesome icons included</li>
<li>ability to highlight current category option</li>
<li>sort by ascending or descending order</li>
</ul>
<p><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a> is ideal for users who want to organize their products or services into categories and subcategories to make it easier for customers to navigate their site.</p>
<h3>9. <a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs for Visual Composer</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="870px" height="468px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="650px" height="352px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="380px" height="210px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"></a></figure>
<p>Elegant Tabs for Visual Composer is an add-on for the WPBakery WordPress plugin (formerly Visual Composer). This WordPress tabbed content widget lets you add any shortcode to multiple tabs and offers loads of customization like different colors, icons, and backgrounds for different sections or tabs. Its best features include:</p>
<ul>
<li>vertical tabs</li>
<li>drag and drop any WPBakery elements inside the tab content</li>
<li>supports deep linking</li>
<li>ten different styles of tabs and unlimited variations</li>
<li>and more</li>
</ul>
<p><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs</a> is also available for <a href="https://codecanyon.net/item/elegant-tabs-for-fusion-builder/18795917?s_rank=1">Fusion Builder</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-woocommerce/9846605?s_rank=2">WooCommerce</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-cornerstone/16825384?s_rank=5">Cornerstone</a>, and <a href="https://codecanyon.net/item/elegant-tabs-for-beaver-builder/17965885?s_rank=7">Beaver </a></p>
<h3>10. <a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self">Side Tabs: Layered Popups Add-On</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="870px" height="452px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="650px" height="340px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="380px" height="203px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"></a></figure>
<p>A little different than most of the plugins on this list, Side Tabs delivers the features you’d expect from a WordPress tabs plugin, but instead of existing within your site’s content, they live at the edge of your screen. This unique presentation creates a number of unusual uses.</p>
<p>One of the most interesting ways you can use Side Tabs is to present a constant access point to content throughout an entire page (or several pages). Besides that, this WordPress tabbed content widget also makes a great tool for offering calls to action and similar content without being too intrusive.</p>
<p>With a ton of customization and animation options available out of the box, this is one of the best tab plugins for WordPress. It works brilliantly for anyone looking to add a fresh way of presenting information to their site.</p>
<h3>11. <a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723" target="_blank" rel="noopener">Easy Side Tab Pro: Responsive Floating Tab Plugin For WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="870px" height="251px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="650px" height="191px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="380px" height="118px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723" target="_blank" rel="noopener">Easy Side Tab Pro</a> is a call-to-action floating tabs plugin for WordPress which allows you to create any number of quick side tabs and stick them to the vertical or horizontal edge position. When the tab is clicked, the popup associated with that tab pops out.</p>
<p>From the back-end interface, you can customize 15 popup templates by choosing a variety of shapes and adding animations and transitions. And to each tab you can assign functionalities like a Twitter feed, social share icons, recent posts, WooCommerce products, custom shortcodes, a subscription form, and internal or external links. </p>
<h3>12. <a href="https://codecanyon.net/item/bwl-knowledge-base-manager/7972812" target="_blank" rel="external noopener">BWL Knowledge Base Manager WordPress Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bwl-knowledge-base-manager/7972812" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="870px" height="797px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="650px" height="596px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="380px" height="349px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"></a></figure>
<p>This is one of the best tab plugins for WordPress we've got. The WordPress tabs plugin is user-friendly, fast, and fully responsive. People love this WordPress tabbed content widget because:</p>
<ul>
<li>no configuration is required</li>
<li>responsive grid system</li>
<li>AJAX-based searching system</li>
<li>animated and responsive tabs</li>
<li>extensive Options panel</li>
<li>unlimited customization</li>
<li>lifetime support and updates</li>
</ul>
<h3>13. <a href="https://codecanyon.net/item/zf-wordpress-category-accordion/8849504" target="_blank" rel="external noopener">ZF WordPress Category Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/zf-wordpress-category-accordion/8849504" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="870px" height="360px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="650px" height="272px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="380px" height="164px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"></a></figure>
<p>This WordPress accordion plugin was created to improve your WooCommerce website with a better navigation experience. </p>
<p>ZF WordPress Category Accordion plugin allows you to show all your categories as WooCommerce category accordions. Check this WordPress accordion's nice features:</p>
<ul>
<li>supports WooCommerce category accordion</li>
<li>supports WordPress category accordion</li>
<li>pages accordion (accordion menus)</li>
<li>translation-ready</li>
<li>support shortcodes and widgets</li>
<li>toggle accordions</li>
<li>seven default color schemes</li>
</ul>
<h3>14. <a href="https://codecanyon.net/item/css3-accordions-for-wordpress/716291" target="_blank" rel="external noopener">CSS3 Accordions For WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/css3-accordions-for-wordpress/716291" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="870px" height="672px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="650px" height="503px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="380px" height="296px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"></a></figure>
<p>This accordion WordPress plugin widget is entirely based on CSS3. It's one of the best accordion plugins for WordPress because it comes with an intuitive admin panel, horizontal and vertical layouts, and unlimited color skins. </p>
<p>You can put any type of content inside the expandable section, including lists, images, or any custom HTML code.</p>
<h3>15. <a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="870px" height="439px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="650px" height="331px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="380px" height="197px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"></a></figure>
<p>Responsive Searchable 3 Level Accordion is a simple WordPress accordion plugin that can be used anywhere on your site. It will appeal to users who are looking to arrange content in accordion style within a post, sidebar, footer, etc. The best features of this accordion and accordion slider are:</p>
<ul>
<li>can be used as a widget or shortcode</li>
<li>three nesting levels available</li>
<li>five ready-made styling options</li>
<li>allows users to type in the searched phrase</li>
</ul>
<p><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion For WordPress</a> is a low-fuss accordion plugin, and its standout features like three-level support and searchable content really set it apart.</p>
<h3>16. <a href="https://codecanyon.net/item/everest-tab-responsive-tab-plugin-for-wordpress/21235980" target="_blank" rel="noopener">Everest Tab: Responsive Tab Plugin For WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/everest-tab-responsive-tab-plugin-for-wordpress/21235980"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="870px" height="484px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="650px" height="364px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="380px" height="217px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"></a></figure>
<p>Using Everest Tab, you can show tabs within content or even transform your own custom HTML content into a tabbed layout easily. You can also create unlimited tabs and add tab components like HTML, social feeds, recent posts, WooCommerce products, contact form, Google Maps integration, and external shortcodes. In addition, you can enable deep linking for your tabs. </p>
<h3>17. <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9">Accordion FAQ WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="870px" height="452px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="650px" height="340px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="380px" height="203px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"></a></figure>
<p>FAQ pages are an important part of almost any website, and with this WordPress accordion plugin, you can fit a mountain of text behind a sleek and easily digestible display. This accordion plugin focuses on doing one thing, creating FAQ-style content easily, and it does it well. Here’s what you can expect to get with this WordPress tabs plugin:</p>
<ul>
<li>ability to quickly add multiple FAQ accordions throughout your site</li>
<li>easy drag-and-drop interface for reordering</li>
<li>color, icon, and font customization</li>
<li>built-in generator for creating shortcodes</li>
</ul>
<p>If you’re looking to add an FAQ section to your existing design, then the Accordion FAQ WordPress Plugin has you covered.</p>
<h3>18. <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="870px" height="468px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="650px" height="352px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="380px" height="210px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"></a></figure>
<p>WordPress Tabs and Accordions DZS is another of the best tab plugins for WordPress. It gives users access to both tab and accordion functions. Its best features are:</p>
<ul>
<li>full skins to fit every brand</li>
<li>WYSIWYG editor</li>
<li>unlimited color options for customization</li>
<li>iPhone, iPad, and Android optimized</li>
<li>and more</li>
</ul>
<p><a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a> is another great two-for-one WordPress tabbed content widget.</p>
<h3>19. <a href="https://codecanyon.net/item/ultimate-searchable-accordion-visual-composer-addon/14776465" target="_blank" rel="external noopener">Ultimate Searchable WordPress Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ultimate-searchable-accordion-visual-composer-addon/14776465" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="870px" height="429px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="650px" height="323px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="380px" height="193px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"></a></figure>
<p>This five-star-rated WordPress accordion plugin for WPBakery Page Builder is a crowd favorite. Some of its coolest features are:</p>
<ul>
<li>quick and easy installation</li>
<li>responsive accordion layouts</li>
<li>unique live content search</li>
<li>14+ smooth animations</li>
<li>6 pre-defined color themes</li>
<li>RTL support</li>
<li>lifetime support and updates</li>
</ul>
<h3>20. <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ With Category</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="870px" height="464px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="650px" height="349px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="380px" height="208px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"></a></figure>
<p>The Responsive FAQ With Category WordPress tabs plugin is specifically designed for users who want to add a Frequently Asked Questions area to their site and don’t want their visitors to have to scroll through an endless stream of text.</p>
<p>This WordPress tabbed content widget's best features include:</p>
<ul>
<li>FAQs can be arranged by category</li>
<li>15 customizable different designs to choose from</li>
<li>compatible with Visual Composer page builder and WooCommerce</li>
<li>two types of FAQ toggle icons: arrow or plus sign</li>
</ul>
<p>There’s no question that this one of the best tab plugins for WordPress and that <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a> is the answer to all your FAQ needs.</p>
<h3>21. <a href="https://codecanyon.net/item/wordpress-accordion-plugin-accordion-awesome-pro/32050180" target="_blank" rel="noopener">Accordion Awesome Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-accordion-plugin-accordion-awesome-pro/32050180"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="870px" height="850px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="650px" height="635px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="380px" height="372px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"></a></figure>
<p>Who said accordions should be boring? Accordion Awesome is a new addition to our selection of accordion plugins. It will help you create colorful, vibrant and stunning accordions for your website that display well on different web browsers and devices.</p>
<p>There are 13 templates to choose from. You can customize the colors of the text, description, icons, navigation background, active accordion background, and accordion content background.</p>
<p>You can insert accordions using shortcodes, Gutenberg blocks, or Elementor blocks. Your accordions can include pictures, animations, feature lists, and more. </p>
<h3>22. <a href="https://codecanyon.net/item/taber-tabs-for-elementor/30751652" target="_blank" rel="noopener">Taber: Tabs for Elementor</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/taber-tabs-for-elementor/30751652"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="870px" height="450px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="650px" height="339px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="380px" height="202px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"></a></figure>
<p>Taber is a WordPress plugin for Elementor that will help you create responsive tabs with any content. You can display the tabs in any possible style like the top, bottom, left, right, or even custom positions. You have five customizable templates.</p>
<p>You can customize the size, typography, colors, background, and border of your tabs. You can even add images, audio, and video. It's SEO-friendly and works well with all WordPress themes built on Elementor. The plugin includes pot files for quick translation to any language including RTL-oriented languages. </p>
<h2>5 Free Tab and Accordion WordPress Widgets and Plugins for Download in 2021</h2>
<p>The best features and most beautiful interfaces are found in the premium plugins from CodeCanyon. But, if you're on a budget or just want something simple, check out these free tab and accordion plugins for WordPress.</p>
<h3>1. <a href="https://wordpress.org/plugins/arconix-shortcodes/" target="_self">Arconix Shortcodes</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=695/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="715px" height="426px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1390/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="650px" height="388px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="380px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"></figure>
<p>Arconix Shortcodes is a very versatile accordion plugin and is a must-have if you cannot afford any of the premium plugins. With this plugin, you can add not only accordions but styled boxes, buttons, tabs, unordered lists, columns, and much more.</p>
<h3>2. <a href="https://wordpress.org/plugins/easy-accordion-free/" target="_self">Easy Accordion</a>
</h3>
<p>Easy Accordion is a responsive drag-and-drop accordion builder that will help you to display multiple accordions on your WordPress website. No coding is necessary to add the accordions to your website as everything is added through shortcodes.</p>
<h3>3. <a href="https://wordpress.org/plugins/accordions/" target="_self">Accordion</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="870px" height="580px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/end.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="650px" height="435px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/end.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="380px" height="257px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/end.png 2x"></figure>
<p>This accordion plugin can help you create different sections of your website, including but not limited to FAQs, a knowledge base, and a question &amp; answer section. You can change the colors, font size, and icons for each accordion.</p>
<h3>4. <a href="https://wordpress.org/plugins/squelch-tabs-and-accordions-shortcodes/" target="_self">Squelch Tabs and Accordions Shortcodes</a>
</h3>
<p>With the use of shortcodes, you can add horizontal accordions, vertical accordions, and tabs. This free plugin will help you save space on your webpages, make your website look more professional, and add an interactive component to your website.</p>
<h3>5. <a href="https://wordpress.org/plugins/shortcodes-ultimate/" target="_self">Shortcodes Ultimate</a>
</h3>
<p>Shortcodes Ultimate allows you to add many tools to your website. You can easily create tabs, buttons, boxes, sliders and carousels, and responsive videos. The plugin comes with over 50 shortcodes for you to implement. </p>
<h2>How to Add an FAQ Accordion to Your Website</h2>
<p>In this example, we are going to create an FAQ section for our online store using one of our best accordion plugins for WordPress.<strong> </strong></p>
<p>First, we need to create a category for our FAQ accordion so the plugin knows what content to add to each specific accordion. Once you have installed the <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363" target="_blank" rel="external noopener">Accordion FAQ WordPress plugin</a>, head on over to <strong>WP Dashboard &gt; FAQ &gt; Categories. </strong>In the name field, we will type "<strong>Online Store</strong>" and click the <strong>Add New Category</strong> button. </p>
<p>Next, we will click on <strong>WP Dashboard &gt; FAQ &gt; Add New. </strong>We will add our three FAQ entries this way. We will include the question in the title and the answer in the text editor. </p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="870px" height="600px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/dunnn.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="650px" height="450px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/dunnn.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="380px" height="266px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/dunnn.png 2x"></figure>
<p>For each of our entries, we will make sure to click the checkbox next to the category, <strong>Online Store</strong>, that we created to make sure we group the entries together. </p>
<p>Once we have added our three FAQ entries for our online store, it's time to add the accordion widget to a page. On an existing or new page or post, click on the <strong>Add Shortcode</strong> button on the top of the text editor. Choose <strong>Insert FAQs</strong> from the <strong>Select a Shortcode</strong> drop-down menu. From here, we will be given a basic group of settings for us to change. We will choose the <strong>Online Store</strong> category from the <strong>Faq Category </strong>option and change the <strong>Icon Background Color</strong> to blue. </p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="870px" height="817px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/850.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="650px" height="611px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/850.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="380px" height="358px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/850.png 2x"></figure>
<p>Click the <strong>Insert Shortcode</strong> button, and the shortcode will be added to the text editor. The FAQ accordion will now be displayed on your webpage for all your users to see!</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/1809/posts/34415/image/Screen%20Shot%202019-12-21%20at%2019.58.45]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-31T13:33:35+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[21 Best Tab and Accordion Widget Plugins for WordPress (Free &amp; Premium)]]></title>
      <link>//shineyrock.com/blog/read/21-best-tab-and-accordion-widget-plugins-for-wordpress-free-premium</link>
      <guid>https://shineyrock.com/blog/read/21-best-tab-and-accordion-widget-plugins-for-wordpress-free-premium#When:13:33:35Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Your website's content should be organized and beautiful. By adding a tab or accordion widget plugin to your WordPress website, you will be able to display your website's content in an elegant way. </p>
<p>An interactive accordion and tab plugin can tidy up the design and readability of your webpages.</p>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=6kXrUXDqZiY">
            <iframe data-src="https://www.youtube.com/embed/6kXrUXDqZiY?rel=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=6kXrUXDqZiY&amp;feature=emb_title" target="_blank">
              How to Build a WordPress Accordion FAQ Page
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/6kXrUXDqZiY/maxresdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<p>Accordions and tabs are great ways to communicate text-heavy information in a stylish and condensed way. Keeping your website clutter-free and interactive should be the main priority for your website, and accordions and tabs help you accomplish this. </p>
<p>Before you head over to <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a> and <a href="https://elements.envato.com/wordpress/plugins/user+interface/properties-responsive+retina-ready/sort-by-popular" target="_blank" rel="noopener">Envato Elements</a> to find the right tabs and accordion widget plugins, let's explore the benefits of a <a href="https://elements.envato.com/subscribe/create-account" target="_blank" rel="noopener">monthly subscription to Envato Elements</a>. </p>
<h2>Envato Elements: Unlimited Downloads</h2>
<p>Envato Elements is a service that provides an <a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">unlimited download subscription</a>, meaning that you are free to download as many items as you like from millions of digital assets. This includes premium WordPress themes and plugins, stock photography, royalty-free audio, stock video, and graphics.</p>
<p>The subscription is covered by simple commercial licensing that gives you the rights to use the item in a broad variety of projects, including those of a commercial nature.</p>
<p>The licensing is future-proof, meaning even if you unsubscribe and can't download items from Envato Elements any more, any existing uses that you registered are still covered.</p>
<figure class="post_image"><a href="https://elements.envato.com/"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." width="870px" height="520px" loading="lazy"></a></figure>
<p><a class="call-to-action-btn call-to-action-btn-primary" href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self" rel="">Subscribe Today</a> </p>
<p><a href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self">Subscribe today</a> and start creating or learn more about why <a href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702" target="_self">Envato Elements is Great for WordPress Developers</a>! </p>

<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">40 Reasons Envato Elements Is Great for WordPress Developers</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<p>At Envato Elements and <a href="https://codecanyon.net/" target="_blank" rel="external noopener">CodeCanyon</a> you will be able to choose from a library of premium <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">WordPress accordion plugins</a> and find a tab and accordion plugin that will fit your website's theme and allow you to display your website's information without crowding your page's designs. </p>
<p>These powerful tab and accordion plugins allow you to display your website's text and media in a systematic order that fits your particular website. These widgets and plugins come with plenty of features that can enhance your website, including:</p>
<ul>
<li>pagination</li>
<li>animated layers</li>
<li>customizable columns and rows</li>
<li>touch-enabled mobile functionality </li>
<li>lightboxes</li>
</ul>
<p>Let's look at premium tab and accordion plugins available on Envato Elements and <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">CodeCanyon</a>.</p>
<h2><strong>WordPress Tab and Accordion Plugins on Envato Elements </strong></h2>
<h3>1. <a href="https://elements.envato.com/faq-accordions-for-elementor-TXVL9KY" target="_blank" rel="noopener">FAQ Accordions for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/faq-accordions-for-elementor-TXVL9KY"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="870px" height="584px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="650px" height="438px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg" alt="FAQ Accordions for Elementor" loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/9344E58B-64D1-4468-8F39-521596AB92D2.jpeg 2x"></a></figure>
<p>This Elementor widget adds an FAQ accordion to your in a few simple clicks and customizes it to fit your website design. You can build your according using any of five customizable templates. You can add schema markup automatically for your questions block and information will display as rich snippets in Google search. Don't forget to make your text vibrant by customizing fonts, color, typography, alignment and more. There is an icon library at your disposal including SVG.</p>
<p>Your FAQs will look great on all devices and all modern browsers. </p>
<h3>2. <a href="https://elements.envato.com/accordion-footer-menu-widget-for-elementor-Z5SE2JU" target="_blank" rel="noopener">Accordion Footer Menu Widget For Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-footer-menu-widget-for-elementor-Z5SE2JU/preview"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="870px" height="589px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="650px" height="442px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg" alt="accordion-footer-menu-widget-for-elementor" loading="lazy" width="380px" height="261px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/945C0EB1-611F-42C1-86EC-8ED94E84A53F.jpeg 2x"></a></figure>
<p>Thanks to Accordion Footer Menu Widget you don't need coding skills to build a great footer menu for your desktop and mobile website. Menus build using this responsive custom list menu widget for Elementor work perfectly on both desktop and mobile. On text top they will display as expanded menu and transform into a collapse accordion on mobile. You can style your headings, typography, and icons to evoke the feeling of your website.  </p>
<h3>3. <a href="https://elements.envato.com/accordion-faq-wordpress-plugin-WCW4ZN9" target="_blank" rel="noopener">Accordion FAQ WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-faq-wordpress-plugin-WCW4ZN9"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="870px" height="623px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="650px" height="467px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg" alt="accordion-faq-wordpress-plugi" loading="lazy" width="380px" height="275px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/821DC795-717B-419C-A962-52D4C823FB08.jpeg 2x"></a></figure>
<p>According FAQ WordPress plugin allows you to present an attractive FAQ question on your website and leave your visitors satisfied. The drag and drop makes it easy for you to build multiple FAQ pages, reorder each category, choose between accordion and list style and customize how your FAQ is presented. You can modify colors, icons, border radius and font sizes. You can also set up FAQs with a shortcode generator. The plugin is translation ready using Poedit tools. It's also well documented. </p>
<h3>4. <a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ" target="_blank" rel="noopener">Accordion Slider PRO </a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="870px" height="556px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="650px" height="417px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="380px" height="247px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/8FF2D83B-EE58-4628-8E1F-D94890AA3DB1.jpeg 2x"></a></figure>
<p>You just need Accordion Slider Pro to create sleek presentations that blow engagement on your website through the roof. Images, YouTube videos and Vimeo videos will open in a lightbox window. The images can be deep linked and can also be shared on Facebook, Twitter or Pinterest. You can adjust width and height of sliders, add image titles and descriptions, and employ smooth zoom effects. The descriptions will be indexed by search engines and increase your SEO ranking. The plugin will adapt to the width of any device, screen, and orientation. It has full width or centered option.</p>
<h3>5. <a href="https://elements.envato.com/wordpress-accordion-faq-plugin-CFPRDT9" target="_blank" rel="noopener">WordPress Accordion FAQ Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-accordion-faq-plugin-CFPRDT9"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="870px" height="586px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg" alt="WordPress Accordion FAQ Plugin" loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/B988563B-A40C-4CA7-B415-B933B9E893A1.jpeg 2x"></a></figure>
<p>With this plugin you can anticipate and provide comprehensible, easy-to-find answers to visitors questions. The FAQ section can be set up as accordion, list, or multicolumn. The Accordion layout to show answers on click. List layout to display answers below questions. Multicolumn layout for automatic spreading the content into columns. Choose from four customizable styles and 36 category icons. You can modify text, answers texts and category names. The plugins is Schema ready to help boost your SEO. </p>
<h3>6. <a href="https://elements.envato.com/product-tabs-for-woocommerce-9NVK23S" target="_blank" rel="noopener">Product Tabs for WooCommerce</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/product-tabs-for-woocommerce-9NVK23S"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="870px" height="545px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="650px" height="409px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg" alt="Product Tabs for WooCommerce" loading="lazy" width="380px" height="242px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/93C5D91D-8116-4850-A612-51AEFBE0972D.jpeg 2x"></a></figure>
<p>This plugin allows you to create WooCommerce product page tabs with table from CSV files that you can easily update. The tabs support image, video, text, HTML or shortcode. You can also create tabs from product meta keys easily and even conditional tabs. The plugin supports translation. </p>
<h3>7. <a href="https://elements.envato.com/woocommerce-products-tab-for-elementor-NGXQ5WU" target="_blank" rel="noopener">WooCommerce Products Tab for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/woocommerce-products-tab-for-elementor-NGXQ5WU"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="870px" height="581px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="650px" height="436px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg" alt="woocommerce-products-tab-for-elementor" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/E9021017-57AA-48C8-BC48-FB63D83B27B7.jpeg 2x"></a></figure>
<div class="_3SYpB6Pl">
<p>Using WooCommerce Products Tab you can build your WooCommerce products tabs in 1 minute.</p>
<p>Features include: </p>
<ul>
<li>custom color for each tab </li>
<li>responsive</li>
<li>animations</li>
<li>translation ready (include .po/.mo files)</li>
</ul>
</div>
<div class="_1hKL3hOU">
<div class="M1RQGgnK _2awrLDg2"> </div>
</div>
<h2>WordPress Tab and Accordion Plugins on CodeCanyon</h2>
<p>Discover CodeCanyon's extensive library of the best tab and <a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener">accordion WordPress widgets</a> and plugins ever created. With a cheap one-time payment, you can purchase these high-quality WordPress widgets and plugins and draw in more traffic to your website. </p>
<p>Here are a few of the best-selling tab and accordion WordPress widgets available on CodeCanyon for 2021.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=accordion" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="870px" height="547px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/accord.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="650px" height="411px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/accord.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/accord.jpg" alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" loading="lazy" width="380px" height="243px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/accord.jpg 2x"></a>
<figcaption>Best-selling tab and accordion widgets and plugins available on CodeCanyon </figcaption>
</figure>
<h3>8. <a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="870px" height="471px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="650px" height="354px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg" alt="WooCommerce Category Accordion" loading="lazy" width="380px" height="211px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg 2x"></a></figure>
<p>The WooCommerce Category Accordion is designed specifically for WooCommerce users. It can be used as a widget or shortcode to list product categories and subcategories. The best features of this WordPress accordion are:</p>
<ul>
<li>supports unlimited categories and subcategories</li>
<li>14 Font Awesome icons included</li>
<li>ability to highlight current category option</li>
<li>sort by ascending or descending order</li>
</ul>
<p><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a> is ideal for users who want to organize their products or services into categories and subcategories to make it easier for customers to navigate their site.</p>
<h3>9. <a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs for Visual Composer</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="870px" height="468px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="650px" height="352px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg" alt="Elegant Tabs for Visual Composer" loading="lazy" width="380px" height="210px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg 2x"></a></figure>
<p>Elegant Tabs for Visual Composer is an add-on for the WPBakery WordPress plugin (formerly Visual Composer). This WordPress tabbed content widget lets you add any shortcode to multiple tabs and offers loads of customization like different colors, icons, and backgrounds for different sections or tabs. Its best features include:</p>
<ul>
<li>vertical tabs</li>
<li>drag and drop any WPBakery elements inside the tab content</li>
<li>supports deep linking</li>
<li>ten different styles of tabs and unlimited variations</li>
<li>and more</li>
</ul>
<p><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs</a> is also available for <a href="https://codecanyon.net/item/elegant-tabs-for-fusion-builder/18795917?s_rank=1">Fusion Builder</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-woocommerce/9846605?s_rank=2">WooCommerce</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-cornerstone/16825384?s_rank=5">Cornerstone</a>, and <a href="https://codecanyon.net/item/elegant-tabs-for-beaver-builder/17965885?s_rank=7">Beaver </a></p>
<h3>10. <a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self">Side Tabs: Layered Popups Add-On</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="870px" height="452px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="650px" height="340px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Side%20Tabs.jpg" alt="Side TabsLayered Popups Add-on" loading="lazy" width="380px" height="203px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Side%20Tabs.jpg 2x"></a></figure>
<p>A little different than most of the plugins on this list, Side Tabs delivers the features you’d expect from a WordPress tabs plugin, but instead of existing within your site’s content, they live at the edge of your screen. This unique presentation creates a number of unusual uses.</p>
<p>One of the most interesting ways you can use Side Tabs is to present a constant access point to content throughout an entire page (or several pages). Besides that, this WordPress tabbed content widget also makes a great tool for offering calls to action and similar content without being too intrusive.</p>
<p>With a ton of customization and animation options available out of the box, this is one of the best tab plugins for WordPress. It works brilliantly for anyone looking to add a fresh way of presenting information to their site.</p>
<h3>11. <a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723" target="_blank" rel="noopener">Easy Side Tab Pro:  Responsive Floating Tab Plugin For Wordpress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="870px" height="251px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="650px" height="191px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg" alt="Easy Side Tab Pro - Responsive Floating Tab Plugin For Wordpress" loading="lazy" width="380px" height="118px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/EF0A5B71-6974-43E9-BFFD-929A1558148A.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/easy-side-tab-pro-responsive-floating-tab-plugin-for-wordpress/22296723" target="_blank" rel="noopener">Easy Side Tab Pro</a> is a Call To Action floating tabs plugin for WordPress which allows you to create any number of quick side tabs and stick them to the vertical or horizontal edge position. When the tab is clicked the popup associated to that tab pops out.</p>
<p>From the backend interface you can customize 15 popup templates by choosing variety of shapes, add animations and transitions. And to each tab you assign functionalities like a Twitter feed, social share icons, recent posts, WooCommerce products, custom shortcodes, a subscription form, and internal or external links. </p>
<h3>12. <a href="https://codecanyon.net/item/bwl-knowledge-base-manager/7972812" target="_blank" rel="external noopener">BWL Knowledge Base Manager WordPress Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bwl-knowledge-base-manager/7972812" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="870px" height="797px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="650px" height="596px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg" alt="BWL Knowledge Base Manager WordPress Accordion" loading="lazy" width="380px" height="349px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/BWL%20Knowledge%20Base%20Manager.jpg 2x"></a></figure>
<p>This is one of the best tab plugins for WordPress we've got. The WordPress tabs plugin is user-friendly, fast, and fully responsive. People love this WordPress tabbed content widget because:</p>
<ul>
<li>no configuration is required</li>
<li>responsive grid system</li>
<li>AJAX-based searching system</li>
<li>animated and responsive tabs</li>
<li>extensive Options panel</li>
<li>unlimited customization</li>
<li>lifetime support and updates</li>
</ul>
<h3>13. <a href="https://codecanyon.net/item/zf-wordpress-category-accordion/8849504" target="_blank" rel="external noopener">ZF WordPress Category Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/zf-wordpress-category-accordion/8849504" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="870px" height="360px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="650px" height="272px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg" alt="ZF WordPress Category Accordion" loading="lazy" width="380px" height="164px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/ZF%20WordPress%20Category%20Accordion.jpg 2x"></a></figure>
<p>This WordPress accordion plugin was created to improve your WooCommerce website with a better navigation experience. </p>
<p>ZF WordPress Category Accordion plugin allows you to show all your categories as WooCommerce category accordions. Check this WordPress accordion's nice features:</p>
<ul>
<li>support WooCommerce category accordion</li>
<li>support WordPress category accordion</li>
<li>pages accordion (accordion menus)</li>
<li>translation-ready</li>
<li>support shortcodes and widgets</li>
<li>toggle accordions</li>
<li>7 default color schemes</li>
</ul>
<h3>14. <a href="https://codecanyon.net/item/css3-accordions-for-wordpress/716291" target="_blank" rel="external noopener">CSS3 Accordions For WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/css3-accordions-for-wordpress/716291" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="870px" height="672px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="650px" height="503px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg" alt="CSS3 Accordions For WordPress" loading="lazy" width="380px" height="296px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/CSS3%20Accordions%20For%20WordPress.jpg 2x"></a></figure>
<p>This accordion WordPress plugin widget is entirely based on CSS3. It's one of the best accordion plugins for WordPress because it comes with an intuitive admin panel, horizontal and vertical layouts, and unlimited color skins. </p>
<p>You can put any type of content inside the expandable section, including lists, images, or any custom HTML code.</p>
<h3>15. <a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="870px" height="439px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="650px" height="331px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg" alt="Responsive Searchable 3 Level Accordion" loading="lazy" width="380px" height="197px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg 2x"></a></figure>
<p>Responsive Searchable 3 Level Accordion is a simple WordPress accordion plugin that can be used anywhere on your site. It will appeal to users who are looking to arrange content in accordion style within a post, sidebar, footer, etc. The best features of this accordion and accordion slider are:</p>
<ul>
<li>can be used as a widget or shortcode</li>
<li>three nesting levels available</li>
<li>five ready-made styling options</li>
<li>allows users to type in the searched phrase</li>
</ul>
<p><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion For WordPress</a> is a low-fuss accordion plugin, and its standout features like three-level support and searchable content really set it apart.</p>
<h3>16. <a href="https://codecanyon.net/item/everest-tab-responsive-tab-plugin-for-wordpress/21235980" target="_blank" rel="noopener">Everest Tab—Responsive Tab Plugin For WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/everest-tab-responsive-tab-plugin-for-wordpress/21235980"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="870px" height="484px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="650px" height="364px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg" alt="Everest Tab - Responsive Tab Plugin For WordPress" loading="lazy" width="380px" height="217px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/CC8C1484-701C-4FA0-8E1C-039066B8258E.jpeg 2x"></a></figure>
<p>Using Everest Tab you can show tabs within content, even transform your own custom HTML content into tab layout easily. You can also create unlimited tab and add tab components like HTML, social feeds, recent posts, WooCommerce products, contact form, google map integration as well as external shortcodes. In addition, you can enable deep linking for your tabs. </p>
<h3>17. <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9">Accordion FAQ WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="870px" height="452px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="650px" height="340px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg" alt="Accordion FAQ WordPress Plugin" loading="lazy" width="380px" height="203px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg 2x"></a></figure>
<p>FAQ pages are an important part of almost any website, and with this WordPress accordion plugin, you can fit a mountain of text behind a sleek and easily digestible display. This accordion plugin focuses on doing one thing, creating FAQ-style content easily, and it does it well. Here’s what you can expect to get with this WordPress tabs plugin:</p>
<ul>
<li>ability to quickly add multiple FAQ accordions throughout your site</li>
<li>easy drag-and-drop interface for reordering</li>
<li>color, icon, and font customization</li>
<li>built-in generator for creating shortcodes</li>
</ul>
<p>If you’re looking to add an FAQ section to your existing design, then the Accordion FAQ WordPress Plugin has you covered.</p>
<h3>18. <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="870px" height="468px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="650px" height="352px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg" alt="WordPress Tabs and Accordions" loading="lazy" width="380px" height="210px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg 2x"></a></figure>
<p>WordPress Tabs and Accordions DZS is another of the best tab plugins for WordPress. It gives users access to both tab and accordion functions. Its best features are:</p>
<ul>
<li>full skins to fit every brand</li>
<li>WYSIWYG editor</li>
<li>unlimited color options for customization</li>
<li>iPhone, iPad, and Android optimized</li>
<li>and more</li>
</ul>
<p><a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a> is another great two-for-one WordPress tabbed content widget.</p>
<h3>19. <a href="https://codecanyon.net/item/ultimate-searchable-accordion-visual-composer-addon/14776465" target="_blank" rel="external noopener">Ultimate Searchable WordPress Accordion</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ultimate-searchable-accordion-visual-composer-addon/14776465" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="870px" height="429px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="650px" height="323px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg" alt="Ultimate Searchable WordPress Accordion" loading="lazy" width="380px" height="193px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35856/image/Ultimate%20Searchable%20Accordion.jpg 2x"></a></figure>
<p>This five-star-rated WordPress accordion plugin for WPBakery Page Builder is a crowd favorite. Some of its coolest features are:</p>
<ul>
<li>quick and easy installation</li>
<li>responsive accordion layouts</li>
<li>unique live content search</li>
<li>14+ smooth animations</li>
<li>6 pre-defined color themes</li>
<li>RTL support</li>
<li>lifetime support and updates</li>
</ul>
<h3>20. <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ With Category</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="870px" height="464px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="650px" height="349px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg" alt="WP Responsive FAQ With Category" loading="lazy" width="380px" height="208px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg 2x"></a></figure>
<p>The Responsive FAQ With Category WordPress tabs plugin is specifically designed for users who want to add a Frequently Asked Questions area to their site and don’t want their visitors to have to scroll through an endless stream of text.</p>
<p>This WordPress tabbed content widget's best features include:</p>
<ul>
<li>FAQs can be arranged by category</li>
<li>15 customizable different designs to choose from</li>
<li>compatible with Visual Composer page builder and WooCommerce</li>
<li>two types of FAQ toggle icons: arrow or plus sign</li>
</ul>
<p>There’s no question that this one of the best tab plugins for WordPress and that <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a> is the answer to all your FAQ needs.</p>
<h3>21. <a href="https://codecanyon.net/item/wordpress-accordion-plugin-accordion-awesome-pro/32050180" target="_blank" rel="noopener">Accordion Awesome Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-accordion-plugin-accordion-awesome-pro/32050180"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="870px" height="850px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="650px" height="635px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg" alt="Accordion Awesome Pro" loading="lazy" width="380px" height="372px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/FFEFF8E3-9347-46D1-A8F3-49D197E98EEC.jpeg 2x"></a></figure>
<p>Who said accordions should be boring? Accordion Awesome is a new addition to our selection of accordion plugin. It will help you create colorful, vibrant and stunning accordions for your website that display well on different web browsers and devices.</p>
<p>There are thirteen templates to choose from. You can customize colors of the text, description, icons, navigation background, active accordion background, and accordion content background.</p>
<p>You can insert accordions using shortcode, a Gutenberg block or an Elementor block. Your accordions can include pictures, animations, feature lists, and more. </p>
<h3>22. <a href="https://codecanyon.net/item/taber-tabs-for-elementor/30751652" target="_blank" rel="noopener">Taber: Tabs for Elementor</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/taber-tabs-for-elementor/30751652"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="870px" height="450px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="650px" height="339px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg" alt="Taber: Tabs for Elementor" loading="lazy" width="380px" height="202px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36965/image-upload/8594C623-0101-4B7E-8463-67C948AE1A8E.jpeg 2x"></a></figure>
<p>Taber is a WordPress plugin for Elementor that will help you create responsive tabs with any content. You can display the tabs in any possible style like the top, bottom, left, right, or even custom positions. You have five customizable templates.</p>
<p>You can customize size, typography, colors, background, and border of your tabs. You can even add images, audio, and video. It's SEO-friendly and works well with all WordPress themes built on Elementor. The plugin includes pot files for quick translation to any language including RTL-oriented languages. </p>
<h2>5 Free Tab and Accordion WordPress Widgets and Plugins for Download in 2021</h2>
<p>The best features and most beautiful interfaces are found in the premium plugins from CodeCanyon. But, if you're on a budget or just want something simple, check out these free tab and accordion plugins for WordPress.</p>
<h3>1. <a href="https://wordpress.org/plugins/arconix-shortcodes/" target="_self">Arconix Shortcodes</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=695/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="715px" height="426px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1390/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="650px" height="388px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/screenshot-2.png" alt="Arconix Shortcodes" loading="lazy" width="380px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/screenshot-2.png 2x"></figure>
<p>Arconix Shortcodes is a very versatile accordion plugin and is a must-have if you cannot afford any of the premium plugins. With this plugin, you can add not only accordions but styled boxes, buttons, tabs, unordered lists, columns, and much more.</p>
<h3>2. <a href="https://wordpress.org/plugins/easy-accordion-free/" target="_self">Easy Accordion</a>
</h3>
<p>Easy Accordion is a responsive drag-and-drop accordion builder that will help you to display multiple accordions on your WordPress website. No coding is necessary to add the accordions to your website as everything is added through shortcodes.</p>
<h3>3. <a href="https://wordpress.org/plugins/accordions/" target="_self">Accordion</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="870px" height="580px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/end.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="650px" height="435px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/end.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/end.png" alt="Accordion" loading="lazy" width="380px" height="257px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/end.png 2x"></figure>
<p>This accordion plugin can help you create different sections of your website, including but not limited to FAQs, a knowledge base, and a question &amp; answer section. You can change the colors, font size, and icons for each accordion.</p>
<h3>4. <a href="https://wordpress.org/plugins/squelch-tabs-and-accordions-shortcodes/" target="_self">Squelch Tabs and Accordions Shortcodes</a>
</h3>
<p>With the use of shortcodes, you can add horizontal accordions, vertical accordions, and tabs. This free plugin will help you save space on your webpages, make your website look more professional, and add an interactive component to your website.</p>
<h3>5. <a href="https://wordpress.org/plugins/shortcodes-ultimate/" target="_self">Shortcodes Ultimate</a>
</h3>
<p>Shortcodes Ultimate allows you to add many tools to your website. You can easily create tabs, buttons, boxes, sliders and carousels, and responsive videos. The plugin comes with over 50 shortcodes for you to implement. </p>
<h2>How to Add an FAQ Accordion to Your Website</h2>
<p>In this example, we are going to create an FAQ section for our online store using one of our best accordion plugins for WordPress.<strong> </strong></p>
<p>First, we need to create a category for our FAQ accordion so the plugin knows what content to add to each specific accordion. Once you have installed the <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363" target="_blank" rel="external noopener">Accordion FAQ WordPress plugin</a>, head on over to <strong>WP Dashboard &gt; FAQ &gt; Categories. </strong>In the name field, we will type "<strong>Online Store</strong>" and click the <strong>Add New Category</strong> button. </p>
<p>Next, we will click on <strong>WP Dashboard &gt; FAQ &gt; Add New. </strong>We will add our three FAQ entries this way. We will include the question in the title and the answer in the text editor. </p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="870px" height="600px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/dunnn.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="650px" height="450px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/dunnn.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/dunnn.png" alt="Creating FAQ Entry" loading="lazy" width="380px" height="266px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/dunnn.png 2x"></figure>
<p>For each of our entries, we will make sure to click the checkbox next to the category, <strong>Online Store</strong>, that we created to make sure we group the entries together. </p>
<p>Once we have added our three FAQ entries for our online store, it's time to add the accordion widget to a page. On an existing or new page or post, click on the <strong>Add Shortcode</strong> button on the top of the text editor. Choose <strong>Insert FAQs</strong> from the <strong>Select a Shortcode</strong> drop-down menu. From here, we will be given a basic group of settings for us to change. We will choose the <strong>Online Store</strong> category from the <strong>Faq Category </strong>option and change the <strong>Icon Background Color</strong> to blue. </p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="870px" height="817px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34415/image/850.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="650px" height="611px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34415/image/850.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34415/image/850.png" alt="Changing Accordion Settings" loading="lazy" width="380px" height="358px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34415/image/850.png 2x"></figure>
<p>Click the <strong>Insert Shortcode</strong> button, and the shortcode will be added to the text editor. The FAQ accordion will now be displayed on your webpage for all your users to see!</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/1809/posts/34415/image/Screen%20Shot%202019-12-21%20at%2019.58.45.png" al]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-31T13:33:35+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[30 HTML Best Practices for Beginners]]></title>
      <link>//shineyrock.com/blog/read/30-html-best-practices-for-beginners</link>
      <guid>https://shineyrock.com/blog/read/30-html-best-practices-for-beginners#When:03:35:45Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>This tutorial is specifically for those who are just diving into web development. If you have one year of experience or less, hopefully some of the tips listed here will help you to become better, quicker!</p>
<h2>
<span class="sectionnum">1.</span> Always Close Your Tags</h2>
<p>Back in the day, it wasn't uncommon to see things like this:</p>
<pre class="brush: html noskimlinks noskimwords">&lt;li&gt;Some text here.
&lt;li&gt;Some new text here.
&lt;li&gt;You get the idea.</pre>
<p>Notice how the wrapping UL/OL tag was omitted. Additionally, many chose to leave off the closing LI tags as well. By today's standards, this is simply bad practice and should be 100% avoided. Always, always close your tags. Otherwise, you'll encounter validation and glitch issues at every turn.</p>
<h3>Better</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;ul&gt;
  &lt;li&gt;Some text here. &lt;/li&gt;
  &lt;li&gt;Some new text here. &lt;/li&gt;
  &lt;li&gt;You get the idea. &lt;/li&gt;
&lt;/ul&gt;</pre>
<h2>
<span class="sectionnum">2.</span> Declare the DOCTYPE</h2>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png" alt="HTML5 DOCTYPE" loading="lazy" width="870px" height="264px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png" alt="HTML5 DOCTYPE" loading="lazy" width="650px" height="201px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png" alt="HTML5 DOCTYPE" loading="lazy" width="380px" height="123px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36985/image-upload/tutsplus_formatter.png 2x"></figure>
<p>Declaring a DOCTYPE was a cumbersome process in the past. However, HTML5 has made things a lot simpler. Now, you can just add the following line at the top of your webpage to let browsers know that it should be interpreted as HTML5.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;!DOCTYPE html&gt;</pre>
<p>Some old websites that have not been updated in quite some time might still be using older standards to declare DOCTYPE. Don't be confused by all that. Using the above line is the correct way to do it in HTML5. Just remember that it has to go before everything, even the <code>&lt;html&gt;</code> tag.</p>
<h2>
<span class="sectionnum">3.</span> Never Use Inline Styles</h2>
<p>When you're hard at work on your markup, sometimes it can be tempting to take the easy route and sneak in a bit of styling.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;p style="color: red;"&gt;I'm going to make this text red so that it really stands out and makes people take notice! &lt;/p&gt;</pre>
<p>Sure, it looks harmless enough. However, this points to an error in your coding practices.</p>
<p><strong>When creating your markup, don't even think about the styling yet. You only begin adding styles once the page has been completely coded.</strong></p>
<blockquote>
<p>It's like crossing the streams in Ghostbusters. It's just not a good idea. <em>-Chris Coyier (in reference to something completely unrelated.)</em></p>
</blockquote>
<p>Instead, finish your markup, and then reference that P tag from your external stylesheet.</p>
<h3>Better</h3>
<pre class="brush: css noskimlinks noskimwords">#someElement &gt; p {
  color: red;
}</pre>
<h2>
<span class="sectionnum">4.</span> Place All External CSS Files Within the Head Tag</h2>
<p>Technically, you can place stylesheets anywhere you like. However, the HTML specification recommends that they be placed within the document HEAD tag. The primary benefit is that your pages will seemingly load faster.</p>
<blockquote>
<p>While researching performance at Yahoo!, we discovered that moving stylesheets to the document HEAD makes pages appear to be loading faster. This is because putting stylesheets in the HEAD allows the page to render progressively. <em>- ySlow Team</em></p>
</blockquote>
<pre class="brush: html noskimlinks noskimwords">&lt;head&gt;
&lt;title&gt;My Favorites Kinds of Corn&lt;/title&gt;
&lt;link rel="stylesheet" type="text/css" media="screen" href="path/to/file.css" /&gt;
&lt;link rel="stylesheet" type="text/css" media="screen" href="path/to/anotherFile.css" /&gt;
&lt;/head&gt;</pre>
<h2>
<span class="sectionnum">5.</span> Consider Placing JavaScript Files at the Bottom</h2>
<figure class="post_image"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=839/net/uploads/legacy/327_30Musts/javascriptButton.png" alt="Place JS at bottom" loading="lazy" width="859px" height="100px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1678/net/uploads/legacy/327_30Musts/javascriptButton.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=630/net/uploads/legacy/327_30Musts/javascriptButton.png" alt="Place JS at bottom" loading="lazy" width="650px" height="80px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1260/net/uploads/legacy/327_30Musts/javascriptButton.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/javascriptButton.png" alt="Place JS at bottom" loading="lazy" width="380px" height="54px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/javascriptButton.png 2x"></figure>
<p>Remember—the primary goal is to make the page load as quickly as possible for the user. When loading a script, the browser can't continue until the entire file has been loaded. Thus, the user will have to wait longer before noticing any progress.</p>
<p>If you have JS files whose only purpose is to add functionality—for example, after a button is clicked—go ahead and place those files at the bottom, just before the closing body tag. This is absolutely a best practice.</p>
<h3>Better</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;p&gt;And now you know my favorite kinds of corn. &lt;/p&gt;
&lt;script type="text/javascript" src="path/to/file.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="path/to/anotherFile.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<h2>
<span class="sectionnum">6.</span> Never Use Inline JavaScript. It's Not 1996!</h2>
<p>Another common practice years ago was to place JS commands directly within tags. This was very common with simple image galleries. Essentially, an <code>onclick</code> attribute was appended to the tag. The value would then be equal to some JS procedure. Needless to say, you should never, ever do this. Instead, transfer this code to an external JS file and use <code>addEventListener</code> or <code>attachEvent</code> to "listen" for your desired event. Or, if using a framework like <a href="https://www.jquery.com">jQuery</a>, just use the <code>click()</code> method.</p>
<pre class="brush: noskimlinks noskimwords">$('a#moreCornInfoLink').click(function() {
  alert('Want to learn more about corn?');
});</pre>
<h2>
<span class="sectionnum">7.</span> Validate Continuously</h2>
<div><img src="https://cdn.tutsplus.com/net/uploads/legacy/327_30Musts/validate.png" alt="validate continuously" loading="lazy" width="266px" height="339px"></div>
<p>I once <a href="https://jeff-way.com/2009/05/13/heres-the-thing-about-validation/">blogged</a> about how the idea of validation has been completely misconstrued by those who don't completely understand its purpose. As I mentioned in the article, <strong>"validation should work for you, not against."</strong></p>
<p>However, especially when first getting started, I highly recommend that you download the <a href="https://addons.mozilla.org/en-US/firefox/addon/60">Web Developer Toolbar</a> and use the "Validate HTML" and "Validate CSS" options continuously. While CSS is a somewhat easy language to learn, it can also make you tear your hair out. As you'll find, many times, it's your shabby markup that's causing that strange whitespace issue on the page. Validate, validate, validate.</p>
<h2>
<span class="sectionnum">8.</span> Use Browser Developer Tools</h2>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png" alt="Browser Developer Tools" loading="lazy" width="870px" height="563px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png" alt="Browser Developer Tools" loading="lazy" width="650px" height="422px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png" alt="Browser Developer Tools" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36985/image-upload/tutsplus_developer_tools.png 2x"></figure>
<p>I can't recommend this one enough. Using developer tools that come with all major browsers will help you resolve all kinds of layout problems and save a lot of time. Take a couple of hours and scour the web for every worthy tutorial you can find on the subject. The knowledge you gain will be well worth the time you invest.</p>
<h2>
<span class="sectionnum">9.</span> Keep Your Tag Names Lowercase</h2>
<p>Technically, you can get away with capitalizing your tag names.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;DIV&gt;
&lt;P&gt;Here's an interesting fact about corn. &lt;/P&gt;
&lt;/DIV&gt;</pre>
<p>Having said that, please don't. It serves no purpose and hurts my eyes—not to mention the fact that it reminds me of Microsoft Word's HTML function!</p>
<h3>Better</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;div&gt;
&lt;p&gt;Here's an interesting fact about corn. &lt;/p&gt;
&lt;/div&gt;</pre>
<h2>
<span class="sectionnum">10.</span> Use H1 through H6 Tags</h2>
<p>Admittedly, this is something I tend to slack on. It's best practice to use all six of these tags. If I'm honest, I usually only implement the top four; but I'm working on it! For semantic and SEO reasons, force yourself to replace that P tag with an H6 when appropriate.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;h1&gt;This is a really important corn fact! &lt;/h1&gt;
&lt;h6&gt;Small, but still significant corn fact goes here. &lt;/h6&gt;</pre>
<h2>
<span class="sectionnum">11.</span> If Building a Blog, Save the H1 for the Article Title</h2>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=643/net/uploads/legacy/327_30Musts/h1Title.jpg" alt="h1 saved for title of article" loading="lazy" width="663px" height="291px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1286/net/uploads/legacy/327_30Musts/h1Title.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=630/net/uploads/legacy/327_30Musts/h1Title.jpg" alt="h1 saved for title of article" loading="lazy" width="650px" height="286px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1260/net/uploads/legacy/327_30Musts/h1Title.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/h1Title.jpg" alt="h1 saved for title of article" loading="lazy" width="380px" height="172px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/h1Title.jpg 2x">
</div>
<p>Just this morning, on <a href="https://www.twitter.com/nettuts">Twitter</a>, I asked our followers whether they felt it was smartest to place the H1 tag as the logo or to instead use it as the article's title. Around 80% of the returned tweets were in favor of the latter method.</p>
<p>As with anything, determine what's best for your own website. However, if building a blog, I'd recommend that you save your H1 tags for your article title. For SEO purposes, this is a better practice—in my opinion.</p>
<h2>
<span class="sectionnum">12.</span> Download ySlow</h2>
<div><a href="https://developer.yahoo.com/yslow/"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/327_30Musts/yslow.png" alt="download yslow" loading="lazy" width="620px" height="278px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/327_30Musts/yslow.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/327_30Musts/yslow.png" alt="download yslow" loading="lazy" width="620px" height="278px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/327_30Musts/yslow.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/yslow.png" alt="download yslow" loading="lazy" width="380px" height="175px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/yslow.png 2x"></a></div>
<p>Especially in the last few years, the Yahoo team has been doing some really great work in our field. They released an extension for all major browsers like Chrome, Firefox, Safari and Opera etc. called <a href="https://developer.yahoo.com/yslow/">ySlow</a>. When activated, it will analyze the given website and return a "report card" of sorts which details the areas where your site needs improvement. It can be a bit harsh, but it's all for the greater good. I highly recommend it.</p>
<h2>
<span class="sectionnum">13.</span> Start Using New HTML5 Tags</h2>
<p>In the old days, different sections of a page were all wrapped inside <code>div</code> tags. This is because there was no way to provide a more semantic structure to our page. This is no longer true. HTML5 comes with a lot of new tags that we can use to provide structure to the content on our webpage. This includes tags like <code>nav</code>, <code>section</code>, <code>article</code>, <code>aside</code>, etc.</p>
<p>Read about them and start using them in your new projects.</p>
<h2>
<span class="sectionnum">14.</span> Wrap Navigation With an Unordered List</h2>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png" alt="TutsPlus Navigation" loading="lazy" width="870px" height="490px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png" alt="TutsPlus Navigation" loading="lazy" width="650px" height="368px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png" alt="TutsPlus Navigation" loading="lazy" width="380px" height="219px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36985/image-upload/tutsplus_navigation.png 2x"></figure>
<p>Every website has a navigation section of some sort. While you can definitely get away with formatting it like so:</p>
<pre class="brush: html noskimlinks noskimwords"> &lt;div id="nav"&gt;
  &lt;a href="#"&gt;Home &lt;/a&gt;
   &lt;a href="#"&gt;About &lt;/a&gt;
   &lt;a href="#"&gt;Contact &lt;/a&gt;
 &lt;/div&gt;</pre>
<p>I'd encourage you not to use this method, for semantic reasons. Your job is to write the best possible code that you're capable of.</p>
<blockquote>
<p>Why would we style a list of navigation links with anything other than an unordered LIST?</p>
</blockquote>
<p>The <code>ul</code> tag is meant to contain a list of items. We also get rid of the wrapper <code>div</code> and replace it with the <code>nav</code> tag.</p>
<h3>Better</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;nav&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href="#"&gt;Home&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;About&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href="#"&gt;Contact&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/nav&gt;</pre>
<h2>
<span class="sectionnum">15.</span> Check Browser Support for Modern Features</h2>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png" alt="CanIUse Website" loading="lazy" width="870px" height="545px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png" alt="CanIUse Website" loading="lazy" width="650px" height="409px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png" alt="CanIUse Website" loading="lazy" width="380px" height="242px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36985/image-upload/tutsplus_can_i_use.png 2x"></figure>
<p>New features are added to the HTML and CSS spec all the time. Some of these features might not be available in all browsers. Therefore, it makes sense to figure out what browsers are used by your target audience and then plan accordingly.</p>
<p>You might be able to provide polyfills for browsers which don't support a feature or warn users they are using an incompatible browser if that feature is necessary for the functioning of the website. In any case, knowing which features are commonly available across browsers can be helpful. The <a href="https://caniuse.com/" target="_blank" rel="noopener">Can I Use</a> website is a great resource for that kind of thing.</p>
<h2>
<span class="sectionnum">16.</span> Choose a Great Code Editor</h2>
<p>There are a lot of great code editors available for you to use now, from something basic and lightweight like Notepad++ to full-fledged IDEs. My personal favorite among them all is <a href="https://code.visualstudio.com/download" target="_self">Visual Studio Code</a>. It is free, built upon open source, and comes with lots of extensions to help you write better code fast.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG" alt="Visual Studio Code" loading="lazy" width="870px" height="474px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG" alt="Visual Studio Code" loading="lazy" width="650px" height="356px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG" alt="Visual Studio Code" loading="lazy" width="380px" height="212px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36985/image-upload/vs_code_third_party.PNG 2x"></figure>
<p>There are a lot of other code editors available as well, like Atom, Brackets, and Vim. Just pick one that you like best and start coding.</p>
<h2>
<span class="sectionnum">17.</span> Once the Website Is Complete, Compress!</h2>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=452/net/uploads/legacy/327_30Musts/compress.png" alt="Compress" loading="lazy" width="472px" height="288px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=904/net/uploads/legacy/327_30Musts/compress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=452/net/uploads/legacy/327_30Musts/compress.png" alt="Compress" loading="lazy" width="472px" height="288px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=904/net/uploads/legacy/327_30Musts/compress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/compress.png" alt="Compress" loading="lazy" width="380px" height="233px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/compress.png 2x">
</div>
<p>By zipping your CSS and JavaScript files, you can reduce the size of each file by a substantial 25% or so. Please don't bother doing this while still in development. However, once the site is more or less complete, use a few online compression programs to save yourself some bandwidth.</p>
<h3>JavaScript Compression Services</h3>
<ul>
<li><a href="http://javascriptcompressor.com/">Javascript Compressor</a></li>
<li><a href="http://www.xmlforasp.net/JSCompressor.aspx">JS Compressor</a></li>
</ul>
<h3>CSS Compression Services</h3>
<ul>
<li><a href="http://www.cssoptimiser.com/">CSS Optimiser</a></li>
<li><a href="http://www.cssdrive.com/index.php/main/csscompressor/">CSS Compressor</a></li>
<li><a href="http://www.cleancss.com/">Clean CSS</a></li>
</ul>
<h2>
<span class="sectionnum">18.</span> Cut, Cut, Cut</h2>
<div><img src="https://cdn.tutsplus.com/net/uploads/legacy/327_30Musts/scissors.jpg" alt="cut cut cut" loading="lazy" width="340px" height="340px"></div>
<p>Looking back on my first website, I must have had a <em>severe</em> case of divitis. <strong>Your natural instinct is to safely wrap each paragraph with a div, and then wrap it with one more div for good measure.</strong> As you'll quickly learn, this is highly inefficient.</p>
<blockquote>
<p>Once you've completed your markup, go over it two more times and find ways to reduce the number of elements on the page. Does that UL really need its own wrapping div? I think not.</p>
</blockquote>
<p>Just as the key to writing is to "cut, cut, cut," the same holds true for your markup.</p>
<h2>
<span class="sectionnum">19.</span> All Images Require "Alt" Attributes</h2>
<p>It's easy to ignore the necessity for alt attributes within image tags. Nevertheless, it's very important, for accessibility and validation reasons, that you take an extra moment to fill these sections in.</p>
<h3>Bad</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;IMG SRC="cornImage.jpg" /&gt;</pre>
<h3>Better</h3>
<pre class="brush: html noskimlinks noskimwords">&lt;img src="cornImage.jpg" alt="A corn field I visited." /&gt;</pre>
<h2>
<span class="sectionnum">20.</span> Stay Up Late</h2>
<p>I highly doubt that I'm the only one who, at one point while learning, looked up and realized that I was in a pitch-dark room well into the early, early morning. If you've found yourself in a similar situation, rest assured that you've chosen the right field.</p>
<p>The amazing "AHA" moments, at least for me, always occur late at night. This was the case when I first began to understand exactly what JavaScript closures were. It's a great feeling that you need to experience, if you haven't already.</p>
<h2>
<span class="sectionnum">21.</span> View Source</h2>
<div><img src="https://cdn.tutsplus.com/net/uploads/legacy/327_30Musts/viewSource.png" alt="view source" loading="lazy" width="290px" height="297px"></div>
<p>What better way to learn HTML than to copy your heroes? Initially, we're all copiers! Then slowly, you begin to develop your own styles/methods. So visit the websites of those you respect. How did they code this and that section? Learn and copy from them. We all did it, and you should too. (Don't steal the design; just learn from the coding style.)</p>
<p>Notice any cool JavaScript effects that you'd like to learn? It's likely that they're using a plugin to accomplish the effect. View the source and search the HEAD tag for the name of the script. Then Google it and implement it into your own site! Yay.</p>
<h2>
<span class="sectionnum">22.</span> Style ALL Elements</h2>
<p>This best practice is especially true when designing for clients. Just because you haven't used a blockquote doesn't mean that the client won't. Never use ordered lists? That doesn't mean they won't! Do yourself a service and create a special page specifically to show off the styling of every element: UL, OL, P, H1–H6, blockquotes, etc.</p>
<h2>
<span class="sectionnum">23.</span> Use Twitter</h2>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=400/net/uploads/legacy/327_30Musts/twitter.gif" alt="Use Twitter" loading="lazy" width="420px" height="320px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=800/net/uploads/legacy/327_30Musts/twitter.gif 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=400/net/uploads/legacy/327_30Musts/twitter.gif" alt="Use Twitter" loading="lazy" width="420px" height="320px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=800/net/uploads/legacy/327_30Musts/twitter.gif 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/twitter.gif" alt="Use Twitter" loading="lazy" width="380px" height="290px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/twitter.gif 2x">
</div>
<p>Initially, the idea behind Twitter was to post "what you were doing." Though this still holds true to a small extent, it's become much more of a networking tool in our industry. If a web dev writer that I admire posts a link to an article they found interesting, you better believe that I'm going to check it out as well—and you should too! <img src="https://cdn.tutsplus.com/net/uploads/legacy/327_30Musts/twitterSnippet.png" alt="Twitter Snippet" loading="lazy" width="345px" height="85px"></p>
<h2>
<span class="sectionnum">24.</span> Learn Photoshop</h2>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=547/net/uploads/legacy/327_30Musts/photoshop.png" alt="Learn Photoshop" loading="lazy" width="567px" height="545px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1094/net/uploads/legacy/327_30Musts/photoshop.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=547/net/uploads/legacy/327_30Musts/photoshop.png" alt="Learn Photoshop" loading="lazy" width="567px" height="545px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1094/net/uploads/legacy/327_30Musts/photoshop.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/photoshop.png" alt="Learn Photoshop" loading="lazy" width="380px" height="366px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/photoshop.png 2x">
</div>
<p>Photoshop is open pretty much 24/7 on my computer.</p>
<p>In fact, Photoshop may very well become the most important tool you have. Once you've learned HTML and CSS, I would personally recommend that you then learn as many Photoshop techniques as possible.</p>
<h2>
<span class="sectionnum">25.</span> Learn Each HTML Tag</h2>
<p>There are literally dozens of HTML tags that you won't come across every day. Nevertheless, that doesn't mean you shouldn't learn them! Are you familiar with the "abbr" tag? What about "cite"? These two alone deserve a spot in your tool-chest. Learn all of them!</p>
<p>By the way, in case you're unfamiliar with the two listed above:</p>
<ul>
<li>
<strong>abbr</strong> does pretty much what you'd expect. It refers to an abbreviation. "Blvd" could be wrapped in a &lt;abbr&gt; tag because it's an abbreviation for "boulevard".</li>
<li>
<strong>cite</strong> is used to reference the title of some work. For example, if you reference this article on your own blog, you could put "30 HTML Best Practices for Beginners" within a &lt;cite&gt; tag. Note that it shouldn't be used to reference the author of a quote. This is a common misconception.</li>
</ul>
<h2>
<span class="sectionnum">26.</span> Participate in the Community</h2>
<p>Just as sites like ours contribute greatly to furthering a web developer's knowledge, you should too! Finally figured out how to float your elements correctly? Make a blog post to teach others how. There will always be those with less experience than you. Not only will you be contributing to the community, but you'll also teach yourself. Ever notice how you don't truly understand something until you're forced to teach it?</p>
<h2>
<span class="sectionnum">27.</span> Use a CSS Reset</h2>
<p>This is another area that's been debated to death. CSS resets: to use or not to use; that is the question. If I were to offer my own personal advice, I'd 100% recommend that you create your own reset file. Begin by downloading a popular one, like <a href="http://meyerweb.com/eric/tools/css/reset/index.html">Eric Meyer's</a>, and then slowly, as you learn more, begin to modify it into your own.</p>
<p>If you don't do this, you won't truly understand why your list items are receiving that extra bit of padding when you didn't specify it anywhere in your CSS file. Save yourself the anger and reset everything! This one should get you started.</p>
<pre class="brush: css noskimlinks noskimwords">html, body, div, span,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
img, ins, kbd, q, s, samp,
small, strike, strong,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}
body {
	line-height: 1;
}
ol, ul {
	list-style: none;
}
blockquote, q {
	quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}

table {
	border-collapse: collapse;
	border-spacing: 0;
}</pre>
<h2>
<span class="sectionnum">28.</span> Line 'em Up!</h2>
<div><a href="http://www.thenetsetter.com"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/327_30Musts/netSetter.png" alt="Line em up" loading="lazy" width="620px" height="632px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/327_30Musts/netSetter.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/327_30Musts/netSetter.png" alt="Line em up" loading="lazy" width="620px" height="632px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/327_30Musts/netSetter.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/327_30Musts/netSetter.png" alt="Line em up" loading="lazy" width="380px" height="387px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/327_30Musts/netSetter.png 2x"></a></div>
<p>Generally speaking, you should strive to line up your elements as best as possible. Take a look at your favorite designs. Did you notice how each heading, icon, paragraph, and logo lines up with something else on the page? Not doing this is one of the biggest signs of a beginner. Think of it this way: If I ask why you placed an element in that spot, you should be able to give me an exact reason.</p>
<h2>
<span class="sectionnum">29.</span> Slice a PSD</h2>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg" alt="Slice a PSD" loading="lazy" width="620px" height="630px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=600/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg" alt="Slice a PSD" loading="lazy" width="620px" height="630px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1200/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg" alt="Slice a PSD" loading="lazy" width="380px" height="386px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/173_slicePsd/htmlWithNotes.jpg 2x">
</div>
<p>Okay, so you've gained a solid grasp of HTML, CSS, and Photoshop. The next step is to convert your first PSD into a working website. Don't worry; it's not as tough as you might think. I can't think of a better way to put your skills to the test. If you need assistance, review these in-depth video tutorials that show you exactly how to get the job done.</p>
<ul>
<li><a href="https://code.tutsplus.com/articles/slice-and-dice-that-psd--net-2476" target="_self">Slice and Dice that PSD</a></li>
<li><a href="https://code.tutsplus.com/articles/converting-a-design-from-psd-to-html--net-2114" target="_self">From PSD to HTML/CSS</a></li>
</ul>
<h2>
<span class="sectionnum">30.</span> Don't Use a Framework... Yet</h2>
<p>Frameworks, whether they be for Javascript or CSS, are fantastic; but please don't use them when first getting started. Though it could be argued that jQuery and Javascript can be learned simultaneously, the same can't be said for CSS. I've personally promoted the <a href="https://code.tutsplus.com/articles/a-detailed-look-at-the-960-css-framework--net-2567" target="_self">960 CSS Framework</a>, and use it often. Having said that, if you're still in the process of learning CSS—meaning the first year—you'll only make yourself more confused if you use one.</p>
<p>CSS frameworks are for experienced developers who want to save themselves a bit of time. They're not for beginners.</p>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a>. Monty is a full-stack developer who also loves to write tutorials, and to learn about new JavaScript libraries. </em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-27T03:35:45+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[31 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)]]></title>
      <link>//shineyrock.com/blog/read/31-best-wordpress-calendar-plugins-and-widgets-with-5-free-plugins</link>
      <guid>https://shineyrock.com/blog/read/31-best-wordpress-calendar-plugins-and-widgets-with-5-free-plugins#When:15:41:57Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Do you need a way to book appointments on your website? Do you need a way to show your business's upcoming events? Use high-quality WordPress calendar plugins and widgets for events, bookings, and appointments. </p>
<p>These versatile WordPress calendar plugins and widgets allow you complete flexibility over the calendars and functionality of the calendars that you show your audience. Here a few of the notable features of the calendar widgets and schedule plugins listed here:</p>
<ul>
<li>create custom events, classes, bookings, and meetings</li>
<li>appearance editor</li>
<li>filterable, sortable, and searchable booking list</li>
<li>Google Calendar integrations</li>
<li>WooCommerce integration</li>
<li>several online payment gateways</li>
<li>sharing on social media </li>
</ul>
<p>By adding a premium <a href="https://codecanyon.net/category/wordpress/calendars" target="_blank" rel="external noopener">WordPress calendar plugin</a> or WordPress schedule plugin to your website, you can provide your customers and potential customers with important information about your business and even collect payments for bookings.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/33704/image/eventon.jpg" alt="EventOn" width="850px" height="588px" loading="lazy"></a>
<figcaption><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener">EventOn is one of the many high-quality calendar WordPress widgets and plugins available on CodeCanyon.</a></figcaption>
</figure>
<p>Before you head over to <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a> and <a href="https://elements.envato.com/wordpress/plugins/user+interface/properties-responsive+retina-ready/sort-by-popular" target="_blank" rel="noopener">Envato Elements</a> to find the right user interface plugin to make your website even more user-friendly, let's explore the benefits of a <a href="https://elements.envato.com/subscribe/create-account" target="_blank" rel="noopener">subscription to Envato Elements</a>. </p>
<h2>Envato Elements: Unlimited Downloads</h2>
<p>Envato Elements is a service that provides an <a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">unlimited download subscription</a>, meaning that you are free to download as many items as you like from millions of digital assets. This includes premium WordPress themes and plugins, stock photography, royalty-free audio, stock video, and graphics.</p>
<p>The subscription is covered by simple commercial licensing that gives you the rights to use the item in a broad variety of projects, including those of a commercial nature.</p>
<p>The licensing is future-proof, meaning even if you unsubscribe and can't download items from Envato Elements any more, any existing uses that you registered are still covered.</p>
<figure class="post_image"><a href="https://elements.envato.com/"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." width="870px" height="520px" loading="lazy"></a></figure>
<p><a class="call-to-action-btn call-to-action-btn-primary" href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self" rel>Subscribe Today</a> </p>
<p><a href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self">Subscribe today</a> and start creating or learn more about why <a href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702" target="_self">Envato Elements is Great for WordPress Developers</a>! </p>
<h2>Calendar Plugins and Widgets on Envato Elements </h2>
<h3>1. <a href="https://elements.envato.com/wordpress-pro-event-calendar-WWJN4K7" target="_blank" rel="noopener">WordPress Pro Event Calendar</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-pro-event-calendar-WWJN4K7"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="870px" height="586px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/344ED606-EC83-4B06-8A5B-374759191E2D.jpeg 2x"></a></figure>
<p>The Pro Event Calendar plugin adds a professional and sleek calendar to your posts or pages. Custom CSS allows you to edit the calendar styles. It works on different types of devices, and you can use it inside a widget.</p>
<p>Users can submit events on the front-end, book events, and subscribe to newsletters via the calendar. You can add special dates to your calendar like holidays and also import events from ICS feed or Facebook. This calendar works across all modern browsers and supports Mailchimp and WPML translator. </p>
<h3>2. <a href="https://elements.envato.com/eventozilla-event-calendar-wordpress-plugin-W3DRK5C" target="_blank" rel="noopener">EventoZilla: Event Calendar WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/eventozilla-event-calendar-wordpress-plugin-W3DRK5C"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg" alt="EventoZilla - Event Calendar WordPress Plugin" loading="lazy" width="870px" height="590px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg" alt="EventoZilla - Event Calendar WordPress Plugin" loading="lazy" width="650px" height="442px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg" alt="EventoZilla - Event Calendar WordPress Plugin" loading="lazy" width="380px" height="261px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/4D566B96-CD8E-4C76-AED3-5360802E9D14.jpeg 2x"></a></figure>
<p>With this WordPress event calendar plugin, you can create a detailed events calendar that can adapt to the width of any device, screen, and orientation. You can create single-day and multi-day events and configure the colors of your event calendars to match your website colors. The events are shareable on Facebook, Twitter, or Pinterest. Users can register for an event on a defined URL that has a 'Book Now' button. You can translate or customize the button text.</p>
<p>There are two versions of the event calendar plugin. The extended version has a complex tile calendar where the events are highlighted and can also be navigated by months and years. The compact version has a simple calendar with months, navigation, and search. The calendars can be set to fit in the sidebar area of your website.</p>
<h3>3. <a href="https://elements.envato.com/eventozilla-event-calendar-addon-for-wpbakery-4NRRJYL" target="_blank" rel="noopener">EventoZilla Event Calendar: Addon For WPBakery</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/eventozilla-event-calendar-addon-for-wpbakery-4NRRJYL"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg" alt="EventoZilla - Event Calendar - Addon For WPBakery" loading="lazy" width="870px" height="582px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg" alt="EventoZilla - Event Calendar - Addon For WPBakery" loading="lazy" width="650px" height="437px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg" alt="EventoZilla - Event Calendar - Addon For WPBakery" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/73FF349E-A9C0-40B4-922A-3882D8C9E161.jpeg 2x"></a></figure>
<p>If you build websites using WPBakery Page Builder, the EventoZilla addon will help you add elegant event calendars. This WordPress interactive calendar plugin comes in an extended version, a compact version, and a sidebar version. They each have search options, loads of customization by color options, and a complete tile calendar navigation system.</p>
<h3>4. <a href="https://elements.envato.com/eventozilla-event-calendar-elementor-widget-addon-X3KNZC3" target="_blank" rel="noopener">EventoZilla Event Calendar: Elementor Widget Addon</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/eventozilla-event-calendar-elementor-widget-addon-X3KNZC3"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg" alt="EventoZilla Event Calendar Elementor Widget Addon" loading="lazy" width="870px" height="591px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg" alt="EventoZilla Event Calendar Elementor Widget Addon" loading="lazy" width="650px" height="443px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg" alt="EventoZilla Event Calendar Elementor Widget Addon" loading="lazy" width="380px" height="262px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/BCA5CA5E-47BE-4025-B20F-E171F24DADC3.jpeg 2x"></a></figure>
<p>For those using Elementor, this Event Calendar Widget for Elementor allows you to build detailed and interactive event calendars on your websites. This WordPress calendar plugin comes in an extended version, a compact version and a sidebar version. They each have search options, loads of customization by color options, and a complete tile calendar navigation system. The events are shareable on Twitter, Facebook, and Pinterest</p>
<h3>5. <a href="https://elements.envato.com/event-plugin-wordpress-fullevents-CCKJRM4" target="_blank" rel="noopener">FullEvents: Event Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/event-plugin-wordpress-fullevents-CCKJRM4"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg" alt="Event Plugin WordPress - FullEvents" loading="lazy" width="870px" height="592px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg" alt="Event Plugin WordPress - FullEvents" loading="lazy" width="650px" height="444px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg" alt="Event Plugin WordPress - FullEvents" loading="lazy" width="380px" height="262px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/0D7C2982-F556-458F-B6CB-84ED11B91B33.jpeg 2x"></a></figure>
<p>With this events plugin for WordPress you can create and display attractive and attention-grabbing event listings. The plugin has a user-friendly admin dashboard where you can add unlimited categories such as music, sports, clubs, or dance, and assign events to these categories.</p>
<p>You've got a variety of customizable event listing layouts to choose from. You can add images that grab the attention of visitors. It also comes with outstanding features that optimize users’ experience: advanced event search filter, AJAX filter, simple calendar, and full calendar.</p>
<p>The plugin works with all WordPress themes has two versions of event calendars. With the single calendar view, users have to click on an event to see the details. The full calendar view displays all your events and details. </p>
<h2><strong>The Best Calendar Plugins and Widgets on CodeCanyon</strong></h2>
<p>Explore over 7,000 of the best WordPress plugins ever created on CodeCanyon. With a low-cost, one-time payment, you can purchase one of these high-quality WordPress plugins and improve your website experience for you and your visitors. </p>
<p>Here are a few of the weekly best-selling and up-and-coming calendar WordPress plugins and widgets available on CodeCanyon for 2021.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress/calendars" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/use.jpg" alt="Best-Selling Calendar Plugins and Widgets" width="850px" height="558px" loading="lazy"></a>
<figcaption>Weekly best-selling Calendar WordPress plugins and widgets on CodeCanyon  </figcaption>
</figure>
<h2>Top 20 WordPress Calendar Plugins and Widgets (From CodeCanyon for 2021</h2>
<p>Here are 20 of the best-selling <a href="https://codecanyon.net/category/wordpress/calendars" target="_blank" rel="external noopener">WordPress calendar and schedule plugins</a> that are available for you to download on CodeCanyon:</p>
<h3>6. Bestselling: <a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017?_ga=2.131811151.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener">EventOn—WordPress Event Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017?_ga=2.131811151.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/33704/image/eventon.jpg" alt="EventOn" width="850px" height="588px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener">EventOn</a> is a multipurpose WordPress event calendar plugin that gives you all the things you need in a calendar. Not only can you customize each event with images, maps, icons, colors, and more, but you can also configure your calendar to search and sort in several different ways.</p>
<p>It has a clean, minimal design, and you'll be up and running quickly and easily.</p>
<p><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener">EventOn</a> is a nice, easy-to-use event calendar plugin that also offers a unique <a href="https://codecanyon.net/item/eventon-slider-addon/11063359" target="_blank" rel="external noopener">slider addon</a>. </p>
<h3>7. Bestselling: <a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" target="_blank" rel="external noopener">Bookly—WordPress Appointment Booking Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg" alt="Bookly" width="850px" height="424px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" target="_blank" rel="external noopener">Bookly</a> is an incredible appointment booking system that blurs the line between a WordPress website and a web application. It is well designed, fully responsive, and even supports gestures. It also has free integration with Zoom.</p>
<p>It allows customers to book and cancel appointments, update personal information, and send payments. Bookly's customization options and useful features make it more than just a way to serve customers well—it also helps a website owner keep track of staff and appointments at the same time. </p>
<p>You can create schedules for each staff member—you can even block out holidays. </p>
<h3>8. Trending: <a href="https://codecanyon.net/item/stachethemes-event-calendar-wordpress-events-calendar-plugin/16168229" target="_blank" rel="external noopener">Stachethemes Event Calendar</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/stachethemes-event-calendar-wordpress-events-calendar-plugin/16168229" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/98D1CE96-ECEC-4981-BF11-F1E4FB823789.jpeg" alt="Stachethemes Event Calendar" width="850px" height="463px" loading="lazy"></a></figure>
<p>This WordPress event calendar plugin offers everything you need to get started creating events. It has a built-in booking system where users can book and pay for tickets and appointments. </p>
<p>You can easily create single, multiple, and all-day events, or events that last for more than one day. You can showcase events in different ways, including a grid, box, map, agenda, and more. </p>
<p>It also comes with a front-end submission form where users can submit events. Users can also share events via Facebook Messenger, WhatsApp, and Viber.</p>
<h3>9. Trending: <a href="https://codecanyon.net/item/wooevents-calendar-and-event-booking/15598178" target="_blank" rel="noopener">WooEvents: Calendar and Event Booking</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wooevents-calendar-and-event-booking/15598178"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg" alt="wooevents-calendar-and-event-booking" loading="lazy" width="870px" height="641px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg" alt="wooevents-calendar-and-event-booking" loading="lazy" width="650px" height="480px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg" alt="wooevents-calendar-and-event-booking" loading="lazy" width="380px" height="283px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/2DFC972A-8A72-4675-B9FF-DC111EA8D9DA.jpeg 2x"></a></figure>
<p>If you want to create and sell events on WooCommerce, then the WooEvents plugin is the perfect choice. Using this event calendar plugin, you can create event bookings, calendars, classes, and schedulers, manage all your online events, and even delete events that have passed. </p>
<p>Visitors can register, submit, and book events. They will receive email notification of their transactions. All your events will have Google event schema support, so they can rank on search engines. You can export attendee data to CSV. The plugin seamlessly integrates with iCal and Google Calendar.</p>
<p>The plugin also supports both PDF invoices and barcodes, and it can be integrated with multiple payment gateways.  </p>
<h3>10. <a href="https://codecanyon.net/item/calendarize-it-for-wordpress/2568439?_ga=2.206210899.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener">Calendarize it!</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/calendarize-it-for-wordpress/2568439?_ga=2.206210899.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/11822C5B-7179-4FE9-8AE9-D764A3BB3DFF.jpeg" alt width="850px" height="500px" loading="lazy"></a></figure>
<p>Calendarize it! supports <a href="https://codecanyon.net/item/visual-composer-page-builder-for-wordpress/242431" target="_blank" rel="noopener">WPBakery Page Builder</a>, but it can also be used with any other popular page and layout builder by using shortcodes. </p>
<p>In addition to its simple design, it comes with a powerful CSS editor that allows you to change the colors, fonts, and style to match your brand. </p>
<p>This WordPress calendar plugin supports single events, recurring events, arbitrary recurring events, and recurring events with exceptions. It also has advanced filtering with custom categories. </p>
<h3>11. <a href="https://codecanyon.net/item/booked-appointment-booking-for-wordpress/9466968?_ga=2.105623491.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener">Booked: Appointment Booking for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/booked-appointment-booking-for-wordpress/9466968?_ga=2.105623491.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/E9EAE483-8EE6-43BE-991C-7FE12E63DB05.jpeg" alt="Booked Appointment Booking for WordPress " width="850px" height="432px" loading="lazy"></a></figure>
<p>Booked is another great appointment booking option. It features an advanced appointment calendar which allows you to manage appointments easily. It also gives you endless color possibilities when it comes to the design. </p>
<p>Besides guest booking and customer profiles, it has customizable customer and admin emails. Additional features include custom login and registration pages, time slots, and custom fields.  </p>
<h3>12. <a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_blank" rel="external noopener">Events Schedule</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/introoo.jpg" alt="Events Schedule - WordPress Events Calendar Plugin" width="850px" height="376px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_blank" rel="external noopener">Events Schedule</a> is a simple yet powerful WordPress event calendar that lets you schedule classes and events in seconds. It's the perfect plugin for any event organizer.</p>
<p>When it comes to search and filter, Events Schedule offers five filter categories: type, location, instructor, day, and time of day.  </p>
<p>This fully responsive WordPress event calendar can integrate with Google Maps and WooCommerce. It also includes a countdown feature. </p>
<p><a href="https://code.tutsplus.com/tutorials/how-to-add-a-schedule-to-your-wordpress-site--cms-32900" target="_blank" rel="external noopener">Learn how to use the Events Schedule plugin with our hands-on, step-by-step tutorial.</a></p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-add-a-schedule-to-your-wordpress-site--cms-32900"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Add a Calendar to Your WordPress Site With the Events Schedule Plugin</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li></ul>
<h3>13. <a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" target="_blank" rel="external noopener">Timetable Responsive Schedule for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg" alt="Timetable Responsive Schedule for WordPress" width="850px" height="357px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" target="_blank" rel="external noopener">Timetable Responsive Schedule for WordPress</a> offers a new approach to WordPress calendar plugins. It includes plenty of event options, many shortcode options, and a great widget lineup, making it one of the best WordPress calendar plugins you'll find.</p>
<p>With it, you can create a timetable of events easily! Use the Timetable shortcode generator to create timetable views for classes, medical departments, nightclubs, tutoring, and so on.</p>
<p>Quickly create a timetable by:</p>
<ul>
<li>adding a new event with day, time, category, and more</li>
<li>adjusting and configuring the design and appearance</li>
<li>generating your shortcode and placing it into a post or page</li>
</ul>
<p>And that's it!</p>
<h3>14. <a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?_ga=2.104958531.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener">HBook: Hotel Booking System</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?_ga=2.104958531.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg" alt width="850px" height="400px" loading="lazy"></a></figure>
<p>The <a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779" target="_blank" rel="external noopener">HBook hotel booking system</a> is specifically built for hotels and B&amp;Bs. It has a clean design that makes it very easy for customers to book directly from your website. </p>
<p>The WordPress hotel booking plugin features powerful booking management that lets you view bookings and reservations. You can also synchronize your bookings with Airbnb. This snappy plugin includes seasons and rates tables, availability calendars, and customizable booking forms. </p>
<p>It also comes with multiple payment gateways such as PayPal, Stripe, Square, and Mollie. </p>
<h3>15. <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" target="_blank" rel="external noopener">WordPress Pro Event Calendar</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/712D363A-3DE0-4894-96CF-2C8FD4E1A0B2.jpeg" alt="WordPress Pro Event Calendar" width="850px" height="597px" loading="lazy"></a></figure>
<p>WordPress Pro Event Calendar stands out from the pack. What really sets it apart is the ability to import events from ICS feeds and Facebook. Best of all, <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" target="_blank" rel="external noopener">WordPress Pro Event Calendar</a> accepts events submitted by front-end users, making it easy for users to add events.</p>
<p>Other great features of this well-designed and fully responsive plugin include WPML support, fully responsive layouts, flexible event settings, and the ability to subscribe to a calendar. </p>
<h3>16. <a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" target="_blank" rel="external noopener">Event Booking Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/1EB14523-9DFE-45EB-AE0E-3EE59967CF85.jpeg" alt="Event Booking Pro" width="850px" height="558px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" target="_blank" rel="external noopener">Event Booking Pro</a> is an impressive WordPress calendar plugin that boasts over 600 settings! This WordPress calendar plugin is always adding more great features. </p>
<p>There's no shortage of shortcodes. It supports CSV. Everything can be customized and styled as you like, making it fit into your WordPress theme design <em>perfectly</em>.</p>
<p>It also comes equipped with user-friendly event creation, unlimited events, offline and multiple bookings, and the ability to create coupons. Finally, it integrates with PayPal. </p>
<p>It's a great option for setting up a fully functional event booking system. </p>
<h3>17. <a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497" target="_blank" rel="external noopener">Amelia</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/33704/image/amelia.png" alt="Amelia" width="850px" height="389px" loading="lazy"></a></figure>
<p><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497" target="_blank" rel="external noopener">Amelia</a> is a simple and powerful plugin for accepting online appointments and bookings. It is fully customizable and has a smooth UX that provides a seamless booking experience on just one page. </p>
<p>It features a good range of elements and components that make it easy to create beautiful layouts, even when you have no coding experience.</p>
<p>Amelia also allows for Google Calendar synchronization. It's the perfect plugin for gyms, spas, law consultants, fitness experts, etc.</p>
<p>On top of multiple payment options, other key features include a powerful admin dashboard and real-time SMS notifications.</p>
<h3>18. <a href="https://codecanyon.net/item/gappointments-appointment-booking-addon-for-gravity-forms/21216523?_ga=2.171999971.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener">gAppointments: Appointment Booking Add-On for Gravity Forms</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/gappointments-appointment-booking-addon-for-gravity-forms/21216523?_ga=2.171999971.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/210F4EA1-97FE-49AA-890D-64EC5B8CFB70.jpeg" alt="gAppointments Appoint Booking Addon for Gravity Forms " width="850px" height="407px" loading="lazy"></a></figure>
<p>If you're already using Gravity Forms and need to integrate appointment booking, this date and time picker plugin is certainly worth a look. It comes with many options for service intervals and slots. </p>
<p>It supports paid and non-paid booking and accepts any payment gateway. Combined with Gravity Forms, <a href="https://codecanyon.net/item/gappointments-appointment-booking-addon-for-gravity-forms/21216523" target="_blank" rel="external noopener">gAppointments</a> is a powerful plugin for booking appointments.</p>
<h3>19. <a href="https://codecanyon.net/item/chauffeur-booking-system-for-wordpress/21072773" target="_blank" rel="external noopener">Chauffeur Booking System</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/chauffeur-booking-system-for-wordpress/21072773" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg" alt="Chauffeur Booking System" width="850px" height="565px" loading="lazy"></a></figure>
<p>As the name suggests, Chauffeur Booking System is a car reservation system suitable for companies of all sizes. It provides an easy way to book a vehicle based on distance, hourly rate, or a flat rate. It also supports WooCommerce and Google Calendar integration.</p>
<p>Other features include:</p>
<ul>
<li>live route preview</li>
<li>unlimited booking forms</li>
<li>multiple payment methods</li>
<li>multiple currencies</li>
<li>geofencing and geolocation</li>
</ul>
<h3>20. <a href="https://codecanyon.net/item/the-events-calendar-templates-and-shortcode-wordpress-plugin/20143286" target="_blank" rel="external noopener">Events Shortcodes and Templates Pro Addon for The Events Calendar</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/the-events-calendar-templates-and-shortcode-wordpress-plugin/20143286" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/36000/image/Events%20Shortcodes%20Templates%20Pro%20Addon.jpg" alt="Events Shortcodes  Templates Pro Addon For The Events Calendar" width="850px" height="414px" loading="lazy"></a></figure>
<p>This WordPress event calendar is a premium add-on for <a href="https://wordpress.org/plugins/the-events-calendar/" target="_blank" rel="external noopener">The Events Calendar</a>, a free website calendar plugin from WordPress. This was designed to extend the design and shortcode builder limitations of the free plugin. </p>
<p>One of the best features of this WordPress event calendar plugin is that it's SEO-optimized, so your events can appear in Google search results. This add-on provides 15+ premium templates and comes with an easy shortcode builder and settings panel. </p>
<h3>21. <a href="https://codecanyon.net/item/santapress-wordpress-advent-calendar-plugin-quiz/25193511" target="_blank" rel="external noopener">SantaPress: WordPress Advent Calendar Plugin and Quiz</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/santapress-wordpress-advent-calendar-plugin-quiz/25193511" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/36000/image/SantaPress%20-%20WordPress%20Advent%20Calendar%20Plugin.jpg" alt="SantaPress - WordPress Advent Calendar Plugin  Quiz" width="850px" height="692px" loading="lazy"></a></figure>
<p>A cheerful addition to our list of best calendar plugins for WordPress is this seasonal WordPress event calendar. SantaPress is an advent calendar plugin to surprise your visitors every day with a small gift until Christmas. </p>
<p>This WordPress calendar comes with eight beautiful layouts, over 200 door images, and more great features (such as snowfall, hidden mode, quiz mode, etc). This cute WordPress event calendar makes your visitors want to come back every day!</p>
<h3>22. <a href="https://codecanyon.net/item/noo-timetable-responsive-wordpress-timetable-plugin/17511898" target="_blank" rel="external noopener">Noo Timetable: Responsive Calendar and Auto Sync WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/noo-timetable-responsive-wordpress-timetable-plugin/17511898" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/36000/image/Noo%20Timetable%20-%20Responsive%20Calendar%20WordPress%20Plugin.jpg" alt="Noo Timetable - Responsive Calendar  Auto Sync WordPress Plugin" width="850px" height="743px" loading="lazy"></a></figure>
<p>Noo Timetable is a super flexible WordPress event calendar with a fully responsive interface. This WordPress calendar is best for fitness, yoga, and dance classes, but it can be easily adapted to any kind of event or office, like a medical clinic.</p>
<p>Some of the best features of this WordPress event calendar are:</p>
<ul>
<li>modern, up-to-date style</li>
<li>iCal file exporting</li>
<li>event filters</li>
<li>event navigation</li>
<li>event popups</li>
<li>unlimited color options</li>
</ul>
<h3>23. <a href="https://codecanyon.net/item/eventer-wordpress-event-manager-plugin/20972534" target="_blank" rel="external noopener">Eventer: All-in-One Event Management Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/eventer-wordpress-event-manager-plugin/20972534" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/3F67D974-964F-4621-A8FC-1FC968F9CBDF.jpeg" alt="Eventer All-in-one Event Management Plugin " width="850px" height="549px" loading="lazy"></a></figure>
<p>Eventer is your all-in-one event management WordPress plugin, with all the essential and premium features you could need. </p>
<p>The Eventer plugin allows your website visitors to register for events online. Multiple ticket types can be made for any event: free or paid. Payments can be done via your choice of offline payment mode or online via PayPal. Recurring events for multiple dates have their own count of available tickets.</p>
<p>Use Eventer’s shortcode generator to show your events in multiple styles. Everything's fully responsive for all devices. It is also compatible with WooCommerce and WPBakery Page Builder. </p>
<h3>24. <a href="https://codecanyon.net/item/calendarista/21315966" target="_blank" rel="external noopener">Calendarista Premium: WordPress Appointment Booking and Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/calendarista/21315966" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/0428CE3E-820C-42A4-9D54-B0C010BD87A2.jpeg" alt="Calendarista Premium - WordPress Appointment Booking  Calendar Plugin" width="850px" height="243px" loading="lazy"></a></figure>
<p>Calendarista promises you will fall back in love with booking! </p>
<p>It's fast and easy for businesses to add this WordPress booking and calendar plugin to their websites. They will quickly and easily be able to take online bookings. This versatile system works for all kinds of businesses: hotel, car rental, apartment rental, travel agency, beauty salons, restaurants, and more.</p>
<p>The plugin offers ten booking modes out of the box, three payment gateways, a custom form builder, a back-end calendar to view your appointments, and support for Google Maps and WooCommerce.</p>
<h3>25. <a href="https://codecanyon.net/item/fat-event-wordpress-event-and-calendar-booking/22311915" target="_blank" rel="external noopener">FAT Event: WordPress Event and Calendar Booking</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/fat-event-wordpress-event-and-calendar-booking/22311915" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/36000/image/FAT%20Event%20-%20WordPress%20Event%20and%20Calendar%20Booking.jpg" alt="FAT Event - WordPress Event and Calendar Booking" width="850px" height="772px" loading="lazy"></a></figure>
<p>FAT Event is a great WordPress event calendar. With this event manager plugin, you can create a full calendar, timetables, upcoming events, and recurring events. You can also use multiple layouts like list, grid, and carousel.</p>
<p>This WordPress event calendar plugin is perfect for many events and purposes. You can use it for school timetables, upcoming events in a venue, conference programs, agendas, and more.</p>
<p>This year's update features:</p>
<ul>
<li>email reminders</li>
<li>email notification for admin</li>
<li>QR code in email notification</li>
<li>WooCommerce integration</li>
<li>coupon codes </li>
</ul>
<h3>26. <a href="https://codecanyon.net/item/elegant-calendar/30936121" target="_blank" rel="noopener">Elegant Calendar: WordPress Events Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/elegant-calendar/30936121"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg" alt="Elegant Calendar - WordPress Events Calendar Plugin" loading="lazy" width="870px" height="603px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg" alt="Elegant Calendar - WordPress Events Calendar Plugin" loading="lazy" width="650px" height="452px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg" alt="Elegant Calendar - WordPress Events Calendar Plugin" loading="lazy" width="380px" height="267px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36962/image-upload/827EF67B-0E2E-429C-8D05-D01F2FFE1A3C.jpeg 2x"></a></figure>
<p>With this responsive event calendar plugin, you can easily create and manage events in a calendar on your website using premade layouts. The plugin works with major theme frameworks like Avada, Divi, Enfold, Genesis, and others.</p>
<p>You can create event calendars on your pages using shortcodes and show events in list view. Events can also be viewed by day, week, or month. Users can search events using the search bar, which you can show or hide. You can filter events by categories and customize event colors.  </p>
<p>This event calendar scheduler WordPress plugin supports comments on a single event page. The comments can be disabled anytime. </p>
<h2>5 Free WordPress Calendar Plugins and Widgets for Download in 2021</h2>
<p>While the premium plugins and widgets listed above have the most features, buying a premium plugin or widget may not be in your budget. That's why I've compiled a list of the top five free calendar plugins and widgets for 2021:</p>
<h3>1. <a href="https://wordpress.org/plugins/the-events-calendar/" target="_blank" rel="external noopener">The Events Calendar</a>
</h3>
<figure class="post_image"><a href="https://wordpress.org/plugins/the-events-calendar/" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/dayf.jpg" alt="The Events Calendar" width="850px" height="885px" loading="lazy"></a></figure>
<p>With this free plugin, you can create and manage events with ease. The features available in this plugin allow you to completely customize your calendar to fit your business's needs.</p>
<h3>2. <a href="https://simplecalendar.io/" target="_blank" rel="external noopener">Simple Calendar</a>
</h3>
<p>Simple Calendar is the easiest way to add Google Calendar events to your WordPress site. The WordPress calendar plugin has a ton of great features, including design templates, time zone settings, fully responsive calendars, and much more. </p>
<h3>3. <a href="https://wordpress.org/plugins/all-in-one-event-calendar/" target="_blank" rel="external noopener">All-in-One Event Calendar</a>
</h3>
<figure class="post_image"><a href="https://wordpress.org/plugins/all-in-one-event-calendar/" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/cal.jpg" alt="All-in-One Event Calendar" width="850px" height="647px" loading="lazy"></a></figure>
<p>The All-in-One Event Calendar offers a clean visual design with a comprehensive set of features to create an advanced website calendar system. Give this free plugin a try! You won't be disappointed. </p>
<h3>4. <a href="https://wordpress.org/plugins/sugar-calendar-lite/" target="_blank" rel="external noopener">Sugar Calendar</a>
</h3>
<p>Sugar Calendar is a simple and lightweight calendar that provides you with all the necessary features for event management. The easy-to-use interface and the minimal set of features in this plugin will help you get your event calendar up and running in no time. </p>
<h3>5. <a href="https://wordpress.org/plugins/booking/" target="_blank" rel="external noopener">Booking Calendar</a>
</h3>
<p>Whether you're running a real estate business, yoga class, or personal training, the Booking Calendar plugin can help you implement a great booking system. Add this plugin to your collection today!</p>
<h2>How to Create a Calendar for a Yoga Class With WordPress Pro Event Calendar</h2>
<p>Now that I have gone over all of the best free and premium event calendar plugins, I will show you just how easy it is to create a calendar with one of the premium plugins. We are going to go over how to create a simple calendar that displays the times of our yoga class on a calendar with the <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" target="_blank" rel="external noopener">WordPress Pro Event Calendar</a> plugin. </p>
<h3>1. Create a Calendar</h3>
<p>Once you have installed the Pro Event Calendar plugin, we will head on over to <strong>WP Dashboard &gt; Event Calendar &gt; Calendars</strong> so we can create the calendar that we want to be displayed on our yoga studio website. Next, click the <strong>Add new calendar</strong> button to create a new calendar. We will fill in the <strong>Title</strong> field to say <strong>Yoga Calendar</strong>. Next, click the <strong>save</strong> button at the bottom of the calendar editor. </p>
<h3>2. Create an Event</h3>
<p>Now that we have created our calendar, it's time to add our event. Navigate to <strong>WP Dashboard &gt; Event Calendar &gt; All Events. </strong>Click the <strong>Add New</strong> button to create a new event. We will title this event <strong>Yoga Class</strong>. </p>
<p>In the right-hand column, we will set up the details for this event. Our yoga class is every Monday, Wednesday, and Friday at 2 p.m., so we need to reflect this in the event. Under <strong>Start Time</strong>, we will type in <strong>2 p.m.</strong> Under <strong>Frequency</strong>, select <strong>Weekly</strong>. Then select the checkboxes next to <strong>Monday, Wednesday</strong>, and <strong>Friday</strong>. </p>
<figure class="post_image"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/ohh.png" alt="Setting start time and frequency" width="850px" height="827px" loading="lazy"></figure>
<p>Finally, hit the <strong>Publish</strong> button, and the event will now be present on the yoga calendar. </p>
<h3>3. Add the Calendar to Your Website</h3>
<p>Now it's time to add the calendar to the website. WordPress uses shortcodes to add the calendar to your website, so we will go back to <strong>WP Dashboard &gt; Event Calendar &gt; Calendars </strong>and copy the shortcode that is under <strong>Default Shortcode. </strong>We will then click <strong>WP Dashboard &gt; Pages &gt; Add New</strong> and title it <strong>Calendar</strong>. </p>
<p>In the text editor, we will paste this shortcode. Hit the <strong>Publish</strong> button, and that's it. We have successfully created our yoga calendar, and it's now displayed on a new page that we created. </p>
<figure class="post_image"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34451/image/cal.png" alt="Yoga Calendar Wordpress Pro Event Calendar" width="850px" height="848px" loading="lazy"></figure>
<p>This short tutorial only scratched the surface of what this plugin can do. I also have a more <a href="https://code.tutsplus.com/tutorials/insert-a-calendar-into-wordpress-with-the-pro-event-calendar-plugin--cms-33677" target="_blank" rel="external noopener">in-depth tutorial on this powerful plugin</a>, so be sure to check it out!</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/insert-a-calendar-into-wordpress-with-the-pro-event-calendar-plugin--cms-33677"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1809/posts/33677/preview_image/ca.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1809/posts/33677/preview_image/ca.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1809/posts/33677/preview_image/ca.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1809/posts/33677/preview_image/ca.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/33677/preview_image/ca.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/33677/preview_image/ca.jpg 2x"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">Insert a Calendar Into WordPress With the Pro Event Calendar Plugin </div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<h2>Effective Calendar Management for Remote Teams </h2>
<p>Choosing the right calendar tools from Envato Elements and CodeCanyon is only the first step. Use these tips to guide you in the best way to use a Calendar plugin.</p>
<h4>1. Pay Attention to Time Zones</h4>
<p>When it comes to scheduling meetings, consider the time zones where your team members live and find a time that works for everyone. </p>
<h4>2. Let Participants Know in Advance</h4>
<p>Give enough notice for meetings and conference calls for video or phone. Two weeks is usually sufficient. </p>
<h4>3. Expect Changes</h4>
<p>Be prepared for sudden changes of plan. Make sure to inform all participants about any changes, and let them know the new date and time. </p>
<h4>4. Use Notifications</h4>
<p>Take advantage of notifications to remind you of important dates and events. </p>
<h4>5. Use Roles and Permissions</h4>
<p>Consider different users' needs for accessing the calendar. Consider restricted access that allows them to see but not make changes to scheduled meetings and events. </p>
<h2>Discover More WordPress Plugins and Resources</h2>
<p>Now, you've seen our best <a href="https://codecanyon.net/category/wordpress/calendars" target="_blank" rel="external noopener">calendar plugins for WordPress</a> and how to install and customize an event calendar plugin. But I'm sure you'd like to see more WordPress plugins and learn more about how to use WordPress. I've got some useful resources for you:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/what-is-a-wordpress-plugin--cms-34582"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/34582/preview_image/plugs.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/34582/preview_image/plugs.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/227/posts/34582/preview_image/plugs.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/227/posts/34582/preview_image/plugs.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/227/posts/34582/preview_image/plugs.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/227/posts/34582/preview_image/plugs.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">What Is a WordPress Plugin?</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-add-plugins-to-wordpress--cms-34369"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/34369/preview_image/How-to-Install-Any-Free-Premium-WordPress-Plugin-wp.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">How to Add Plugins to WordPress</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/10-best-wordpress-booking-reservation-plugins--cms-30128"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/30128/preview_image/preview%20copia.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">20+ Best WordPress Booking and Reservation Plugins</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/17-best-wordpress-gallery-plugins--cms-25961"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1225/posts/25961/preview_image/20%20Useful%20WordPress%20Gallery%20Plugins%20-%20featured.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WordPress Gallery Plugins</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/the-best-learning-management-system-plugins-for-wordpress--cms-33921"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33921/preview_image/mobile%20learning%20guide.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33921/preview_image/mobile%20learning%20guide.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33921/preview_image/mobile%20learning%20guide.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33921/preview_image/mobile%20learning%20guide.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33921/preview_image/mobile%20learning%20guide.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-c]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-17T15:41:57+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[25 Ridiculously Impressive HTML5 Canvas Experiments]]></title>
      <link>//shineyrock.com/blog/read/25-ridiculously-impressive-html5-canvas-experiments</link>
      <guid>https://shineyrock.com/blog/read/25-ridiculously-impressive-html5-canvas-experiments#When:01:30:48Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>HTML5 is the thing to talk about these days. Today, we have a collection of ridiculously impressive HTML5 canvas-based experiments that will make you say, "Wow!" Let's take a peek at some of the latest, cutting-edge examples out there.</p>
<p><em>Warning: The animations in some of these canvas experiments may potentially trigger seizures for people with photosensitive epilepsy. Viewer discretion is advised.</em></p>
<p>Before browsing through these experiments, have a look at our <a href="https://themeforest.net/tags/html5" target="_self">HTML5 templates</a> and <a href="https://codecanyon.net/category/html5" target="_self">HTML5 scripts</a>, as a quality script or theme might be a good option for your next project. </p>
<figure class="post_image"><a href="https://studio.envato.com/explore/websites-programming" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/48/posts/9251/image/Websites.jpg" alt="Web developers on Envato Studio" loading="lazy" width="620px" height="488px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1200/uploads/users/48/posts/9251/image/Websites.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/48/posts/9251/image/Websites.jpg" alt="Web developers on Envato Studio" loading="lazy" width="620px" height="488px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1200/uploads/users/48/posts/9251/image/Websites.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/48/posts/9251/image/Websites.jpg" alt="Web developers on Envato Studio" loading="lazy" width="380px" height="301px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/48/posts/9251/image/Websites.jpg 2x"></a></figure>
<p>Now for the experiments!</p>
<h2>
<span class="sectionnum">1.</span> <a href="https://codepen.io/jackrugile/pen/DGenc" target="_blank" rel="noopener">Orbital Trails</a>
</h2>
<p>Beautiful swirling rainbow particles!</p>
<figure class="post_image"><a href="https://codepen.io/jackrugile/pen/DGenc" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png" alt="Orbital Trails" loading="lazy" width="870px" height="548px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png" alt="Orbital Trails" loading="lazy" width="650px" height="411px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png" alt="Orbital Trails" loading="lazy" width="380px" height="244px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_canvas_orbital_trails.png 2x"></a></figure>
<h2>
<span class="sectionnum">2.</span> <a href="https://codepen.io/towc/pen/mJzOWJ" target="_blank" rel="noopener">Neon Hexagon Patterns</a>
</h2>
<p>Glowing lights and particles trace this hexagonal, honey-comb pattern.</p>
<figure class="post_image"><a href="https://codepen.io/towc/pen/mJzOWJ" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png" alt="Neon Hexagon Patterns" loading="lazy" width="870px" height="529px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png" alt="Neon Hexagon Patterns" loading="lazy" width="650px" height="397px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png" alt="Neon Hexagon Patterns" loading="lazy" width="380px" height="236px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_hexagon_traces.png 2x"></a></figure>
<h2>
<span class="sectionnum">3.</span> <a href="https://codepen.io/mladen___/pen/gbvqBo" target="_self">Long Shadow</a>
</h2>
<p>Simulates a movable light source amongst boxes.</p>
<figure class="post_image"><a href="https://codepen.io/mladen___/pen/gbvqBo" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png" alt="Long Shadow" loading="lazy" width="870px" height="494px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png" alt="Long Shadow" loading="lazy" width="650px" height="371px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png" alt="Long Shadow" loading="lazy" width="380px" height="221px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_long_shadow.png 2x"></a></figure>
<h2>
<span class="sectionnum">4.</span> <a href="https://codepen.io/MarcoGuglielmelli/pen/lLCxy" target="_self">Animated Particle Background</a>
</h2>
<p>A cosmic network of nodes and lines, with animation and a spotlight effect.</p>
<figure class="post_image"><a href="https://codepen.io/MarcoGuglielmelli/pen/lLCxy" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png" alt="Animated Particle Background" loading="lazy" width="870px" height="472px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png" alt="Animated Particle Background" loading="lazy" width="650px" height="355px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png" alt="Animated Particle Background" loading="lazy" width="380px" height="211px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_animated_particle_background.png 2x"></a></figure>
<h2>
<span class="sectionnum">5.</span> <a href="https://codepen.io/alexzaworski/pen/mEkvAG" target="_blank" rel="noopener">Click Response</a>
</h2>
<p>Click anywhere on the canvas below to see a cute explosion of circles.</p>
<p><iframe src="https://codepen.io/alexzaworski/embed/mEkvAG?height=481&amp;theme-id=light&amp;default-tab=result" width="850" height="481" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<h2>
<span class="sectionnum">6.</span> <a href="https://codepen.io/at80/pen/tqdmv" target="_blank" rel="noopener">Heart Particles</a>
</h2>
<p>A vast cloud of shining falling hearts.</p>
<figure class="post_image"><a href="https://codepen.io/at80/pen/tqdmv" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png" alt="Heart Particles" loading="lazy" width="870px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png" alt="Heart Particles" loading="lazy" width="650px" height="333px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png" alt="Heart Particles" loading="lazy" width="380px" height="199px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_heart_particles.png 2x"></a></figure>
<h2>
<span class="sectionnum">7.</span> <a href="https://codepen.io/tsuhre/pen/BYbjyg" target="_blank" rel="noopener">Colorful Ribbons</a>
</h2>
<p>Watch these colorful bands of light fill the screen.</p>
<figure class="post_image"><a href="https://codepen.io/tsuhre/pen/BYbjyg" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png" alt="Colorful Ribbons" loading="lazy" width="870px" height="462px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png" alt="Colorful Ribbons" loading="lazy" width="650px" height="348px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png" alt="Colorful Ribbons" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_colorful_ribbons.png 2x"></a></figure>
<h2>
<span class="sectionnum">8.</span> <a href="https://codepen.io/tholman/pen/qCnfB" target="_blank" rel="noopener">Draw With Text</a>
</h2>
<p>Click and keep dragging on the canvas to draw with random words.</p>
<p><iframe src="https://codepen.io/alexzaworski/embed/qCnfB?height=481&amp;theme-id=light&amp;default-tab=result" width="850" height="481" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<h2>
<span class="sectionnum">9.</span> <a href="https://codepen.io/hakimel/pen/QdWpRv" target="_blank" rel="noopener">Rotating Spiral</a>
</h2>
<p>A 3D spiral, rendered with lines. You can even rotate it with the mouse!</p>
<figure class="post_image"><a href="https://codepen.io/hakimel/pen/QdWpRv" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png" alt="Rotating Spiral" loading="lazy" width="870px" height="447px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png" alt="Rotating Spiral" loading="lazy" width="650px" height="336px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png" alt="Rotating Spiral" loading="lazy" width="380px" height="201px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_spiral.png 2x"></a></figure>
<h2>
<span class="sectionnum">10.</span> <a href="https://codepen.io/kennethcachia/pen/Fhvie" target="_blank" rel="noopener">Shape Shifting Text</a>
</h2>
<p>View this one in full-screen mode. Type in text and watch it appear in a cool particle effect.</p>
<figure class="post_image"><a href="https://codepen.io/kennethcachia/pen/Fhvie" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png" alt="Shape Shifting Text" loading="lazy" width="870px" height="415px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png" alt="Shape Shifting Text" loading="lazy" width="650px" height="313px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png" alt="Shape Shifting Text" loading="lazy" width="380px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_shape_shifting_text.png 2x"></a></figure>
<h2>
<span class="sectionnum">11.</span> <a href="https://codepen.io/linrock/pen/Amdhr" target="_blank" rel="noopener">Falling Confetti</a>
</h2>
<p>A pretty falling confetti effect. Perfect for a background!</p>
<figure class="post_image"><a href="https://codepen.io/linrock/pen/Amdhr" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png" alt="Falling Confetti" loading="lazy" width="870px" height="437px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png" alt="Falling Confetti" loading="lazy" width="650px" height="329px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png" alt="Falling Confetti" loading="lazy" width="380px" height="197px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_falling_confetti.png 2x"></a></figure>
<h2>
<span class="sectionnum">12.</span> <a href="https://codepen.io/jackrugile/pen/qLCuE" target="_blank" rel="noopener">Parallax Skyline</a>
</h2>
<p>A minimalist side-scrolling parallax. This one would be perfect for an old-school video game.</p>
<figure class="post_image"><a href="https://codepen.io/jackrugile/pen/qLCuE" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png" alt="Parallax Skyline" loading="lazy" width="870px" height="385px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png" alt="Parallax Skyline" loading="lazy" width="650px" height="291px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png" alt="Parallax Skyline" loading="lazy" width="380px" height="175px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_parallax_skyline.png 2x"></a></figure>
<h2>
<span class="sectionnum">13.</span> <a href="https://codepen.io/mimikos/pen/wKqyqY" target="_blank" rel="noopener">Ambient Background</a>
</h2>
<p>Fuzzy bokeh spots swirling around. View this one in full-page mode for the best effect.</p>
<figure class="post_image"><a href="https://codepen.io/mimikos/pen/wKqyqY" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png" alt="Ambient Background" loading="lazy" width="870px" height="439px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png" alt="Ambient Background" loading="lazy" width="650px" height="331px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png" alt="Ambient Background" loading="lazy" width="380px" height="197px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_ambient_background.png 2x"></a></figure>
<h2>
<span class="sectionnum">14.</span> <a href="https://codepen.io/waisbren89/pen/gwvVpP" target="_blank" rel="noopener">Fizzy Sparks</a>
</h2>
<p>Just hover the mouse over the canvas and see shiny sparks go off everywhere.</p>
<p><iframe src="https://codepen.io/alexzaworski/embed/gwvVpP?height=481&amp;theme-id=light&amp;default-tab=result" width="850" height="481" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<h2>
<span class="sectionnum">15.</span> <a href="https://codepen.io/juliangarnier/pen/gmOwJX" target="_blank" rel="noopener">Anime.js Fireworks</a>
</h2>
<p>Click for a simple, but stylish and colorful fireworks effect.  </p>
<figure class="post_image"><a href="https://codepen.io/juliangarnier/pen/gmOwJX" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png" alt="Anime.js Fireworks" loading="lazy" width="870px" height="434px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png" alt="Anime.js Fireworks" loading="lazy" width="650px" height="327px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png" alt="Anime.js Fireworks" loading="lazy" width="380px" height="195px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_animejs_canvas_fireworks.png 2x"></a></figure>
<h2>
<span class="sectionnum">16.</span> <a href="https://codepen.io/tholman/pen/Apvxe" target="_blank" rel="noopener">Mechanical Grass</a>
</h2>
<p>Watch the "grass" grow wherever you move your mouse. Be sure to view this one in full screen to see the effect.</p>
<figure class="post_image"><a href="https://codepen.io/tholman/pen/Apvxe" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png" alt="Mechanical Grass" loading="lazy" width="870px" height="419px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png" alt="Mechanical Grass" loading="lazy" width="650px" height="316px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png" alt="Mechanical Grass" loading="lazy" width="380px" height="189px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_mechanical_grass.png 2x"></a></figure>
<h2>
<span class="sectionnum">17.</span> <a href="https://codepen.io/Thibka/pen/BRzgOM" target="_blank" rel="noopener">Interactive Stars</a>
</h2>
<p>Watch stars and constellations appear in the night sky as you move your mouse.</p>
<figure class="post_image"><a href="https://codepen.io/Thibka/pen/BRzgOM" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png" alt="Interactive Stars" loading="lazy" width="870px" height="410px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png" alt="Interactive Stars" loading="lazy" width="650px" height="309px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png" alt="Interactive Stars" loading="lazy" width="380px" height="185px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_interactive_stars.png 2x"></a></figure>
<h2>
<span class="sectionnum">18.</span> <a href="https://codepen.io/akm2/pen/rHIsa" target="_blank" rel="noopener">Gravity Points</a>
</h2>
<p>Click anywhere on the canvas and see all the particles gravitate towards that point.</p>
<p><iframe src="https://codepen.io/alexzaworski/embed/rHIsa?height=481&amp;theme-id=light&amp;default-tab=result" width="850" height="481" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<h2>
<span class="sectionnum">19.</span> <a href="https://codepen.io/ImagineProgramming/pen/LpOJzM" target="_blank" rel="noopener">Particle Swarm</a>
</h2>
<p>Simulated particles swirl around in a simulated magnetic field.</p>
<figure class="post_image"><a href="https://codepen.io/ImagineProgramming/pen/LpOJzM" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png" alt="Particle Swarm" loading="lazy" width="870px" height="475px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png" alt="Particle Swarm" loading="lazy" width="650px" height="357px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png" alt="Particle Swarm" loading="lazy" width="380px" height="213px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_particle_swarm.png 2x"></a></figure>
<h2>
<span class="sectionnum">20.</span> <a href="https://codepen.io/zadvorsky/pen/xxwbBQV" target="_blank" rel="noopener">Crowd Simulator</a>
</h2>
<p>This amusing animation simulates a busy crowd of people walking.</p>
<figure class="post_image"><a href="https://codepen.io/zadvorsky/pen/xxwbBQV" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png" alt="Crowd Simulator" loading="lazy" width="870px" height="368px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png" alt="Crowd Simulator" loading="lazy" width="650px" height="278px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png" alt="Crowd Simulator" loading="lazy" width="380px" height="167px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_crowd_simulator.png 2x"></a></figure>
<h2>
<span class="sectionnum">21.</span> <a href="https://codepen.io/tmrDevelops/pen/dMdNvy" target="_blank" rel="noopener">Birds of a Feather</a>
</h2>
<p>A beautiful and serene animated flocking simulation.</p>
<figure class="post_image"><a href="https://codepen.io/tmrDevelops/pen/dMdNvy" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png" alt="Birds of a Feather" loading="lazy" width="870px" height="473px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png" alt="Birds of a Feather" loading="lazy" width="650px" height="356px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png" alt="Birds of a Feather" loading="lazy" width="380px" height="212px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_birds_of_feather.png 2x"></a></figure>
<h2>
<span class="sectionnum">22.</span> <a href="https://codepen.io/akm2/pen/Aatbf" target="_blank" rel="noopener">Lightning</a>
</h2>
<p>Connect two points anywhere on the screen and watch the electricity arc!</p>
<figure class="post_image"><a href="https://codepen.io/akm2/pen/Aatbf" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png" alt="Lightning" loading="lazy" width="870px" height="431px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png" alt="Lightning" loading="lazy" width="650px" height="325px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png" alt="Lightning" loading="lazy" width="380px" height="194px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_lightning.png 2x"></a></figure>
<h2>
<span class="sectionnum">23.</span> <a href="https://codepen.io/akm2/pen/nImoa" target="_blank" rel="noopener">Noise Abstraction</a>
</h2>
<p>A unique animated algorithm for generating stylish and colorful abstract backgrounds. </p>
<figure class="post_image"><a href="https://codepen.io/akm2/pen/nImoa" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png" alt="Noise Abstraction" loading="lazy" width="870px" height="495px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png" alt="Noise Abstraction" loading="lazy" width="650px" height="372px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png" alt="Noise Abstraction" loading="lazy" width="380px" height="221px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_noise_abstraction.png 2x"></a></figure>
<h2>
<span class="sectionnum">24.</span> <a href="https://codepen.io/tmrDevelops/pen/rVNxVQ" target="_blank" rel="noopener">Liquid Lights</a>
</h2>
<p>A screen full of animated flashing lights, reminiscent of a nightclub or concert.</p>
<figure class="post_image"><a href="https://codepen.io/tmrDevelops/pen/rVNxVQ" target="_blank" rel="noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png" alt="Liquid Lights" loading="lazy" width="870px" height="465px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png" alt="Liquid Lights" loading="lazy" width="650px" height="350px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png" alt="Liquid Lights" loading="lazy" width="380px" height="208px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/37005/image-upload/tutsplus_liquid_lights.png 2x"></a></figure>
<h2>
<span class="sectionnum">25.</span> <a href="https://codepen.io/run-time/pen/JbEFn" target="_blank" rel="noopener">Rainbow Spider</a>
</h2>
<p>Can you move quickly enough to make the spider fall down from the web? Give it a try.</p>
<p><iframe src="https://codepen.io/alexzaworski/embed/JbEFn?height=481&amp;theme-id=light&amp;default-tab=result" width="850" height="481" frameborder="no" scrolling="no" allowfullscreen="true" loading="lazy"></iframe></p>
<p>So what do you think? Getting your own ideas for a neat canvas application?</p>
<p>Well, now you have more than one reason to create HTML5 apps: <a href="https://codecanyon.net/category/html5">CodeCanyon has an HTML5 category!</a> Browse through it and see what's available, or have a look at our <a href="https://themeforest.net/tags/html5" target="_self">HTML5 Templates</a> on ThemeForest.</p>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a>. Monty is a full-stack developer who also loves to write tutorials, and to learn about new JavaScript libraries. </em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-14T01:30:48+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[HTTP Headers for Dummies]]></title>
      <link>//shineyrock.com/blog/read/http-headers-for-dummies</link>
      <guid>https://shineyrock.com/blog/read/http-headers-for-dummies#When:09:16:54Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Whether you're a programmer or not, you have seen it everywhere on the web. Even your first Hello World PHP script sent HTTP headers without you realizing it. In this article, we are going to learn about the basics of HTTP headers and how we can use them in our web applications.</p>
<h2>What Are HTTP Headers?</h2>
<p>HTTP stands for "Hypertext Transfer Protocol". The entire World Wide Web uses this protocol. It was established in the early 1990s. Almost everything you see in your browser is transmitted to your computer over HTTP. For example, when you opened this article page, your browser probably sent over 40 HTTP requests and received HTTP responses for each.</p>
<p>HTTP headers are the core part of these HTTP requests and responses, and they carry information about the client browser, the requested page, the server, and more.</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=537/net/uploads/legacy/511_http/http_diagram.png" alt="diagram of HTTP request" loading="lazy" width="557px" height="449px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1074/net/uploads/legacy/511_http/http_diagram.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=537/net/uploads/legacy/511_http/http_diagram.png" alt="diagram of HTTP request" loading="lazy" width="557px" height="449px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1074/net/uploads/legacy/511_http/http_diagram.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/http_diagram.png" alt="diagram of HTTP request" loading="lazy" width="380px" height="308px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/http_diagram.png 2x">
</div>
<h3>Example</h3>
<p>When you type a URL in your address bar, your browser sends an HTTP request, and it may look like this:</p>
<pre class="brush: html noskimlinks noskimwords">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: code.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache</pre>
<p>The first line is the "Request Line", which contains some basic information on the request. And the rest are the HTTP headers.</p>
<p>After that request, your browser receives an HTTP response that may look like this:</p>
<pre class="brush: html noskimlinks noskimwords">HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: https://code.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Top 20+ MySQL Best Practices - Nettuts+&lt;/title&gt;
&lt;!-- ... rest of the html ... --&gt;</pre>
<p>The first line is the "Status Line", followed by "HTTP Headers", until the blank line. After that, the "content" starts (in this case, the HTML output).</p>
<p>When you look at the source code of a web page in your browser, you will only see the HTML portion and not the HTTP headers, even though they actually have been transmitted together, as you can see above.</p>
<p>These HTTP requests are also sent and received for other things, such as images, CSS files, JavaScript files, etc. That's why I said earlier that your browser sent at least 40 or more HTTP requests as you loaded just this article page.</p>
<p>Now, let's start reviewing the structure in more detail.</p>
<h3>How to See HTTP Headers</h3>
<p>I used Firefox Firebug to analyze HTTP headers, but you can use the Developer Tools in Firefox, Chrome, or any modern web browser to view HTTP headers.</p>
<p>In PHP:</p>
<ul>
<li>
<code><a href="http://php.net/manual/en/function.getallheaders.php">getallheaders()</a></code> gets the request headers. You can also use the <code>$_SERVER</code> array.</li>
<li>
<code><a href="http://www.php.net/manual/en/function.headers-list.php">headers_list()</a></code> gets the response headers.</li>
</ul>
<p>Further in the article, we will see some code examples in PHP.</p>
<h3>HTTP Request Structure</h3>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=590/net/uploads/legacy/511_http/request_header.png" alt="HTTP Request Structure" loading="lazy" width="610px" height="267px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1180/net/uploads/legacy/511_http/request_header.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=590/net/uploads/legacy/511_http/request_header.png" alt="HTTP Request Structure" loading="lazy" width="610px" height="267px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1180/net/uploads/legacy/511_http/request_header.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/request_header.png" alt="HTTP Request Structure" loading="lazy" width="380px" height="171px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/request_header.png 2x">
</div>
<p>The first line of the HTTP request is called the request line and consists of three parts:</p>
<ul>
<li>The "method" indicates what kind of request this is. The most common methods are GET, POST, and HEAD.</li>
<li>The "path" is generally the part of the URL that comes after the host (domain). For example, when requesting "https://code.tutsplus.com/tutorials/top-20-mysql-best-practices--net-7855" , the path portion is "/tutorials/top-20-mysql-best-practices--net-7855".</li>
<li>The <code>protocol</code> part contains <code>HTTP</code> and the version, which is usually 1.1 in modern browsers.</li>
</ul>
<p>The remainder of the request contains HTTP headers as <code>Name: Value</code> pairs on each line. These contain various information about the HTTP request and your browser. For example, the <code>User-Agent</code> line provides information on the browser version and the Operating System you are using. <code>Accept-Encoding</code> tells the server if your browser can accept compressed output like gzip.</p>
<p>You may have noticed that the cookie data is also transmitted inside an HTTP header. And if there was a referring URL, that would have been in the header too.</p>
<p>Most of these headers are optional. This HTTP request could have been as small as this:</p>
<pre class="brush: html noskimlinks noskimwords">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: code.tutsplus.com</pre>
<p>And you would still get a valid response from the web server.</p>
<h3>Request Methods</h3>
<p>The three most commonly used request methods are GET, POST, and HEAD. You're probably already familiar with the first two from writing HTML forms.</p>
<h4>GET: Retrieve a Document</h4>
<p>This is the main method used for retrieving HTML, images, JavaScript, CSS, etc. Most data that loads in your browser was requested using this method.</p>
<p>For example, when loading an Envato Tuts+ article, the very first line of the HTTP request looks like so:</p>
<pre class="brush: html noskimlinks noskimwords">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
...</pre>
<p>Once the HTML loads, the browser will start sending GET requests for images that may look like this:</p>
<pre class="brush: html noskimlinks noskimwords">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1
...</pre>
<p>Web forms can be set to use the GET method. Here's an example.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;form method="GET" action="foo.php"&gt;

First Name: &lt;input type="text" name="first_name" /&gt; &lt;br /&gt;
Last Name: &lt;input type="text" name="last_name" /&gt; &lt;br /&gt;

&lt;input type="submit" name="action" value="Submit" /&gt;

&lt;/form&gt;</pre>
<p>When that form is submitted, the HTTP request begins like this:</p>
<pre class="brush: html noskimlinks noskimwords">GET /foo.php?first_name=John&amp;last_name=Doe&amp;action=Submit HTTP/1.1
...</pre>
<p>You can see that each form input was added to the query string.</p>
<h4>POST: Send Data to the Server</h4>
<p>Even though you can send data to the server using GET and the query string, in many cases POST will be preferable. Sending large amounts of data using GET is not practical and has limitations.</p>
<p>POST requests are most commonly sent by web forms. Let's change the previous form example to a POST method.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;form method="POST" action="foo.php"&gt;

First Name: &lt;input type="text" name="first_name" /&gt; &lt;br /&gt;
Last Name: &lt;input type="text" name="last_name" /&gt; &lt;br /&gt;

&lt;input type="submit" name="action" value="Submit" /&gt;

&lt;/form&gt;</pre>
<p>Submitting that form creates an HTTP request like this:</p>
<pre class="brush: html noskimlinks noskimwords">POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43

first_name=John&amp;last_name=Doe&amp;action=Submit</pre>
<p>There are three important things to note here:</p>
<ul>
<li>The path in the first line is simply <code>/foo.php</code>, and there is no query string anymore.</li>
<li>
<code>Content-Type</code> and <code>Content-Length</code> headers have been added, which provide information about the data being sent.</li>
<li>All the data is now sent after the headers, with the same format as the query string.</li>
</ul>
<p>POST method requests can also be made via AJAX, applications, cURL, etc. And all file upload forms are required to use the POST method.</p>
<h4>HEAD: Retrieve Header Information</h4>
<p>HEAD is identical to GET, except the server does not return the content in the HTTP response. When you send a HEAD request, it means that you are only interested in the response code and the HTTP headers, not the document itself.</p>
<p>With this method, the browser can check if a document has been modified, for caching purposes. It can also check if the document exists at all.</p>
<p>For example, if you have a lot of links on your website, you can periodically send HEAD requests to all of them to check for broken links. This will work much faster than using GET.</p>
<h3>HTTP Response Structure</h3>
<p>After the browser sends the HTTP request, the server responds with an HTTP response. Excluding the content, it looks like this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=424/net/uploads/legacy/511_http/response_header.png" alt="HTTP Response Structure" loading="lazy" width="444px" height="269px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=848/net/uploads/legacy/511_http/response_header.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=424/net/uploads/legacy/511_http/response_header.png" alt="HTTP Response Structure" loading="lazy" width="444px" height="269px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=848/net/uploads/legacy/511_http/response_header.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/response_header.png" alt="HTTP Response Structure" loading="lazy" width="380px" height="231px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/response_header.png 2x">
</div>
<p>The first piece of data is the protocol. This is again usually HTTP/1.x or HTTP/1.1 on modern servers.</p>
<p>The next part is the status code, followed by a short message. Code 200 means that our GET request was successful and the server will return the contents of the requested document, right after the headers.</p>
<p>We've all seen 404 pages. This number actually comes from the status code part of the HTTP response. If a GET request is made for a path that the server cannot find, it will respond with a 404 instead of 200.</p>
<p>The rest of the response contains headers just like the HTTP request. These values can contain information about the server software, when the page/file was last modified, the MIME type, etc...</p>
<p>Again, most of those headers are actually optional.</p>
<h3>HTTP Status Codes</h3>
<ul>
<li>200s are used for successful requests.</li>
<li>300s are for redirections.</li>
<li>400s are used if there was a problem with the request.</li>
<li>500s are used if there was a problem with the server.</li>
</ul>
<h4>200 OK</h4>
<p>As mentioned before, this status code is sent in response to a successful request.</p>
<h4>206 Partial Content</h4>
<p>If an application requests only a range of the requested file, the 206 code is returned. It's most commonly used with download managers that can stop and resume a download, or split the download into pieces.</p>
<h4>404 Not Found</h4>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=547/net/uploads/legacy/511_http/404.png" alt="404 Not Found error" loading="lazy" width="567px" height="292px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1094/net/uploads/legacy/511_http/404.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=547/net/uploads/legacy/511_http/404.png" alt="404 Not Found error" loading="lazy" width="567px" height="292px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1094/net/uploads/legacy/511_http/404.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/404.png" alt="404 Not Found error" loading="lazy" width="380px" height="199px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/404.png 2x">
</div>
<p>When the requested page or file was not found, a 404 response code is sent by the server.</p>
<h4>401 Unauthorized</h4>
<p>Password-protected web pages send this code. If you don't enter a login correctly, you may see the following in your browser.</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=542/net/uploads/legacy/511_http/401.png" alt="401 Unauthorized response" loading="lazy" width="562px" height="300px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1084/net/uploads/legacy/511_http/401.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=542/net/uploads/legacy/511_http/401.png" alt="401 Unauthorized response" loading="lazy" width="562px" height="300px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1084/net/uploads/legacy/511_http/401.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/401.png" alt="401 Unauthorized response" loading="lazy" width="380px" height="206px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/401.png 2x">
</div>
<p>Note that this only applies to HTTP password-protected pages that pop up login prompts like this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=548/net/uploads/legacy/511_http/401_prompt.png" alt="login prompt" loading="lazy" width="568px" height="368px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1096/net/uploads/legacy/511_http/401_prompt.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=548/net/uploads/legacy/511_http/401_prompt.png" alt="login prompt" loading="lazy" width="568px" height="368px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1096/net/uploads/legacy/511_http/401_prompt.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/401_prompt.png" alt="login prompt" loading="lazy" width="380px" height="249px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/401_prompt.png 2x">
</div>
<h4>403 Forbidden</h4>
<p>If you are not allowed to access a page, this code may be sent to your browser. This often happens when you try to open a URL for a folder that contains no index page. If the server settings do not allow the display of the folder contents, you will get a 403 error.</p>
<p>For example, on my local server I created an <strong>images</strong> folder. Inside this folder I put an <strong>.htaccess</strong> file with this line: <em>"</em><code>Options -Indexes</code><em>". </em>Now when I try to open <strong><a href="http://localhost/images/">http://localhost/images/</a></strong>, I see this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=543/net/uploads/legacy/511_http/403.png" alt="403 Forbidden HTTP response" loading="lazy" width="563px" height="302px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1086/net/uploads/legacy/511_http/403.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=543/net/uploads/legacy/511_http/403.png" alt="403 Forbidden HTTP response" loading="lazy" width="563px" height="302px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1086/net/uploads/legacy/511_http/403.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/403.png" alt="403 Forbidden HTTP response" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/403.png 2x">
</div>
<p>There are other ways in which access can be blocked and 403 responses can be sent. For example, you can block by IP address, with the help of some htaccess directives.</p>
<pre class="brush: html noskimlinks noskimwords">order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all</pre>
<h4>302 (or 307) Moved Temporarily &amp; 301 Moved Permanently</h4>
<p>These two codes are used for redirecting a browser. For example, when you use a URL shortening service, such as <a href="http://bit.ly">bit.ly</a>, that's exactly how they forward the people who click on their links.</p>
<p>Both 302 and 301 are handled very similarly by the browser, but they can have different meanings to search engine spiders. For instance, if your website is down for maintenance, you may redirect to another location using 302. The search engine spider will continue checking your page later in the future. But if you redirect using 301, it will tell the spider that your website has moved to that location permanently. For example, <a href="https://net.tutsplus.com">https://net.tutsplus.com</a> redirects to <a href="https://code.tutsplus.com">https://code.tutsplus.com</a>—that is the new canonical URL.</p>
<h4>500 Internal Server Error</h4>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=544/net/uploads/legacy/511_http/500.png" alt="500 Internal Server Error" loading="lazy" width="564px" height="289px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1088/net/uploads/legacy/511_http/500.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=544/net/uploads/legacy/511_http/500.png" alt="500 Internal Server Error" loading="lazy" width="564px" height="289px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1088/net/uploads/legacy/511_http/500.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/500.png" alt="500 Internal Server Error" loading="lazy" width="380px" height="198px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/500.png 2x">
</div>
<p>This code is usually seen when a web script crashes. Most CGI scripts do not output errors directly to the browser, unlike PHP. If there are any fatal errors, they will just send a 500 status code. And the programmer then needs to search the server error logs to find the error messages.</p>
<h4>Complete List</h4>
<p>You can find the complete list of HTTP status codes with their explanations on <a href="http://en.wikipedia.org/wiki/List_of_HTTP_status_codes">Wikipedia</a>.</p>
<h3>HTTP Headers in HTTP Requests</h3>
<p>Now, we'll review some of the most common HTTP headers found in HTTP requests.</p>
<p>Almost all of these headers can be found in the <code>$_SERVER</code> array in PHP. You can also use the <code><a href="http://php.net/manual/en/function.getallheaders.php">getallheaders()</a></code> function to retrieve all headers at once.</p>
<h4><code>Host</code></h4>
<p>An HTTP request is sent to a specific IP address. But since most servers are capable of hosting multiple websites under the same IP, they must know which domain name the browser is looking for.</p>
<pre class="brush: html noskimlinks noskimwords">Host: code.tutsplus.com</pre>
<p>This is basically the host name, including the domain and the subdomain.</p>
<p>In PHP, it can be found as <code>$_SERVER['HTTP_HOST']</code> or <code>$_SERVER['SERVER_NAME']</code>.</p>
<h4><code>User-Agent</code></h4>
<pre class="brush: html noskimlinks noskimwords">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)</pre>
<p>This header can carry several pieces of information, such as:</p>
<ul>
<li>browser name and version</li>
<li>operating system name and version</li>
<li>default language</li>
</ul>
<p>This is how websites can collect certain general information about their surfers' systems. For example, they can detect if the surfer is using a cellphone browser and redirect them to a mobile version of their website which works better on smaller screens.</p>
<p>In PHP, it can be found with: <code>$_SERVER['HTTP_USER_AGENT']</code>.</p>
<pre class="brush: php noskimlinks noskimwords">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
	echo "Please stop using IE6!";
}</pre>
<h4><code>Accept-Language</code></h4>
<pre class="brush: html noskimlinks noskimwords">Accept-Language: en-us,en;q=0.5</pre>
<p>This header displays the default language setting of the user. If a website has different language versions, it can redirect a new surfer based on this data.</p>
<p>It can carry multiple languages, separated by commas. The first one is the preferred language, and each other listed language can carry a "<code>q</code>" value, which is an estimate of the user's preference for the language (min. 0 max. 1).</p>
<p>In PHP, it can be found as: <code>$_SERVER["HTTP_ACCEPT_LANGUAGE"]</code>.</p>
<pre class="brush: php noskimlinks noskimwords">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
	header('Location: http://french.mydomain.com');
}</pre>
<h4><code>Accept-Encoding</code></h4>
<pre class="brush: html noskimlinks noskimwords">Accept-Encoding: gzip,deflate</pre>
<p>Most modern browsers support gzip and will send this in the header. The web server then can send the HTML output in a compressed format. This can reduce the size by up to 80% to save bandwidth and time.</p>
<p>In PHP, it can be found as: <code>$_SERVER["HTTP_ACCEPT_ENCODING"]</code>. However, when you use the <code><a href="http://www.php.net/manual/en/function.ob-gzhandler.php">ob_gzhandler()</a></code> callback function, it will check this value automatically, so you don't need to.</p>
<pre class="brush: php noskimlinks noskimwords">// enables output buffering
// and all output is compressed if the browser supports it
ob_start('ob_gzhandler');</pre>
<h4><code>If-Modified-Since</code></h4>
<p>If a web document is already cached in your browser, and you visit it again, your browser can check if the document has been updated by sending this:</p>
<pre class="brush: html noskimlinks noskimwords">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</pre>
<p>If it was not modified since that date, the server will send a "304 Not Modified" response code, and no content—and the browser will load the content from the cache.</p>
<p>In PHP, it can be found as: <code>$_SERVER['HTTP_IF_MODIFIED_SINCE']</code>.</p>
<pre class="brush: php noskimlinks noskimwords">// assume $last_modify_time was the last the output was updated

// did the browser send If-Modified-Since header?
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

	// if the browser cache matches the modify time
	if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {

		// send a 304 header, and no content
		header("HTTP/1.1 304 Not Modified");
		exit;
	}

}</pre>
<p>There is also an HTTP header named Etag, which can be used to make sure the cache is current. We'll talk about this shortly.</p>
<h4><code>Cookie</code></h4>
<p>As the name suggests, this sends the cookies stored in your browser for that domain.</p>
<pre class="brush: html noskimlinks noskimwords">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar</pre>
<p>These are name=value pairs separated by semicolons. Cookies can also contain the session id.</p>
<p>In PHP, individual cookies can be accessed with the <code>$_COOKIE</code> array. You can directly access the session variables using the <code>$_SESSION</code> array, and if you need the session id, you can use the <code>session_id()</code> function instead of the cookie.</p>
<pre class="brush: php noskimlinks noskimwords">echo $_COOKIE['foo'];
// output: bar
echo $_COOKIE['PHPSESSID'];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120</pre>
<h4><code>Referer</code></h4>
<p>As the name suggests, this HTTP header contains the referring URL.</p>
<p>For example, if I visit the Envato Tuts+ Code homepage and click on an article link, this header is sent to my browser:</p>
<pre class="brush: html noskimlinks noskimwords">Referer: https://code.tutsplus.com/</pre>
<p>In PHP, it can be found as <code>$_SERVER['HTTP_REFERER']</code>.</p>
<pre class="brush: php noskimlinks noskimwords">if (isset($_SERVER['HTTP_REFERER'])) {

	$url_info = parse_url($_SERVER['HTTP_REFERER']);

	// is the surfer coming from Google?
	if ($url_info['host'] == 'www.google.com') {

		parse_str($url_info['query'], $vars);

		echo "You searched on Google for this keyword: ". $vars['q'];

	}

}
// if the referring URL was:
// http://www.google.com/search?source=ig&amp;hl=en&amp;rlz=&amp;=&amp;q=http+headers&amp;aq=f&amp;oq=&amp;aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers</pre>
<p>You may have noticed the word "referrer" is misspelled as "referer". Unfortunately it made into the official HTTP specifications like that and got stuck.</p>
<h4>Authorization</h4>
<p>When a web page asks for authorization, the browser opens a login window. When you enter a username and password in this window, the browser sends another HTTP request, but this time it contains this header.</p>
<pre class="brush: html noskimlinks noskimwords">Authorization: Basic bXl1c2VyOm15cGFzcw==</pre>
<p>The data inside the header is base64 encoded. For example, <code>base64_decode('bXl1c2VyOm15cGFzcw==')</code> would return <code>'myuser:mypass'</code>.</p>
<p>In PHP, these values can be found as <code>$_SERVER['PHP_AUTH_USER']</code> and <code>$_SERVER['PHP_AUTH_PW']</code>.</p>
<p>More on this when we talk about the WWW-Authenticate header.</p>
<h3>HTTP Headers in HTTP Responses</h3>
<p>Now we are going to look at some of the most common HTTP headers found in HTTP responses.</p>
<p>In PHP, you can set response headers using the <code><a href="http://php.net/manual/en/function.header.php">header()</a></code> function. PHP already sends certain headers automatically, for loading the content, setting cookies, etc. You can see the headers that are sent, or will be sent, with the <code><a href="http://www.php.net/manual/en/function.headers-list.php">headers_list()</a></code> function. You can check if the headers have been sent already with the <code><a href="http://www.php.net/manual/en/function.headers-sent.php">headers_sent()</a></code> function.</p>
<h4><code>Cache-Control</code></h4>
<p>Here's the definition from w3.org:</p>
<blockquote>
<p>The Cache-Control general-header field is used to specify directives which MUST be obeyed by all caching mechanisms along the request/response chain.</p>
</blockquote>
<p>These "caching mechanisms" include gateways and proxies that your ISP may be using.</p>
<p>For example:</p>
<pre class="brush: html noskimlinks noskimwords">Cache-Control: max-age=3600, public</pre>
<p><code>public</code> means that the response may be cached by anyone. <code>max-age</code> indicates how many seconds the cache is valid for. Allowing your website to be cached can reduce server load and bandwidth, as well as improving load times in the browser.</p>
<p>Caching can also be prevented by using the <code>no-cache</code> directive.</p>
<pre class="brush: html noskimlinks noskimwords">Cache-Control: no-cache</pre>
<p>For more detailed info, see <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9">w3.org</a>.</p>
<h4><code>Content-Type</code></h4>
<p>This header indicates the "MIME type" of the document. The browser then decides how to interpret the contents based on this. For example, an HTML page (or a PHP script with HTML output) may return this:</p>
<pre class="brush: html noskimlinks noskimwords">Content-Type: text/html; charset=UTF-8</pre>
<p><code>text</code> is the type, and <code>html</code> is the subtype of the document. The header can also contain more information, such as charset.</p>
<p>For a GIF image, this may be sent:</p>
<pre class="brush: html noskimlinks noskimwords">Content-Type: image/gif</pre>
<p>The browser can decide to use an external application or browser extension based on the MIME type. For example, this will cause Adobe Reader or the browser's built-in PDF reader to be loaded:</p>
<pre class="brush: html noskimlinks noskimwords">Content-Type: application/pdf</pre>
<p>When loading directly, Apache can usually detect the MIME type of a document and send the appropriate header. Also, most browsers have some amount of fault tolerance and auto-detection of the MIME types, in case the headers are wrong or not present.</p>
<p>You can find a list of common MIME types in the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types" target="_self">MDN Web Docs</a>.</p>
<p>In PHP, you can use the <code><a href="http://www.php.net/manual/en/function.finfo-file.php">finfo_file()</a></code> function to detect the MIME type of a file.</p>
<h4><code>Content-Disposition</code></h4>
<p>This header instructs the browser to open a file download box, instead of trying to parse the content. For example:</p>
<pre class="brush: html noskimlinks noskimwords">Content-Disposition: attachment; filename="download.zip"</pre>
<p>That will cause the browser to do this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=546/net/uploads/legacy/511_http/download.png" alt="security warning message" loading="lazy" width="566px" height="304px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1092/net/uploads/legacy/511_http/download.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=546/net/uploads/legacy/511_http/download.png" alt="security warning message" loading="lazy" width="566px" height="304px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1092/net/uploads/legacy/511_http/download.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/download.png" alt="security warning message" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/download.png 2x">
</div>
<p>Note that the appropriate <code>Content-Type</code> header should also be sent along with this:</p>
<pre class="brush: html noskimlinks noskimwords">Content-Type: application/zip
Content-Disposition: attachment; filename="download.zip"</pre>
<h4><code>Content-Length</code></h4>
<p>When content is going to be transmitted to the browser, the server can indicate its size (in bytes) using this header.</p>
<pre class="brush: html noskimlinks noskimwords">Content-Length: 89123</pre>
<p>This is especially useful for file downloads. That's how the browser can determine the progress of the download.</p>
<p>For example, here is a dummy script I wrote, which simulates a large download.</p>
<pre class="brush: php noskimlinks noskimwords">// it's a zip file
header('Content-Type: application/zip');
// 1 million bytes (about 1megabyte)
header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data
for ($i = 0; $i &lt; 1000; $i++) {
	echo str_repeat(".",1000);

	// sleep to slow down the download
	usleep(50000);
}</pre>
<p>The result is:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=544/net/uploads/legacy/511_http/download_with_progress.png" alt="download progress message" loading="lazy" width="564px" height="303px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1088/net/uploads/legacy/511_http/download_with_progress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=544/net/uploads/legacy/511_http/download_with_progress.png" alt="download progress message" loading="lazy" width="564px" height="303px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1088/net/uploads/legacy/511_http/download_with_progress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/download_with_progress.png" alt="download progress message" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/download_with_progress.png 2x">
</div>
<p>Now I am going to comment out the Content-Length header:</p>
<pre class="brush: php noskimlinks noskimwords">// it's a zip file
header('Content-Type: application/zip');
// the browser won't know the size
// header('Content-Length: 1000000');
// load a download dialogue, and save it as download.zip
header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data
for ($i = 0; $i &lt; 1000; $i++) {
	echo str_repeat(".",1000);

	// sleep to slow down the download
	usleep(50000);
}</pre>
<p>Now the result is:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=542/net/uploads/legacy/511_http/download_without_progress.png" alt="download progress with no total size shown" loading="lazy" width="562px" height="304px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1084/net/uploads/legacy/511_http/download_without_progress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=542/net/uploads/legacy/511_http/download_without_progress.png" alt="download progress with no total size shown" loading="lazy" width="562px" height="304px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1084/net/uploads/legacy/511_http/download_without_progress.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/download_without_progress.png" alt="download progress with no total size shown" loading="lazy" width="380px" height="209px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/download_without_progress.png 2x">
</div>
<p>The browser can only tell you how many bytes have been downloaded, but it does not know the total amount. And the progress bar is not showing the progress.</p>
<h4><code>Etag</code></h4>
<p>This is another header that is used for caching purposes. It looks like this:</p>
<pre class="brush: html noskimlinks noskimwords">Etag: "pub1259380237;gz"</pre>
<p>The web server may send this header with every document it serves. The value can be based on the last modify date, the file size, or even the checksum value of a file. The browser then saves this value as it caches the document. The next time the browser requests the same file, it sends this in the HTTP request:</p>
<pre class="brush: html noskimlinks noskimwords">If-None-Match: "pub1259380237;gz"</pre>
<p>If the Etag value of the document matches that, the server will send a 304 code instead of 200, and no content. The browser will load the contents from its cache.</p>
<h4><code>Last-Modified</code></h4>
<p>As the name suggests, this header indicates the last modify date of the document, in GMT format:</p>
<pre class="brush: html noskimlinks noskimwords">Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT</pre>
<pre class="brush: php noskimlinks noskimwords">$modify_time = filemtime($file);

header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");</pre>
<p>It offers another way for the browser to cache a document. The browser may send this in the HTTP request:</p>
<pre class="brush: html noskimlinks noskimwords">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</pre>
<p>We already talked about this earlier, in the <code>If-Modified-Since</code> section.</p>
<h4><code>Location</code></h4>
<p>This header is used for redirections. If the response code is 301 or 302, the server must also send this header. For example, when you go to <a href="https://net.tutsplus.com" target="_self">https://net.tutsplus.com</a>, your browser will receive this:</p>
<pre class="brush: html noskimlinks noskimwords">HTTP/1.x 301 Moved Permanently
...
Location: https://code.tutsplus.com/
...</pre>
<p>In PHP, you can redirect a surfer like so:</p>
<pre class="brush: php noskimlinks noskimwords">header('Location: https://code.tutsplus.com/');</pre>
<p>By default, that will send a 302 response code. If you want to send a 301 instead:</p>
<pre class="brush: php noskimlinks noskimwords">header('Location: https://code.tutsplus.com/', true, 301);</pre>
<h4><code>Set-Cookie</code></h4>
<p>When a website wants to set or update a cookie in your browser, it will use this header.</p>
<pre class="brush: html noskimlinks noskimwords">Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT</pre>
<p>Each cookie is sent as a separate header. Note that cookies set via JavaScript do not go through HTTP headers.</p>
<p>In PHP, you can set cookies using the <code><a href="http://php.net/manual/en/function.setcookie.php">setcookie()</a></code> function, and PHP sends the appropriate HTTP headers.</p>
<pre class="brush: php noskimlinks noskimwords">setcookie("TestCookie", "foobar");</pre>
<p>Which causes this header to be sent:</p>
<pre class="brush: html noskimlinks noskimwords">Set-Cookie: TestCookie=foobar</pre>
<p>If the expiration date is not specified, the cookie is deleted when the browser window is closed.</p>
<h4><code>WWW-Authenticate</code></h4>
<p>A website may send this header to authenticate a user through HTTP. When the browser sees this header, it will open up a login dialogue window.</p>
<pre class="brush: html noskimlinks noskimwords">WWW-Authenticate: Basic realm="Restricted Area"</pre>
<p>Which looks like this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=548/net/uploads/legacy/511_http/401_prompt.png" alt="authentication required window" loading="lazy" width="568px" height="368px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1096/net/uploads/legacy/511_http/401_prompt.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=548/net/uploads/legacy/511_http/401_prompt.png" alt="authentication required window" loading="lazy" width="568px" height="368px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1096/net/uploads/legacy/511_http/401_prompt.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/511_http/401_prompt.png" alt="authentication required window" loading="lazy" width="380px" height="249px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/511_http/401_prompt.png 2x">
</div>
<p>There is a <a href="http://php.net/manual/en/features.http-auth.php">section</a> in the PHP manual that has code samples on how to do this in PHP.</p>
<pre class="brush: php noskimlinks noskimwords">if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
    exit;
} else {
    echo "&lt;p&gt;Hello {$_SERVER['PHP_AUTH_USER']}.&lt;/p&gt;";
    echo "&lt;p&gt;You entered {$_SERVER['PHP_AUTH_PW']} as your password.&lt;/p&gt;";
}</pre>
<h4><code>Content-Encoding</code></h4>
<p>This header is usually set when the returned content is compressed.</p>
<pre class="brush: html noskimlinks noskimwords">Content-Encoding: gzip</pre>
<p>In PHP, if you use the <code><a href="http://www.php.net/manual/en/function.ob-gzhandler.php">ob_gzhandler()</a></code> callback function, it will be set automatically for you.</p>
<h2>How to Send HTTP Headers</h2>
<p>After reading the tutorial up to this point, you should have a good idea of what HTTP headers are and what their different values mean. Some headers are sent and received automatically when you make a request to a server and get a response back.</p>
<p>However, there will be situations where you want to send your own custom headers besides the ones sent by the client or server.</p>
<p>One of the most common ways of sending your own headers in a request is by using the <a href="https://www.php.net/manual/en/book.curl.php" target="_self">cURL library in PHP</a>. The library comes with a bunch of functions to handle all your needs. There are four basic steps involved:</p>
<ol>
<li>You use <code>curl_init()</code> to start your cURL session. You can pass it the URL you want to request.</li>
<li>The <code>curl_setopt()</code> function is used to configure the request according to your needs. This is where you can set your own headers by using the <code>CURLOPT_HTTPHEADER</code> option.</li>
<li>After you have set all the options, you can execute the request by calling <code>curl_exec()</code>.</li>
<li>Finally, you can close the session by calling the <code>curl_close()</code> function.</li>
</ol>
<p>Here is a basic example that sends a request to <a href="https://code.tutsplus.com/tutorials" target="_self">https://code.tutsplus.com/tutorials</a>.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

$ch = curl_init("https://code.tutsplus.com/tutorials");

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0",
    "Accept-Language: en-US,en;q=0.5"
));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);

curl_close($ch);

echo $output;
?&gt;</pre>
<p>You can learn more about cURL by reading <a href="https://code.tutsplus.com/tutorials/techniques-for-mastering-curl--net-8470" target="_self">these</a> <a href="https://code.tutsplus.com/tutorials/how-to-use-curl-in-php--cms-36732" target="_self">two</a> tutorials. They cover all the basics of the library to help you get started.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/techniques-for-mastering-curl--net-8470"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/534_curl/preview.jpg" loading="lazy" width="220px" height="220px"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Techniques for Mastering cURL</div>
<div class="roundup-block__author">Burak Guzel</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-use-curl-in-php--cms-36732"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/posts/36732/preview_image/web_dev.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/posts/36732/preview_image/web_dev.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/posts/36732/preview_image/web_dev.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/posts/36732/preview_image/web_dev.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/413/posts/36732/preview_image/web_dev.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/413/posts/36732/preview_image/web_dev.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Use cURL in PHP</div>
<div class="roundup-block__author">Sajal Soni</div></a></li>
</ul>
<p>If you want to send response headers in PHP, then you should use the <code>header()</code> function. Among other things, one common use is redirecting visitors to other pages. This can be done by using the <code>Location</code> header. Here is an example:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

header('Location: https://code.tutsplus.com/tutorials');

// Other PHP or HTML code.
?&gt;</pre>
<p>You have to remember to call the <code>header()</code> function before any kind of output either in HTML or in PHP. Even blank output is not permitted. Otherwise, you will get the <a href="https://code.tutsplus.com/tutorials/how-to-redirect-with-php--cms-34680" target="_self">Headers already sent error</a>.</p>
<h2>Conclusion</h2>
<p>Thanks for reading. I hope this article was a good starting point for learning about HTTP headers. If you want to take your web development further, check out some of the <a href="https://codecanyon.net/page/top_sellers" target="_self">popular files on CodeCanyon</a>. These scripts, apps, templates, and plugins can save you precious development time and help you add new features quickly and easily. </p>
<h3>The Best PHP Scripts on CodeCanyon</h3>
<p>Explore thousands of the <a href="https://codecanyon.net/popular_item/by_category?category=php-scripts" target="_self">best and most useful PHP scripts ever created on CodeCanyon</a>.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt loading="lazy" width="870px" height="641px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt loading="lazy" width="650px" height="480px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt loading="lazy" width="380px" height="283px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"></figure>
<p>Here are a few of the best-selling and up-and-coming PHP scripts available on CodeCanyon for 2021.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/15-best-php-calendar-booking-events-scripts--cms-28635"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">11 Best PHP Event Calendar and Booking Scripts... and 3 Free Options</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-php-url-shortener-scripts--cms-28675"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">13 Best PHP URL Shortener Scripts (Free and Premium)</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/best-contact-form-php-scripts--cms-30639"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">18 Best Contact Form PHP Scripts for 2021</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/comparing-the-best-php-form-builders--cms-32273"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Comparing the 5 Best PHP Form Builders (And 4 Free Scripts)</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-beautiful-forms-with-php-form-builder--cms-33267"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create Beautiful Forms With PHP Form Builder</div>
<div class="roundup-block__author">Ashraff Hathibelagal</div></a></li>
</ul>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a>. Monty is a full-stack developer who also loves to write tutorials, and to learn about new JavaScript libraries. </em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-12T09:16:54+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Implement Email Verification for New Members]]></title>
      <link>//shineyrock.com/blog/read/how-to-implement-email-verification-for-new-members</link>
      <guid>https://shineyrock.com/blog/read/how-to-implement-email-verification-for-new-members#When:14:39:02Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Have you ever created an account with a website and been required to check your email and click a verification link sent by the company in order to activate it? Doing so highly reduces the number of spam accounts. In this lesson, we'll learn how to do this very thing!</p>
<h2>Looking for a Shortcut?</h2>
<p>This tutorial teaches you to build an email verification script from scratch, but if you want something that you can use on your website right away, check out some of the <a href="https://codecanyon.net/category/php-scripts">great email forms and scripts</a> on CodeCanyon.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/20-best-php-email-forms--cms-27753"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/27753/preview_image/forms.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/27753/preview_image/forms.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/27753/preview_image/forms.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/27753/preview_image/forms.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/27753/preview_image/forms.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/27753/preview_image/forms.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">20 Best PHP Email Forms</div>
<div class="roundup-block__author">Esther Vaati</div></a></li></ul>
<p>After you learn how to verify email addresses in PHP in this tutorial, check out a small selection of these script templates that you can download today.</p>
<h2>Building an Email Verification and Sign-Up Script</h2>
<h3>What Are We Going to Build?</h3>
<p>We are going to build a nice PHP sign-up script where a user can create an account to gain access to the "members only section" of a website.</p>
<p>After the user creates their account, the account will then be locked until the user clicks a verification link that they'll receive in their email inbox.</p>
<h3>
<span class="sectionnum">1.</span> Build a Sign-Up Page</h3>
<p>We first need a simple page where our visitors can sign up for their accounts.</p>
<p><strong>index.php</strong>: This is our sign-up page with a basic form.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="https://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
    &lt;title&gt;NETTUTS &gt; Sign up&lt;/title&gt;
    &lt;link href="css/style.css" type="text/css" rel="stylesheet" /&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- start header div --&gt;
    &lt;div id="header"&gt;
        &lt;h3&gt;NETTUTS &gt; Sign up&lt;/h3&gt;
    &lt;/div&gt;
    &lt;!-- end header div --&gt;

    &lt;!-- start wrap div --&gt;
    &lt;div id="wrap"&gt;

        &lt;!-- start php code --&gt;

        &lt;!-- stop php code --&gt;

        &lt;!-- title and description --&gt;
        &lt;h3&gt;Signup Form&lt;/h3&gt;
        &lt;p&gt;Please enter your name and email addres to create your account&lt;/p&gt;

        &lt;!-- start sign up form --&gt;
        &lt;form action="" method="post"&gt;
            &lt;label for="name"&gt;Name:&lt;/label&gt;
            &lt;input type="text" name="name" value="" /&gt;
            &lt;label for="email"&gt;Email:&lt;/label&gt;
            &lt;input type="text" name="email" value="" /&gt;

            &lt;input type="submit" class="submit_button" value="Sign up" /&gt;
        &lt;/form&gt;
        &lt;!-- end sign up form --&gt;

    &lt;/div&gt;
    &lt;!-- end wrap div --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p><strong>css/style.css</strong>: This is the stylesheet for <strong>index.php</strong> and other pages.</p>
<pre class="brush: css noskimlinks noskimwords">/* Global Styles */

*{
    padding: 0; /* Reset all padding to 0 */
    margin: 0; /* Reset all margin to 0 */
}

body{
    background: #F9F9F9; /* Set HTML background color */
    font: 14px "Lucida Grande";  /* Set global font size &amp; family */
    color: #464646; /* Set global text color */
}

p{
    margin: 10px 0px 10px 0px; /* Add some padding to the top and bottom of the &lt;p&gt; tags */
}

/* Header */

#header{
    height: 45px; /* Set header height */
    background: #464646; /* Set header background color */
}

#header h3{
    color: #FFFFF3; /* Set header heading(top left title ) color */
    padding: 10px; /* Set padding, to center it within the header */
    font-weight: normal; /* Set font weight to normal, default it was set to bold */
}

/* Wrap */

#wrap{
    background: #FFFFFF; /* Set content background to white */
    width: 615px; /* Set the width of our content area */
    margin: 0 auto; /* Center our content in our browser */
    margin-top: 50px; /* Margin top to make some space between the header and the content */
    padding: 10px; /* Padding to make some more space for our text */
    border: 1px solid #DFDFDF; /* Small border for the finishing touch */
    text-align: center; /* Center our content text */
}

#wrap h3{
    font: italic 22px Georgia; /* Set font for our heading 2 that will be displayed in our wrap */
}

/* Form &amp; Input field styles */

form{
    margin-top: 10px; /* Make some more distance away from the description text */
}

form .submit_button{
    background: #F9F9F9; /* Set button background */
    border: 1px solid #DFDFDF; /* Small border around our submit button */
    padding: 8px; /* Add some more space around our button text */
}

input{
    font: normal 16px Georgia; /* Set font for our input fields */
    border: 1px solid #DFDFDF; /* Small border around our input field */
    padding: 8px; /* Add some more space around our text */
}</pre>
<p>Here's what the HTML and CSS look like when they're rendered in the browser.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="870px" height="414px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="650px" height="312px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="380px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_1_html_page.jpg 2x"></figure>
<p>As you can see, I've added a comment to each line that describes what they do. Also, you might have noticed the following comment in the <strong>index.php</strong> file:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!-- start php code --&gt;

&lt;!-- stop php code --&gt;</pre>
<p>We are going to write our PHP between these two lines!</p>
<h3>2. Input Validation</h3>
<p>The first thing we are going to build is a piece of code that's going to validate the information. Here is a short list detailing what needs to be validated.</p>
<ul>
<li>the name field is not empty</li>
<li>the name is not too short</li>
<li>the email field is not empty</li>
<li>the email address is valid with the form #censored#@xxx.#censored#</li>
</ul>
<p>So our first step is to check that the form has been submitted and that the fields are not empty.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!-- start PHP code --&gt;
&lt;?php

    if(isset($_POST['name']) &amp;&amp; !empty($_POST['name']) AND isset($_POST['email']) &amp;&amp; !empty($_POST['email'])){
        // Form Submited
    }

?&gt;
&lt;!-- stop PHP Code --&gt;</pre>
<p>Time for a breakdown! We start with an IF statement, and we are first validating the name field:</p>
<pre class="brush: php noskimlinks noskimwords">if(  ){ // If statement is true run code between brackets

}

isset($_POST['name']) // Is the name field being posted; it does not matter whether it's empty or filled.
&amp;&amp; // This is the same as the AND in our statement; it allows you to check multiple statements.
!empty($_POST['name']) // Verify if the field name is not empty

isset($_POST['email']) // Is the email field being posted; it does not matter if it's empty or filled.
&amp;&amp; // This is the same as the AND in our statement; it allows you to check multiple statements.
!empty($_POST['email']) // Verify if the field email is not empty</pre>
<p>So if you submit the form now with empty fields, nothing will happen. If you fill in both fields, then our script will run the code between the brackets.</p>
<p>Now we're going to create a piece of code that will check if an email address is valid. If it's not, we'll return a error. Also, let's turn our post variables into local variables:</p>
<pre class="brush: php noskimlinks noskimwords">if(isset($_POST['name']) &amp;&amp; !empty($_POST['name']) AND isset($_POST['email']) &amp;&amp; !empty($_POST['email'])){
    $name = mysql_escape_string($_POST['name']); // Turn our post into a local variable
    $email = mysql_escape_string($_POST['email']); // Turn our post into a local variable
}</pre>
<p>We can now reach our data via our local variables. As you can see, I also added a MySQL escape string to prevent MySQL injection when inserting the data into the MySQL database.</p>
<blockquote>The <code class="inline">mysql_real_escape_string()</code> function escapes special characters in a string for use in an SQL statement.</blockquote>
<h4>Regular Expressions</h4>
<p>Next up is a small snippet that checks if the email address is valid.</p>
<pre class="brush: php noskimlinks noskimwords">$name = mysql_escape_string($_POST['name']);
$email = mysql_escape_string($_POST['email']);

if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
    // Return Error - Invalid Email
}else{
    // Return Success - Valid Email
}</pre>
<p>Please note that I did not personally write this regular expression—it's a small snippet from php.net. Basically, it verifies if the email is written in the following format:</p>
<pre class="brush: plain noskimlinks noskimwords">#censored#@xxx.#censored#</pre>
<p>In the <code class="inline">eregi</code> function call, you can see that it checks if the email contains characters from the alphabet, if it has any numbers, or a phantom dash (<code>_</code>), and of course the basic requirements for an email with an <code>@</code> symbol and a <code>.</code> in the domain. If these characteristics are not found, the expression returns false. </p>
<p>Okay, so now we need to add some basic error messages.</p>
<pre class="brush: php noskimlinks noskimwords">if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)){
    // Return Error - Invalid Email
    $msg = 'The email you have entered is invalid, please try again.';
}else{
    // Return Success - Valid Email
    $msg = 'Your account has been made, &lt;br /&gt; please verify it by clicking the activation link that has been send to your email.';
}</pre>
<p>As you can see, we have made a local variable <code class="inline">$msg</code>, which allows us to show the error or the success message anywhere on the page.</p>
<p>And we're going to display it between the instruction text and the form.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!-- title and description --&gt;
&lt;h3&gt;Signup Form&lt;/h3&gt;
&lt;p&gt;Please enter your name and email address to create your account&lt;/p&gt;

&lt;?php
    if(isset($msg)){  // Check if $msg is not empty
        echo '&lt;div class="statusmsg"&gt;'.$msg.'&lt;/div&gt;'; // Display our message and wrap it with a div with the class "statusmsg".
    }
?&gt;

&lt;!-- start sign up form --&gt;</pre>
<p>Finally, we'll add a bit of CSS to <strong>style.css</strong>, to style our status message a bit.</p>
<pre class="brush: css noskimlinks noskimwords">#wrap .statusmsg{
    font-size: 12px; /* Set message font size  */
    padding: 3px; /* Some padding to make some more space for our text  */
    background: #EDEDED; /* Add a background color to our status message   */
    border: 1px solid #DFDFDF; /* Add a border arround our status message   */
}</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="870px" height="398px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="650px" height="300px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg" alt="Verify Email Address PHP Script Tutorial Sign Up Form" loading="lazy" width="380px" height="180px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_2_error_message.jpg 2x"></figure>
<h3>3. Creating the Database &amp; Establishing a Connection</h3>
<p>Now we need to establish a database connection and create a table to insert the account data. So let's go to PHPMyAdmin and create a new database with the name <strong>registrations</strong> and create a user account that has access to that database in order to insert and update data.</p>
<p>Let's create our <strong>users</strong> table, with six fields:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg" alt="Verify Email Address PHP Script Tutorial Create DB" loading="lazy" width="870px" height="204px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg" alt="Verify Email Address PHP Script Tutorial Create DB" loading="lazy" width="650px" height="156px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg" alt="Verify Email Address PHP Script Tutorial Create DB" loading="lazy" width="380px" height="98px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_3_createDB.jpg 2x"></figure>
<p>Now we must enter details for these fields:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg" alt="Verify Email Address PHP Script Tutorial Create Table" loading="lazy" width="870px" height="350px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg" alt="Verify Email Address PHP Script Tutorial Create Table" loading="lazy" width="650px" height="265px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg" alt="Verify Email Address PHP Script Tutorial Create Table" loading="lazy" width="380px" height="160px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_3_createTB.jpg 2x"></figure>
<p>For those who don't want to input this data manually, you can instead run the following SQL code.</p>
<pre class="brush: sql noskimlinks noskimwords">CREATE TABLE `users` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 32 ) NOT NULL ,
`password` VARCHAR( 32 ) NOT NULL ,
`email` TEXT NOT NULL ,
`hash` VARCHAR( 32 ) NOT NULL ,
`active` INT( 1 ) NOT NULL DEFAULT '0'
) ENGINE = MYISAM ;</pre>
<p>Our database is created, so now we need to establish a connection using PHP. We'll write the following code at the start of our script, just below the following line:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!-- start PHP code --&gt;
&lt;?php
// Establish database connection</pre>
<p>We'll use the following code to connect to the database server and select the <strong>registrations</strong> database with a basic MySQL connection.</p>
<pre class="brush: php noskimlinks noskimwords">mysql_connect("localhost", "username", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password.
mysql_select_db("registrations") or die(mysql_error()); // Select registrations database.</pre>
<p>Now that we've established a connection to our database, we can move on to the next step and insert the account details.</p>
<h3>
<span class="sectionnum">4.</span> Insert Account</h3>
<p>Now it's time to enter the submitted account details into our database and generate an activation hash. Write the following code below this line:</p>
<pre class="brush: php noskimlinks noskimwords">// Return Success - Valid Email
$msg = 'Your account has been made, &lt;br /&gt; please verify it by clicking the activation link that has been send to your email.';</pre>
<h4>Activation Hash</h4>
<p>In our database, we made a field called hash. This hash is a 32-character string of text. We also send this code to the user's email address. They can then click the link (which contains the hash), and we'll verify if it matches the one in the database. Let's create a local variable called <code class="inline">$hash</code> and generate a random MD5 hash.</p>
<pre class="brush: php noskimlinks noskimwords">$hash = md5( rand(0,1000) ); // Generate random 32 character hash and assign it to a local variable.
// Example output: f4552671f8909587cf485ea990207f3b</pre>
<p>What did we do? Well, we're using the PHP function <code class="inline">rand</code> to generate a random number between 0 and 1000. Next, our MD5 function will turn this number into a 32-character string of text, which we'll use in our activation email. </p>
<p>MD5 is a good choice for generating random strings. It also used to be a common choice for hashing passwords, but it has been shown to not be secure for passwords. Instead, use the <code class="inline">password_hash</code> function.</p>
<h4>Creating a Random Password</h4>
<p>The next thing we need to is to create a random password for our member:</p>
<pre class="brush: php noskimlinks noskimwords">$password = rand(1000,5000); // Generate random number between 1000 and 5000 and assign it to a local variable.
// Example output: 4568</pre>
<p>Insert the following information into our database using a <a href="http://php.net/manual/en/function.MySQL-query.php">MySQL query.</a></p>
<pre class="brush: php noskimlinks noskimwords">mysql_query("INSERT INTO users (username, password, email, hash) VALUES(
'". mysql_escape_string($name) ."',
'". mysql_escape_string(password_hash($password)) ."',
'". mysql_escape_string($email) ."',
'". mysql_escape_string($hash) ."') ") or die(mysql_error());</pre>
<p>As you can see, we insert all the data with a MySQL escape string around it to prevent any MySQL injection.</p>
<p>You also might notice that the <code class="inline">password_hash</code> function changes the random password into a secure hash for protection. This way, if people with malicious intent gain access to the database, they won't be able to read the passwords.</p>
<p>For testing, fill in the form and check if the data is being inserted into our database.</p>
<h3>
<span class="sectionnum">5.</span> Send the Verification Email</h3>
<p>Right after we have inserted the information into our database, we need to send an email to the user with the verification link. So let's use the PHP <code class="inline">mail</code> function to do just that.</p>
<pre class="brush: php noskimlinks noskimwords">$to      = $email; // Send email to our user
$subject = 'Signup | Verification'; // Give the email a subject
$message = '

Thanks for signing up!
Your account has been created, you can login with the following credentials after you have activated your account by pressing the url below.

------------------------
Username: '.$name.'
Password: '.$password.'
------------------------

Please click this link to activate your account:
http://www.yourwebsite.com/verify.php?email='.$email.'&amp;hash='.$hash.'

'; // Our message above including the link

$headers = 'From:noreply@yourwebsite.com' . "\r\n"; // Set from headers
mail($to, $subject, $message, $headers); // Send our email</pre>
<p>In the PHP send email verification code above, we send a short description to our user which contains the username and password—using the local variables we created when the data was posted. Then we create a dynamic link. </p>
<p>The result of all this will look as follows:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg" alt="Verify Email Address PHP Script Tutorial Email Result" loading="lazy" width="870px" height="193px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg" alt="Verify Email Address PHP Script Tutorial Email Result" loading="lazy" width="650px" height="148px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg" alt="Verify Email Address PHP Script Tutorial Email Result" loading="lazy" width="380px" height="93px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_5_email_result.jpg 2x"></figure>
<p>As you can see, it creates a URL which is impossible to guess. This is a very secure way to verify the email address of a user.</p>
<h3>
<span class="sectionnum">6.</span> Account Activation</h3>
<p>As you can see, our URL links to <strong>verify.php</strong>, so let's create that file using the same basic template we used for <strong>index.php</strong>.</p>
<p>However, remove the form from the template.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
    &lt;title&gt;NETTUTS &gt; Sign up&lt;/title&gt;
    &lt;link href="css/style.css" type="text/css" rel="stylesheet" /&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- start header div --&gt;
    &lt;div id="header"&gt;
        &lt;h3&gt;NETTUTS &gt; Sign up&lt;/h3&gt;
    &lt;/div&gt;
    &lt;!-- end header div --&gt;

    &lt;!-- start wrap div --&gt;
    &lt;div id="wrap"&gt;
        &lt;!-- start PHP code --&gt;
        &lt;?php

            mysql_connect("localhost", "tutorial", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password.
            mysql_select_db("registrations") or die(mysql_error()); // Select registration database.

        ?&gt;
        &lt;!-- stop PHP Code --&gt;


    &lt;/div&gt;
    &lt;!-- end wrap div --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The first thing we need to do is check if we have our <code class="inline">$_GET</code> variables (for the email and hash).</p>
<pre class="brush: php noskimlinks noskimwords">if(isset($_GET['email']) &amp;&amp; !empty($_GET['email']) AND isset($_GET['hash']) &amp;&amp; !empty($_GET['hash'])){
    // Verify data
}else{
    // Invalid approach
}</pre>
<p>To make things a bit easier, let's assign our local variables. We'll also add some MySQL injection prevention by, once again, using the MySQL escape string.</p>
<pre class="brush: php noskimlinks noskimwords">if(isset($_GET['email']) &amp;&amp; !empty($_GET['email']) AND isset($_GET['hash']) &amp;&amp; !empty($_GET['hash'])){
    // Verify data
    $email = mysql_escape_string($_GET['email']); // Set email variable
    $hash = mysql_escape_string($_GET['hash']); // Set hash variable
}</pre>
<p>The next thing is to check the data from the URL against the data in our database using a MySQL query.</p>
<pre class="brush: php noskimlinks noskimwords">$search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error());
$match  = mysql_num_rows($search);</pre>
<p>In the code above, we used a MySQL <code class="inline">SELECT</code> statement and checked if the email and hash matched. But besides that, we also checked if the status of the account is inactive. Finally, we use <code class="inline">mysql_num_rows</code> to determine how many matches have been found.</p>
<p>So let's try this out. Just use a simple echo to return the results.</p>
<pre class="brush: php noskimlinks noskimwords">$search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error());
$match  = mysql_num_rows($search);

echo $match; // Display how many matches have been found -&gt; remove this when done with testing <img src="http://www.4elements.com/images/smileys/wink.gif" width="19" height="19" alt="wink" style="border:0;" /></pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg" alt="Verify Email Address PHP Script Tutorial Link Result" loading="lazy" width="870px" height="227px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg" alt="Verify Email Address PHP Script Tutorial Link Result" loading="lazy" width="650px" height="173px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg" alt="Verify Email Address PHP Script Tutorial Link Result" loading="lazy" width="380px" height="108px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_6_link_result.jpg 2x"></figure>
<p>We have a match! To change the result, simply change the email, and you'll see that the number returned is <code class="inline">0</code>.</p>
<p>So we can use our <code class="inline">$match</code> variable to either activate the account or return an error when no match has been found.</p>
<pre class="brush: php noskimlinks noskimwords">if($match &gt; 0){
    // We have a match, activate the account
}else{
    // No match -&gt; invalid url or account has already been activated.
}</pre>
<p>In order to activate the account, we must update the <code class="inline">active</code> field to <code class="inline">1</code> using a MySQL query.</p>
<pre class="brush: php noskimlinks noskimwords">// We have a match, activate the account
mysql_query("UPDATE users SET active='1' WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error());
echo '&lt;div class="statusmsg"&gt;Your account has been activated, you can now login&lt;/div&gt;';</pre>
<p>So we use the same search terms for the update as we used in our MySQL select query. We change <code class="inline">active</code> to <code class="inline">1</code> wherever the <code class="inline">email</code>, <code class="inline">hash</code>, and <code class="inline">active</code> fields have the right values. We also return a message telling the user that their account has been activated. You can add a message like we did here to the "no match" part.</p>
<p>So the final code should look similar to the following:</p>
<pre class="brush: php noskimlinks noskimwords">mysql_connect("localhost", "tutorial", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password.
mysql_select_db("registrations") or die(mysql_error()); // Select registration database.

if(isset($_GET['email']) &amp;&amp; !empty($_GET['email']) AND isset($_GET['hash']) &amp;&amp; !empty($_GET['hash'])){
    // Verify data
    $email = mysql_escape_string($_GET['email']); // Set email variable
    $hash = mysql_escape_string($_GET['hash']); // Set hash variable

    $search = mysql_query("SELECT email, hash, active FROM users WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error());
    $match  = mysql_num_rows($search);

    if($match &gt; 0){
        // We have a match, activate the account
        mysql_query("UPDATE users SET active='1' WHERE email='".$email."' AND hash='".$hash."' AND active='0'") or die(mysql_error());
        echo '&lt;div class="statusmsg"&gt;Your account has been activated, you can now login&lt;/div&gt;';
    }else{
        // No match -&gt; invalid url or account has already been activated.
        echo '&lt;div class="statusmsg"&gt;The url is either invalid or you already have activated your account.&lt;/div&gt;';
    }

}else{
    // Invalid approach
    echo '&lt;div class="statusmsg"&gt;Invalid approach, please use the link that has been send to your email.&lt;/div&gt;';
}</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg" alt="Verify Email Address PHP Script Tutorial Account Activation" loading="lazy" width="870px" height="239px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg" alt="Verify Email Address PHP Script Tutorial Account Activation" loading="lazy" width="650px" height="182px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg" alt="Verify Email Address PHP Script Tutorial Account Activation" loading="lazy" width="380px" height="113px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_6_account_activated.jpg 2x"></figure>
<p>If you visit <strong>verify.php</strong> without any strings, the following error will be shown:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg" alt="Verify Email Address PHP Script Tutorial Invalid Approach" loading="lazy" width="870px" height="234px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg" alt="Verify Email Address PHP Script Tutorial Invalid Approach" loading="lazy" width="650px" height="179px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg" alt="Verify Email Address PHP Script Tutorial Invalid Approach" loading="lazy" width="380px" height="111px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/step_6_incorrect_approach.jpg 2x"></figure>
<h3>7. Create the Login </h3>
<p>In this final step, I'll show you how to create a basic login form and check if the account is activated. First, create a new file called <strong>login.php</strong> with the basic template we used before, but this time I changed the form into a login form.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
    &lt;title&gt;NETTUTS &gt; Sign up&lt;/title&gt;
    &lt;link href="css/style.css" type="text/css" rel="stylesheet" /&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- start header div --&gt;
    &lt;div id="header"&gt;
        &lt;h3&gt;NETTUTS &gt; Sign up&lt;/h3&gt;
    &lt;/div&gt;
    &lt;!-- end header div --&gt;

    &lt;!-- start wrap div --&gt;
    &lt;div id="wrap"&gt;
        &lt;!-- start PHP code --&gt;
        &lt;?php

            mysql_connect("localhost", "tutorial", "password") or die(mysql_error()); // Connect to database server(localhost) with username and password.
            mysql_select_db("registrations") or die(mysql_error()); // Select registration database.


        ?&gt;
        &lt;!-- stop PHP Code --&gt;

        &lt;!-- title and description --&gt;
        &lt;h3&gt;Login Form&lt;/h3&gt;
        &lt;p&gt;Please enter your name and password to login&lt;/p&gt;

        &lt;?php
            if(isset($msg)){ // Check if $msg is not empty
                echo '&lt;div class="statusmsg"&gt;'.$msg.'&lt;/div&gt;'; // Display our message and add a div around it with the class statusmsg
            } ?&gt;

        &lt;!-- start sign up form --&gt;
        &lt;form action="" method="post"&gt;
            &lt;label for="name"&gt;Name:&lt;/label&gt;
            &lt;input type="text" name="name" value="" /&gt;
            &lt;label for="password"&gt;Password:&lt;/label&gt;
            &lt;input type="password" name="password" value="" /&gt;

            &lt;input type="submit" class="submit_button" value="Sign up" /&gt;
        &lt;/form&gt;
        &lt;!-- end sign up form --&gt;

    &lt;/div&gt;
    &lt;!-- end wrap div --&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>The form is basic HTML and is almost the same as the signup form, so no further explanation is needed. </p>
<p>Now it's time to write the code for the login script. We'll add this just below the MySQL connection code. We start with something we also did in the signup form.</p>
<p>We first check to see if the data is being posted, and we make sure that it's not empty.</p>
<pre class="brush: php noskimlinks noskimwords">if(isset($_POST['name']) &amp;&amp; !empty($_POST['name']) AND isset($_POST['password']) &amp;&amp; !empty($_POST['password'])) {
    $username = mysql_escape_string($_POST['name']); // Set variable for the username

    $result = mysql_fetch_assoc(mysql_query("SELECT password FROM users WHERE active = '1' AND username = '" . $username . "'"));
    $password_hash = (isset($result['password']) ? $result['password'] : '');
    $result = password_verify($_POST['password'], $password_hash);
}</pre>
<p>Next, we've created the connection to our <code class="inline">users</code> table and verified if the entered data is correct. We wrote a MySQL query which would select the password hash from the database associated with the entered username. Finally, we've used the <code class="inline">password_verify</code> function to verify the input password. The <code class="inline">$result</code> contains <code class="inline">TRUE</code> if the user has entered the correct password; otherwise, it would be <code class="inline">FALSE</code>.</p>
<p>And<strong> </strong>the active condition is important! This is what makes sure that you can only log in if your account has been activated.</p>
<pre class="brush: php noskimlinks noskimwords">if($result){
    $msg = 'Login Complete! Thanks';
    // Set cookie / Start Session / Start Download etc...
}else{
    $msg = 'Login Failed! Please make sure that you enter the correct details and that you have activated your account.';
}</pre>
<p>In the code above, we check if the login was a success or not.</p>
<h2>Top PHP Form Scripts on CodeCanyon in 2021</h2>
<p>Setting up an email verification code generator is a useful skill to have in your arsenal. But if you don't have the time, then grab a professional template. They'll save you time and are designed to suit many website types. You can find some of the <a href="https://codecanyon.net/category/php-scripts">best PHP form script downloads</a> with user email verification from CodeCanyon.</p>
<h3>1. <a href="https://codecanyon.net/item/quform-responsive-ajax-contact-form/148273" target="_blank" rel="noopener">Quform: Responsive AJAX Contact Form</a>
</h3>
<p>Quform is an excellent AJAX contact form that can be implemented on a number of websites. This download works without reloading the page, letting visitors finish your forms smoothly and quickly. Quform is also easily adapted to all types of forms, including registration and quote. This PHP form is a no-brainer if you want an easy-to-use script for your site.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/quform-responsive-ajax-contact-form/148273"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg" alt="Quform AJAX Contact Form Template With User Email Verification" loading="lazy" width="870px" height="763px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg" alt="Quform AJAX Contact Form Template With User Email Verification" loading="lazy" width="650px" height="571px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg" alt="Quform AJAX Contact Form Template With User Email Verification" loading="lazy" width="380px" height="335px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/quform-responsive-ajax-contact-form-148273.jpg 2x"></a></figure>
<h3>2. <a href="https://codecanyon.net/item/securephplogin-registration-system/5178737" target="_blank" rel="noopener">Secure PHP Login and Registration System</a>
</h3>
<p>What this PHP script download does well is all in the name. Set up secure login and registration processes for your site that visitors can use easily. You can set up user email verification thanks to the built-in module. Forms made from these scripts can also be validated without refreshing the page.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/securephplogin-registration-system/5178737"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg" alt="Secure PHP Login and Registration Download With Send Confirmation Email PHP" loading="lazy" width="870px" height="679px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg" alt="Secure PHP Login and Registration Download With Send Confirmation Email PHP" loading="lazy" width="650px" height="508px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg" alt="Secure PHP Login and Registration Download With Send Confirmation Email PHP" loading="lazy" width="380px" height="299px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/securephplogin-registration-system-5178737.jpg 2x"></a></figure>
<h3>3. <a href="https://codecanyon.net/item/easy-forms-advanced-form-builder-and-manager/14176957" target="_blank" rel="noopener">Easy Forms: Advanced Form Builder and Manager</a>
</h3>
<p>Building the forms your site need don't get easier than with this PHP script download. It's packed with useful features, too many to list in this article. But here are a few features of Easy Forms you and your users will like to have:</p>
<ul>
<li>spam filtering and reCAPTCHA</li>
<li>theme designer for forms</li>
<li>email verification sent to users</li>
<li>support for smartphones, tablets, and other mobile devices</li>
</ul>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-forms-advanced-form-builder-and-manager/14176957"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg" alt="Easy Forms Template Download With Email Verification Code Generator" loading="lazy" width="870px" height="949px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg" alt="Easy Forms Template Download With Email Verification Code Generator" loading="lazy" width="650px" height="709px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg" alt="Easy Forms Template Download With Email Verification Code Generator" loading="lazy" width="380px" height="413px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/easy-forms-advanced-form-builder-and-manager-14176957.jpg 2x"></a></figure>
<h3>4. <a href="https://codecanyon.net/item/php-form-builder/8790160" target="_blank" rel="noopener">PHP Form Builder</a>
</h3>
<p>Build contact forms, dynamic fields forms, and everything in between with PHP Form Builder. It has everything to make the process smooth, including a drag-and-drop builder. You can set up a registration and login form with a PHP send email verification code with no coding knowledge needed.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/php-form-builder/8790160"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg" loading="lazy" width="870px" height="628px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg" loading="lazy" width="650px" height="471px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg" loading="lazy" width="380px" height="278px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7641/image-upload/php-form-builder-8790160.jpg 2x"></a></figure>
<h2>Find Even More PHP Scripts From CodeCanyon</h2>
<p>You can explore thousands of the <a href="https://codecanyon.net/popular_item/by_category?category=php-scripts">best and most useful PHP scripts</a> ever created on CodeCanyon.</p>
<figure class="post_image"><a href="https://codecanyon.net/popular_item/by_category?category=php-scripts"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt="PHP scripts on CodeCanyon" loading="lazy" width="870px" height="641px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt="PHP scripts on CodeCanyon" loading="lazy" width="650px" height="480px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg" alt="PHP scripts on CodeCanyon" loading="lazy" width="380px" height="283px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg 2x"></a></figure>
<p>Here are a few of the best-selling and up-and-coming PHP scripts available on CodeCanyon for 2021.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/15-best-php-calendar-booking-events-scripts--cms-28635"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">11 Best PHP Event Calendar and Booking Scripts... and 3 Free Options</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-php-url-shortener-scripts--cms-28675"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28675/preview_image/url-browser.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28675/preview_image/url-browser.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">13 Best PHP URL Shortener Scripts (Free and Premium)</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/best-contact-form-php-scripts--cms-30639"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/30639/preview_image/contact%20form.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/30639/preview_image/contact%20form.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">18 Best Contact Form PHP Scripts for 2021</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/comparing-the-best-php-form-builders--cms-32273"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/32273/preview_image/PHP.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/32273/preview_image/PHP.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Comparing the 5 Best PHP Form Builders (And 4 Free Scripts)</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-beautiful-forms-with-php-form-builder--cms-33267"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/362/posts/33267/preview_image/t1.jpeg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/362/posts/33267/preview_image/t1.jpeg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create Beautiful Forms With PHP Form Builder</div>
<div class="roundup-block__author">Ashraff Hathibelagal</div></a></li>
</ul>
<h2>Conclusion</h2>
<p>And that's all it takes to create a complete email validation and login system in PHP! I hope you enjoyed the post, and if you did, please leave a comment below!</p>
<p>Coding your own PHP is great fun, and of course it's the foundation for a good app. However, to save time creating more specialized features, or for complete applications that you can use and customize, take a look at the <a href="https://codecanyon.net/popular_item/by_category?category=php-scripts">professional PHP scripts</a> on CodeCanyon.</p>
<p>PHP is a powerful scripting language that is used to keep all types of web functions ticking. If you're interested in learning more about PHP, you'll want to give these articles a look. They were written by the outstanding instructors of Envato Tuts+:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-send-text-messages-with-php--net-17693"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/10978/preview_image/checking-text-messages-NDMWSMD.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Send Text Messages With PHP</div>
<div class="roundup-block__author">Kevin Jensen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/understanding-variable-scope-in-php--cms-36708"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36708/preview_image/telescope-PJLCT3J.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Understanding Variable Scope in PHP</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-call-a-php-function-from-javascript--cms-36508"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36508/preview_image/irrigation-system-in-function-LYE6NBV.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Call a PHP Function From JavaScript</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/working-with-date-and-time-in-php--cms-31768"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/31768/preview_image/hourglass-on-calendar-PQP5CGB.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Formatting the Current Date and Time in PHP</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-a-php-login-form--cms-33261"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33261/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33261/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33261/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33261/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33261/preview_image/PHP.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33261/preview_image/PHP.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create a PHP Login Form</div>
<div class="roundup-block__author">Monty Shoke]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-06T14:39:02+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Create a Simple Web-Based Chat Application]]></title>
      <link>//shineyrock.com/blog/read/how-to-create-a-simple-web-based-chat-application</link>
      <guid>https://shineyrock.com/blog/read/how-to-create-a-simple-web-based-chat-application#When:11:45:22Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>In this tutorial, we will be creating a simple web-based chat application with PHP and jQuery. This sort of utility would be perfect for a live support system for your website.</p>
<p>This tutorial was updated recently to make improvements in the chat app. </p>
<h2>Introduction</h2>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App" loading="lazy" width="870px" height="697px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App" loading="lazy" width="650px" height="522px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App" loading="lazy" width="380px" height="307px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"></figure>
<div>The chat application we will be building today will be quite simple. It will include a login and logout system, AJAX-style features, and support for multiple users.</div>
<h2>Step 1: HTML Markup</h2>
<p>We will start this tutorial by creating our first file, called <strong>index.php</strong>.</p>
<pre class="brush: html noskimlinks noskimwords">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;

        &lt;title&gt;Tuts+ Chat Application&lt;/title&gt;
        &lt;meta name="description" content="Tuts+ Chat Application" /&gt;
        &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div id="wrapper"&gt;
            &lt;div id="menu"&gt;
                &lt;p class="welcome"&gt;Welcome, &lt;b&gt;&lt;/b&gt;&lt;/p&gt;
                &lt;p class="logout"&gt;&lt;a id="exit" href="#"&gt;Exit Chat&lt;/a&gt;&lt;/p&gt;
            &lt;/div&gt;

            &lt;div id="chatbox"&gt;&lt;/div&gt;

            &lt;form name="message" action=""&gt;
                &lt;input name="usermsg" type="text" id="usermsg" /&gt;
                &lt;input name="submitmsg" type="submit" id="submitmsg" value="Send" /&gt;
            &lt;/form&gt;
        &lt;/div&gt;
        &lt;script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript"&gt;
            // jQuery Document
            $(document).ready(function () {});
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<ul>
<li>We start our HTML with the usual DOCTYPE, html, head, and body tags. In the head tag, we add our title and link to our CSS stylesheet (style.css).</li>
<li>Inside the body tag, we structure our layout inside the <code>#wrapper</code> div. We will have three main blocks: a simple menu, our chatbox, and our message input, each with its respective div and id.
<ul>
<li>The <code>#menu</code> div will consist of two paragraph elements. The first will be a welcome to the user and will be on the left, and the second will be an exit link and will be on the right. We are using flexbox instead of floating elements for the layout.</li>
<li>The <code>#chatbox</code> div will contain our chatlog. We will load our log from an external file using jQuery's <code>ajax</code> request.</li>
<li>The last item in our <code>#wrapper</code> div will be our form, which will include a text input for the user message and a submit button.</li>
</ul>
</li>
<li>We add our scripts last so that the page will load faster. We will first link to the Cloudflare jQuery CDN, as we will be using the jQuery library for this tutorial. Our second script tag is what we will be working on. We will load all of our code after the document is ready.</li>
</ul>
<h2>Step 2: CSS Styling</h2>
<p>We will now add some CSS to make our chat application look better than with the default browser styling. The code below will be added to our <strong>style.css</strong> file.</p>
<pre class="brush: css noskimlinks noskimwords">* {
    margin: 0;
    padding: 0;
  }

  body {
    margin: 20px auto;
    font-family: "Lato";
    font-weight: 300;
  }

  form {
    padding: 15px 25px;
    display: flex;
    gap: 10px;
    justify-content: center;
  }

  form label {
    font-size: 1.5rem;
    font-weight: bold;
  }

  input {
    font-family: "Lato";
  }

  a {
    color: #0000ff;
    text-decoration: none;
  }

  a:hover {
    text-decoration: underline;
  }

  #wrapper,
  #loginform {
    margin: 0 auto;
    padding-bottom: 25px;
    background: #eee;
    width: 600px;
    max-width: 100%;
    border: 2px solid #212121;
    border-radius: 4px;
  }

  #loginform {
    padding-top: 18px;
    text-align: center;
  }

  #loginform p {
    padding: 15px 25px;
    font-size: 1.4rem;
    font-weight: bold;
  }

  #chatbox {
    text-align: left;
    margin: 0 auto;
    margin-bottom: 25px;
    padding: 10px;
    background: #fff;
    height: 300px;
    width: 530px;
    border: 1px solid #a7a7a7;
    overflow: auto;
    border-radius: 4px;
    border-bottom: 4px solid #a7a7a7;
  }

  #usermsg {
    flex: 1;
    border-radius: 4px;
    border: 1px solid #ff9800;
  }

  #name {
    border-radius: 4px;
    border: 1px solid #ff9800;
    padding: 2px 8px;
  }

  #submitmsg,
  #enter{
    background: #ff9800;
    border: 2px solid #e65100;
    color: white;
    padding: 4px 10px;
    font-weight: bold;
    border-radius: 4px;
  }

  .error {
    color: #ff0000;
  }

  #menu {
    padding: 15px 25px;
    display: flex;
  }

  #menu p.welcome {
    flex: 1;
  }

  a#exit {
    color: white;
    background: #c62828;
    padding: 4px 8px;
    border-radius: 4px;
    font-weight: bold;
  }

  .msgln {
    margin: 0 0 5px 0;
  }

  .msgln span.left-info {
    color: orangered;
  }

  .msgln span.chat-time {
    color: #666;
    font-size: 60%;
    vertical-align: super;
  }

  .msgln b.user-name, .msgln b.user-name-left {
    font-weight: bold;
    background: #546e7a;
    color: white;
    padding: 2px 4px;
    font-size: 90%;
    border-radius: 4px;
    margin: 0 5px 0 0;
  }

  .msgln b.user-name-left {
    background: orangered;
  }
  </pre>
<p>There's nothing special about the above CSS other than the fact that some ids or classes, which we have set a style for, will be added a bit later.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Interface" loading="lazy" width="870px" height="713px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Interface" loading="lazy" width="650px" height="534px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Interface" loading="lazy" width="380px" height="314px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_interface.png 2x"></figure>
<div> </div>
<div>As you can see above, we are finished building the chat's user interface.</div>
<h2>Step 3: Using PHP to Create a Login Form</h2>
<p>Now we will implement a simple form that will ask the user their name before continuing further.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
session_start();

if(isset($_POST['enter'])){
    if($_POST['name'] != ""){
		$_SESSION['name'] = stripslashes(htmlspecialchars($_POST['name']));
	}
	else{
		echo '&lt;span class="error"&gt;Please type in a name&lt;/span&gt;';
	}
}

function loginForm(){
	echo'
	&lt;div id="loginform"&gt;
      &lt;p&gt;Please enter your name to continue!&lt;/p&gt;
      &lt;form action="index.php" method="post"&gt;
        &lt;label for="name"&gt;Name &amp;mdash;&lt;/label&gt;
        &lt;input type="text" name="name" id="name" /&gt;
        &lt;input type="submit" name="enter" id="enter" value="Enter" /&gt;
      &lt;/form&gt;
    &lt;/div&gt;
	';
}
?&gt;</pre>
<p>The <code>loginForm()</code> function we created is composed of a simple login form which asks the user for their name. We then use an if and else statement to verify that the person entered a name. If the person entered a name, we set that name as <code>$_SESSION['name']</code>. Since we are using a cookie-based session to store the name, we must call <code>session_start()</code> before anything is outputted to the browser.</p>
<p>One thing that you may want to pay close attention to is that we have used the <code>htmlspecialchars()</code> function, which converts special characters to HTML entities, therefore protecting the name variable from falling victim to <a href="https://en.wikipedia.org/wiki/Cross-site_scripting">cross-site scripting (XSS)</a>. Later, we will also add this function to the text variable that will be posted to the chat log.</p>
<h3>Showing the Login Form</h3>
<p>In order to show the login form in case a user has not logged in, and hence has not created a session, we use another if and else statement around the <code>#wrapper</code> div and script tags in our original code. In the opposite case, this will hide the login form and show the chat box if the user is logged in and has created a session.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
if(!isset($_SESSION['name'])){
	loginForm();
}
else{
?&gt;
&lt;div id="wrapper"&gt;
    &lt;div id="menu"&gt;
        &lt;p class="welcome"&gt;Welcome, &lt;b&gt;&lt;?php echo $_SESSION['name']; ?&gt;&lt;/b&gt;&lt;/p&gt;
        &lt;p class="logout"&gt;&lt;a id="exit" href="#"&gt;Exit Chat&lt;/a&gt;&lt;/p&gt;
    &lt;/div&gt;

    &lt;div id="chatbox"&gt;
    &lt;?php
    if(file_exists("log.html") &amp;&amp; filesize("log.html") &gt; 0){

        $contents = file_get_contents("log.html");
        echo $contents;
    }
    ?&gt;
    &lt;/div&gt;

    &lt;form name="message" action=""&gt;
        &lt;input name="usermsg" type="text" id="usermsg" /&gt;
        &lt;input name="submitmsg" type="submit" id="submitmsg" value="Send" /&gt;
    &lt;/form&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
// jQuery Document
$(document).ready(function(){
});
&lt;/script&gt;
&lt;?php
}
?&gt;</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Login Screen" loading="lazy" width="870px" height="296px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Login Screen" loading="lazy" width="650px" height="225px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png" alt="How to Implement Live Chat in PHP Tutorial TutsPlus Chat App Login Screen" loading="lazy" width="380px" height="137px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_login.png 2x"></figure>
<h3>Welcome and Logout Menu</h3>
<p>We are not yet finished creating the login system for this chat application. We still need to allow the user to log out and end the chat session. If you remember, our original HTML markup included a simple menu. Let's go back and add some PHP code that will give the menu more functionality.</p>
<p>First of all, let's add the user's name to the welcome message. We do this by outputting the session of the user's name.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;p class="welcome"&gt;Welcome, &lt;b&gt;&lt;?php echo $_SESSION['name']; ?&gt;&lt;/b&gt;&lt;/p&gt;</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png" alt="How to Implement Live Chat in PHP Tutorial Tutsplus Chat App Welcome" loading="lazy" width="870px" height="256px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png" alt="How to Implement Live Chat in PHP Tutorial Tutsplus Chat App Welcome" loading="lazy" width="650px" height="195px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png" alt="How to Implement Live Chat in PHP Tutorial Tutsplus Chat App Welcome" loading="lazy" width="380px" height="120px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_welcome.png 2x"></figure>
<p>In order to allow the user to log out and end the session, we will jump ahead of ourselves and briefly use jQuery.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;script type="text/javascript"&gt;
// jQuery Document
$(document).ready(function(){
	//If user wants to end session
	$("#exit").click(function(){
		var exit = confirm("Are you sure you want to end the session?");
		if(exit==true){window.location = 'index.php?logout=true';}
	});
});
&lt;/script&gt;</pre>
<p>The jQuery code above simply shows a confirmation alert if a user clicks the <code>#exit</code> link. If the user confirms the exit, therefore deciding to end the session, then we send them to <code>index.php?logout=true</code>. This simply creates a variable called <code>logout</code> with the value of <code>true</code>. We need to catch this variable with PHP:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Logout Prompt" loading="lazy" width="870px" height="528px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Logout Prompt" loading="lazy" width="650px" height="397px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Logout Prompt" loading="lazy" width="380px" height="235px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_prompt.png 2x"></figure>
<pre class="brush: php noskimlinks noskimwords">if(isset($_GET['logout'])){

	//Simple exit message
	$logout_message = "&lt;div class='msgln'&gt;&lt;span class='left-info'&gt;User &lt;b class='user-name-left'&gt;". $_SESSION['name'] ."&lt;/b&gt; has left the chat session.&lt;/span&gt;&lt;br&gt;&lt;/div&gt;";
    file_put_contents("log.html", $logout_message, FILE_APPEND | LOCK_EX);

	session_destroy();
	header("Location: index.php"); //Redirect the user
}</pre>
<p>We now see if a <code>get</code> variable of 'logout' exists using the <code>isset()</code> function. If the variable has been passed via a URL, such as the link mentioned above, we proceed to end the session of the user's name.</p>
<p>Before destroying the user's name session with the <code>session_destroy()</code> function, we want to write a simple exit message to the chat log. It will say that the user has left the chat session. We do this by using the <code>file_put_contents()</code> function to manipulate our <strong>log.html</strong> file, which, as we will see later on, will be created as our chat log. The <code>file_put_contents()</code> function is a convenient way to write data to a text file instead of using <code>fopen()</code>, <code>fwrite()</code>, and <code>fclose()</code> each time. Just make sure that you pass appropriate flags like <code>FILE_APPEND</code> to append the data at the end of the file. Otherwise, a new <code>$logout_message</code> will overwrite the previous content of the file. Please note that we have added a class of <code>msgln</code> to the div. We have already defined the CSS styling for this div.</p>
<p>After doing this, we destroy the session and redirect the user to the same page where the login form will appear.</p>
<h2>Step 4: Handling User Input</h2>
<p>After a user submits our form, we want to grab their input and write it to our chat log. In order to do this, we must use jQuery and PHP to work synchronously on the client and server sides.</p>
<h3>jQuery</h3>
<p>Almost everything we are going to do with jQuery to handle our data will revolve around the jQuery post request.</p>
<pre class="brush: javascript noskimlinks noskimwords">//If user submits the form
$("#submitmsg").click(function () {
    var clientmsg = $("#usermsg").val();
    $.post("post.php", { text: clientmsg });
    $("#usermsg").val("");
    return false;
});</pre>
<ol>
<li>Before we do anything, we must grab the user's input, or what the user has typed into the <code>#submitmsg</code> input. This can be achieved with the <code>val()</code> function, which gets the value set in a form field. We now store this value in the <code>clientmsg</code> variable.</li>
<li>Here comes our most important part: the jQuery post request. This sends a POST request to the <strong>post.php</strong> file that we will create in a moment. It posts the client's input, or what has been saved into the <code>clientmsg</code> variable.</li>
<li>Lastly, we clear the <code>#usermsg</code> input by setting the value attribute to blank.</li>
</ol>
<p>Please note that the code above will go into our script tag, where we placed the jQuery logout code.</p>
<h3>PHP: The post.php File</h3>
<p>At the moment, we have POST data being sent to the <strong>post.php</strong> file each time the user submits the form and sends a new message. Our goal now is to grab this data and write it into our chat log.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?
session_start();
if(isset($_SESSION['name'])){
	$text = $_POST['text'];

	$text_message = "&lt;div class='msgln'&gt;&lt;span class='chat-time'&gt;".date("g:i A")."&lt;/span&gt; &lt;b class='user-name'&gt;".$_SESSION['name']."&lt;/b&gt; ".stripslashes(htmlspecialchars($text))."&lt;br&gt;&lt;/div&gt;";

    file_put_contents("log.html", $text_message, FILE_APPEND | LOCK_EX);
}
?&gt;</pre>
<p>Before we do anything, we have to start the <strong>post.php</strong> file with the <code>session_start()</code> function as we will be using the session of the user's name in this file.</p>
<p>Using the <code>isset</code> boolean, we check if the session for 'name' exists before doing anything else. We now grab the POST data that was being sent to this file by jQuery. We store this data into the <code>$text</code> variable. This data, like all the overall user input data, will be stored in the <strong>log.html</strong> file. We simply use the <code>file_put_contents()</code> function to write all the data to the file.</p>
<p>The message we will be writing will be enclosed inside the <code>.msgln</code> div. It will contain the date and time generated by the <code>date()</code> function, the session of the user's name, and the text, which is also surrounded by the <code>htmlspecialchars()</code> function to prevent XSS.</p>
<h2>Step 5: Displaying the Chat Log Contents</h2>
<p>Everything the user has posted is handled and posted using jQuery; it is written to the chat log with PHP. The only thing left to do is to display the updated chat log to the user with <strong>log.php</strong>.</p>
<p>In order to save ourselves some time, we will preload the chat log into the <code>#chatbox</code> div if it has any content.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;div id="chatbox"&gt;&lt;?php
if(file_exists("log.html") &amp;&amp; filesize("log.html") &gt; 0){

	$contents = file_get_contents("log.html");
    echo $contents;
}
?&gt;&lt;/div&gt;</pre>
<p>We use a similar routine as we used in the <strong>post.php</strong> file, except this time we are only reading and outputting the contents of the file.</p>
<h3>The <code>jQuery.ajax</code> Request</h3>
<p>The AJAX request is the core of everything we are doing. This request not only allows us to send and receive data through the form without refreshing the page, but it also allows us to handle the data requested.</p>
<pre class="brush: javascript noskimlinks noskimwords">//Load the file containing the chat log
function loadLog(){
	$.ajax({
		url: "log.html",
		cache: false,
		success: function(html){
			$("#chatbox").html(html); //Insert chat log into the #chatbox div
	  	},
	});
}</pre>
<p>We wrap our AJAX request inside a function. You will see why in a second. As you see above, we will only use three of the jQuery AJAX request objects.</p>
<ul>
<li>
<strong><code>url</code>:</strong> A string of the URL to request. We will use our chat log's filename of log.html.</li>
<li>
<strong><code>cache</code>:</strong> This will prevent our file from being cached. It will ensure that we get an updated chat log every time we send a request.</li>
<li>
<strong><code>success</code>:</strong> This will allow us to attach a function that will pass the data we requested.</li>
</ul>
<p>As you see, we then move the HTML data we requested into the <code>#chatbox</code> div.</p>
<h3>Auto-Scrolling</h3>
<p>As you may have seen in other chat applications, the content automatically scrolls down if the chat log container (<code>#chatbox</code>) overflows. We are going to implement a simple and similar feature, which will compare the container's scroll height before and after we do the AJAX request. If the scroll height is greater after the request, we will use jQuery's animate effect to scroll the <code>#chatbox</code> div.</p>
<pre class="brush: javascript noskimlinks noskimwords">//Load the file containing the chat log
function loadLog(){
	var oldscrollHeight = $("#chatbox")[0].scrollHeight - 20; //Scroll height before the request
	$.ajax({
		url: "log.html",
		cache: false,
		success: function(html){
			$("#chatbox").html(html); //Insert chat log into the #chatbox div

			//Auto-scroll
			var newscrollHeight = $("#chatbox")[0].scrollHeight - 20; //Scroll height after the request
			if(newscrollHeight &gt; oldscrollHeight){
				$("#chatbox").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div
			}
	  	},
	});
}</pre>
<p>We first store the <code>#chatbox</code> div's scroll height into the <code>oldscrollHeight</code> variable <em>before</em> we make the request. After our request has returned successfully, we store the <code>#chatbox</code> div's scrolled height into the <code>newscrollHeight</code> variable.</p>
<p>We then compare both of the scroll height variables using an <code>if</code> statement. If <code>newscrollHeight</code> is greater than the <code>oldscrollHeight</code>, we use the animate effect to scroll the <code>#chatbox</code> div.</p>
<h3>Continuously Updating the Chat Log</h3>
<p>Now one question may arise: how will we <em>constantly</em> update the new data being sent back and forth between users? Or to rephrase the question, how will we keep continuously sending requests to update the data?</p>
<pre class="brush: javascript noskimlinks noskimwords">setInterval (loadLog, 2500);	//Reload file every 2500 ms or x ms if you wish to change the second parameter</pre>
<p>The answer to our question lies in the <code>setInterval</code> function. This function will run our <code>loadLog()</code> function every 2.5 seconds, and the <code>loadLog</code> function will request the updated file and autoscroll the div.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Network" loading="lazy" width="870px" height="378px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Network" loading="lazy" width="650px" height="285px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App Network" loading="lazy" width="380px" height="172px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app_network_log.png 2x"></figure>
<h2>Complete Code</h2>
<p>The chat app might not work properly for you if the right code is not placed inside the right files and in the right order. To avoid any confusion, I am posting the whole code that will go into two separate files called <strong>index.php</strong> and <strong>post.php</strong>.</p>
<p>Here is the code for <strong>index.php</strong>:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

session_start();

if(isset($_GET['logout'])){

	//Simple exit message
    $logout_message = "&lt;div class='msgln'&gt;&lt;span class='left-info'&gt;User &lt;b class='user-name-left'&gt;". $_SESSION['name'] ."&lt;/b&gt; has left the chat session.&lt;/span&gt;&lt;br&gt;&lt;/div&gt;";
    file_put_contents("log.html", $logout_message, FILE_APPEND | LOCK_EX);

	session_destroy();
	header("Location: index.php"); //Redirect the user
}

if(isset($_POST['enter'])){
    if($_POST['name'] != ""){
        $_SESSION['name'] = stripslashes(htmlspecialchars($_POST['name']));
    }
    else{
        echo '&lt;span class="error"&gt;Please type in a name&lt;/span&gt;';
    }
}

function loginForm(){
    echo
    '&lt;div id="loginform"&gt;
    &lt;p&gt;Please enter your name to continue!&lt;/p&gt;
    &lt;form action="index.php" method="post"&gt;
      &lt;label for="name"&gt;Name &amp;mdash;&lt;/label&gt;
      &lt;input type="text" name="name" id="name" /&gt;
      &lt;input type="submit" name="enter" id="enter" value="Enter" /&gt;
    &lt;/form&gt;
  &lt;/div&gt;';
}

?&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
    &lt;head&gt;
        &lt;meta charset="utf-8" /&gt;

        &lt;title&gt;Tuts+ Chat Application&lt;/title&gt;
        &lt;meta name="description" content="Tuts+ Chat Application" /&gt;
        &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;?php
    if(!isset($_SESSION['name'])){
        loginForm();
    }
    else {
    ?&gt;
        &lt;div id="wrapper"&gt;
            &lt;div id="menu"&gt;
                &lt;p class="welcome"&gt;Welcome, &lt;b&gt;&lt;?php echo $_SESSION['name']; ?&gt;&lt;/b&gt;&lt;/p&gt;
                &lt;p class="logout"&gt;&lt;a id="exit" href="#"&gt;Exit Chat&lt;/a&gt;&lt;/p&gt;
            &lt;/div&gt;

            &lt;div id="chatbox"&gt;
            &lt;?php
            if(file_exists("log.html") &amp;&amp; filesize("log.html") &gt; 0){
                $contents = file_get_contents("log.html");
                echo $contents;
            }
            ?&gt;
            &lt;/div&gt;

            &lt;form name="message" action=""&gt;
                &lt;input name="usermsg" type="text" id="usermsg" /&gt;
                &lt;input name="submitmsg" type="submit" id="submitmsg" value="Send" /&gt;
            &lt;/form&gt;
        &lt;/div&gt;
        &lt;script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"&gt;&lt;/script&gt;
        &lt;script type="text/javascript"&gt;
            // jQuery Document
            $(document).ready(function () {
                $("#submitmsg").click(function () {
                    var clientmsg = $("#usermsg").val();
                    $.post("post.php", { text: clientmsg });
                    $("#usermsg").val("");
                    return false;
                });

                function loadLog() {
                    var oldscrollHeight = $("#chatbox")[0].scrollHeight - 20; //Scroll height before the request

                    $.ajax({
                        url: "log.html",
                        cache: false,
                        success: function (html) {
                            $("#chatbox").html(html); //Insert chat log into the #chatbox div

                            //Auto-scroll
                            var newscrollHeight = $("#chatbox")[0].scrollHeight - 20; //Scroll height after the request
                            if(newscrollHeight &gt; oldscrollHeight){
                                $("#chatbox").animate({ scrollTop: newscrollHeight }, 'normal'); //Autoscroll to bottom of div
                            }
                        }
                    });
                }

                setInterval (loadLog, 2500);

                $("#exit").click(function () {
                    var exit = confirm("Are you sure you want to end the session?");
                    if (exit == true) {
                    window.location = "index.php?logout=true";
                    }
                });
            });
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;
&lt;?php
}
?&gt;
</pre>
<p>Here is the code for <strong>post.php</strong>:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
session_start();
if(isset($_SESSION['name'])){
    $text = $_POST['text'];

	$text_message = "&lt;div class='msgln'&gt;&lt;span class='chat-time'&gt;".date("g:i A")."&lt;/span&gt; &lt;b class='user-name'&gt;".$_SESSION['name']."&lt;/b&gt; ".stripslashes(htmlspecialchars($text))."&lt;br&gt;&lt;/div&gt;";
    file_put_contents("log.html", $text_message, FILE_APPEND | LOCK_EX);
}
?&gt;</pre>
<p>The code that goes into <strong>style.css</strong> is already available in Step 2 of the tutorial.</p>
<p>If the code you have does not seem to be working, make sure it matches the code provided here. Please note that all three files—<strong>index.php</strong>, <strong>post.php</strong>, and <strong>style.css</strong>—are located in the same directory.</p>
<h2>Awesome Online Chat PHP Scripts From CodeCanyon</h2>
<p>Would you rather download an <a href="https://codecanyon.net/tags/chat">online chat PHP script</a> instead of creating one yourself? Then you'll want to check out these premium templates from CodeCanyon:</p>
<h3>1. <a href="https://codecanyon.net/item/wordpress-live-chat-plugin/3952877" target="_blank" rel="noopener">Live Chat Unlimited</a>
</h3>
<p>Live Chat Unlimited is a bestselling simple PHP chat box for a reason. It's very lightweight to keep your site load speeds down and can be installed on unlimited domains. The online chat PHP script also offers multi-lingual support through the WPML and Polylang plugins. You can also enable email notifications so you can be ready to chat with visitors.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-live-chat-plugin/3952877"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg" alt="LiveChat Unlimited Online Chat PHP" loading="lazy" width="870px" height="836px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg" alt="LiveChat Unlimited Online Chat PHP" loading="lazy" width="650px" height="625px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg" alt="LiveChat Unlimited Online Chat PHP" loading="lazy" width="380px" height="366px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7477/image-upload/wordpress-live-chat-plugin-3952877.jpg 2x"></a></figure>
<h3>2. <a href="https://codecanyon.net/item/php-live-support-chat/6905905" target="_blank" rel="noopener">PHP Live Support Chat</a>
</h3>
<p>This PHP chat script template download lets you offer live chat support to all of your site's visitors. It's easy to set up and has a 4.5-star rating on CodeCanyon. Embrace PHP Live Support Chat's features like:</p>
<ul>
<li>installation wizard</li>
<li>mobile support</li>
<li>full-screen mode</li>
<li>emoticons and avatars</li>
</ul>
<figure class="post_image"><a href="https://codecanyon.net/item/php-live-support-chat/6905905"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg" alt="PHP Live Support Chat Script" loading="lazy" width="870px" height="870px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg" alt="PHP Live Support Chat Script" loading="lazy" width="650px" height="650px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg" alt="PHP Live Support Chat Script" loading="lazy" width="380px" height="380px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7477/image-upload/php-live-support-chat-6905905.jpg 2x"></a></figure>
<h3>3. <a href="https://codecanyon.net/item/totaldesk/20502693" target="_blank" rel="noopener">TotalDesk: Helpdesk, Live Chat, Knowledge Base and Ticket System</a>
</h3>
<p>TotalDesk is a complete help desk solution for your business. Not only does it let you make your own chat box, but it also includes a ticket and notification system, among other things. You can create a searchable knowledge base for your site's visitors, so they can solve common problems on their own. TotalDesk also integrates well with WooCommerce and Slack.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/totaldesk/20502693"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg" alt="TotalDesk Chat for Website PHP" loading="lazy" width="870px" height="498px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg" alt="TotalDesk Chat for Website PHP" loading="lazy" width="650px" height="374px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg" alt="TotalDesk Chat for Website PHP" loading="lazy" width="380px" height="222px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7477/image-upload/totaldesk-20502693.jpg 2x"></a></figure>
<h3>4. <a href="https://codecanyon.net/item/xerochat-complete-messenger-marketing-software-for-facebook/24477224" target="_blank" rel="noopener">XeroChat: Facebook Chatbot, eCommerce and Social Media Management Tool</a>
</h3>
<p>If Facebook Messenger is part of your business's marketing strategy, you'll want to learn about XeroChat. It's designed with the messaging platform in mind and integrates well with it. This online chat PHP script lets you build responsive and interactive chatbots with ease. It's so fully featured that you can even set up eCommerce stores with the included code. Add XeroChat to your online business strategies.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/xerochat-complete-messenger-marketing-software-for-facebook/24477224"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg" alt="XeroChat Simple PHP Chat Box" loading="lazy" width="870px" height="757px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg" alt="XeroChat Simple PHP Chat Box" loading="lazy" width="650px" height="566px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg" alt="XeroChat Simple PHP Chat Box" loading="lazy" width="380px" height="332px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7477/image-upload/xerochat-complete-messenger-marketing-software-for-facebook-24477224.jpg 2x"></a></figure>
<h3>5. <a href="https://codecanyon.net/item/support-board-chat-and-help-desk/20752085" target="_blank" rel="noopener">Chat Support Board: PHP Chat Application</a>
</h3>
<p>Finally, there's Support Board, a PHP chat script that uses artificial intelligence to help serve your customers. Communicate directly with your audience with ease thanks to its smooth integration with other platforms. You'll save time and increase engagement with this simple PHP chat box.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/support-board-chat-and-help-desk/20752085"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg" alt="Support Board Online Chat PHP" loading="lazy" width="870px" height="925px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg" alt="Support Board Online Chat PHP" loading="lazy" width="650px" height="691px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg" alt="Support Board Online Chat PHP" loading="lazy" width="380px" height="403px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2660/posts/7477/image-upload/support-board-chat-and-help-desk-20752085.jpg 2x"></a></figure>
<h2>Even More PHP Script Templates</h2>
<p>PHP forms and scripts are a great way to round out your website. If you're looking for more templates that will save you time, check out some of these items from Envato:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/best-php-help-desk-scripts--cms-30638"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/30638/preview_image/email%20marketing.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">14 Best PHP Help-Desk Scripts and 5 Free Options </div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-crm-project-management-php-scripts--cms-28943"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/28943/preview_image/mobile%20business%20app%20template.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">12 Best CRM &amp; Project Management PHP Scripts (+ 3 Free)</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/10-best-php-chat-scripts-on-codecanyon--cms-36412"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36412/preview_image/side-view-of-young-customer-service-agent-working--7PFJ3YS.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">10 Best PHP Chat Scripts on CodeCanyon</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/15-best-php-calendar-booking-events-scripts--cms-28635"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28635/preview_image/calendar.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28635/preview_image/calendar.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">11 Best PHP Event Calendar and Booking Scripts... and 3 Free Options</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
</ul>
<h2>Learn About PHP Scripts From Envato Tuts+</h2>
<p>Are you looking to learn even more about the PHP scripting language? Then Envato Tuts+ is the best place to start (and finish). Our talented instructors have put together many PHP courses, tutorials, and guides that you can use to grow your knowledge base. Here are a few to get you started:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/32314/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/32314/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/32314/preview_image/PHP.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/32314/preview_image/PHP.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/32314/preview_image/PHP.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/32314/preview_image/PHP.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create a Contact Form in PHP</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-replace-strings-in-php--cms-36505"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36505/preview_image/cat-playing-with-a-string-on-a-hardwood-floor-debb-U7MH8W5.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Replace Strings in PHP</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-use-php-in-html-code--cms-34378"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/34378/preview_image/web%20dev.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/34378/preview_image/web%20dev.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/34378/preview_image/web%20dev.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/34378/preview_image/web%20dev.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/34378/preview_image/web%20dev.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/34378/preview_image/web%20dev.jpg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Use PHP in HTML</div>
<div class="roundup-block__author">Sajal Soni</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-work-with-cookies-in-php--cms-36575"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/posts/36575/preview_image/cookies.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/posts/36575/preview_image/cookies.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/413/posts/36575/preview_image/cookies.jpeg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/413/posts/36575/preview_image/cookies.jpeg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/413/posts/36575/preview_image/cookies.jpeg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/413/posts/36575/preview_image/cookies.jpeg 2x"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">How to Work With Cookies in PHP</div>
<div class="roundup-block__author">Sajal Soni</div></a></li>
</ul>
<h2>Finished</h2>
<p>We are finished! I hope that you learned how a basic chat system works, and if you have any suggestions on anything, I'll happily welcome them. This chat system is a simple as you can get with a chat application. You can work off this and build multiple chat rooms, add an administrative back end, add emoticons, etc. The sky is the limit!</p>
<p>Also, if you need a professional app or plugin for your next project, you can take a look at one of the many <a href="https://codecanyon.net/tags/chat" target="_self">chat scripts</a> we have for sale on CodeCanyon.</p>
<p>Below are a few links you might want to check out if you are thinking of expanding this chat application:</p>
<ul>
<li>
<a href="https://code.tutsplus.com/tutorials/secure-your-forms-with-form-keys--net-4753" target="_self">Secure Your Forms With Form Keys</a>: prevent XSS (cross-site scripting) and cross-site request forgery.</li>
<li>
<a href="https://code.tutsplus.com/tutorials/submit-a-form-without-page-refresh-using-jquery--net-59" target="_self">Submit a Form Without Page Refresh Using jQuery</a>: expand on our AJAX request.</li>
<li>
<a href="https://code.tutsplus.com/articles/how-to-make-ajax-requests-with-raw-javascript--net-4855" target="_self">How to Make AJAX Requests With Raw JavaScript:</a> learn how requests work behind the scenes with raw JavaScript.</li>
</ul>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App" loading="lazy" width="870px" height="697px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App" loading="lazy" width="650px" height="522px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png" alt="How to Create Online Chat Application in PHP Tutorial Tutsplus Chat App" loading="lazy" width="380px" height="307px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36336/image-upload/tutsplus_chat_app.png 2x"></figure>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a> and <a href="https://tutsplus.com/authors/nathan-umoh" target="_self">Nathan Umoh</a>. Monty is a full-stack developer who also loves to write tutorials, and to learn about new JavaScript libraries. </em><em>Nathan is a staff writer for Envato Tuts+.</em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-05-06T11:45:22+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[30 Popular WordPress User Interface Elements]]></title>
      <link>//shineyrock.com/blog/read/30-popular-wordpress-user-interface-elements</link>
      <guid>https://shineyrock.com/blog/read/30-popular-wordpress-user-interface-elements#When:11:46:47Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Are you looking for interfaces that will help your WordPress website run smoothly?</p>
<p>User interface elements are one of the most important parts of your website's design. They help your users understand what your website is about and provide a way for them to interact with it. </p>
<p>The feature-rich user interface plugins that are offered on CodeCanyon and Envato Elements will help you to create a visually appealing and fully functional website. </p>
<p>With these premium WordPress interface elements, you will be able to:</p>
<ul>
<li>create nested menus</li>
<li>add customizable popups</li>
<li>create eye-catching timelines</li>
<li>showcase your media through sliders and carousels </li>
</ul>
<figure class="post_image"><a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="870px" height="456px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="650px" height="343px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="380px" height="205px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"></a>
<figcaption>UberChart is one of the user interface plugins available on CodeCanyon and Envato Elements.</figcaption>
</figure>
<p>Before you head over to <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a> and <a href="https://elements.envato.com/wordpress/plugins/user+interface/properties-responsive+retina-ready/sort-by-popular" target="_blank" rel="noopener">Envato Elements</a> to find the right user interface plugin to make your website even more user-friendly, let's explore the benefits of a <a href="https://elements.envato.com/subscribe/create-account" target="_blank" rel="noopener">monthly subscription to Envato Elements</a>. </p>
<h2>Envato Elements: Unlimited Downloads</h2>
<p>Envato Elements is a service that provides an <a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">unlimited download subscription</a>, meaning that you are free to download as many items as you like from millions of digital assets. This includes premium WordPress themes and plugins, stock photography, royalty-free audio, stock video, and graphics.</p>
<p>The subscription is covered by simple commercial licensing that gives you the rights to use the item in a broad variety of projects, including those of a commercial nature.</p>
<p>The licensing is future-proof, meaning even if you unsubscribe and can't download items from Envato Elements any more, any existing uses that you registered are still covered.</p>
<figure class="post_image"><a href="https://elements.envato.com/"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="870px" height="520px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="650px" height="391px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="380px" height="232px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"></a></figure>
<p><a class="call-to-action-btn call-to-action-btn-primary" href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self" rel>Subscribe Today</a> </p>
<p><a href="https://elements.envato.com/pricing?ec_promo=post_cta&amp;ec_unit=primary" target="_self">Subscribe today</a> and start creating or learn more about why <a href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702" target="_self">Envato Elements is Great for WordPress Developers</a>! </p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">40 Reasons Envato Elements Is Great for WordPress Developers</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<h2>WordPress User Interface Elements on Envato Elements </h2>
<h3>1. <a href="https://elements.envato.com/smooth-scrolling-for-wordpress-theme-732D8X6" target="_blank" rel="noopener">Smooth Scrolling for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/smooth-scrolling-for-wordpress-theme-732D8X6"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg" alt="Smooth Scrolling for WordPress" loading="lazy" width="870px" height="581px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg" alt="Smooth Scrolling for WordPress" loading="lazy" width="650px" height="436px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg" alt="Smooth Scrolling for WordPress" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/D2F7DBEC-1ECA-4F98-8C52-E0E11705B17F.jpeg 2x"></a></figure>
<p>This WordPress interface element gives visitors an incredibly smooth experience when scrolling through your website.</p>
<p>Features included:</p>
<ul>
<li>lightweight and fast</li>
<li>native JavaScript without jQuery</li>
<li>suitable for all kinds of layouts</li>
<li>automatic detection of mobile devices</li>
<li>works both for the entire website and for individual pages.</li>
<li>all major browsers supported: Chrome, Firefox, Safari, Edge, Internet Explorer, Opera</li>
<li>compatible with major WP plugins: Yoast SEO, Contact Form 7, WooCommerce, BuddyPress </li>
<li>works with popular website page builders: Elementor, WPBakery, Gutenberg, etc.</li>
</ul>
<h3>2. <a href="https://elements.envato.com/page-preview-plugin-for-wordpress-RW5Q7H6" target="_blank" rel="noopener">Page Preview Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/page-preview-plugin-for-wordpress-RW5Q7H6"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg" alt="Page preview plugin for WordPress" loading="lazy" width="870px" height="579px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg" alt="Page preview plugin for WordPress" loading="lazy" width="650px" height="434px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg" alt="Page preview plugin for WordPress" loading="lazy" width="380px" height="257px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/CD39E73A-C0C0-4F04-A35E-86A5423C5E29.jpeg 2x"></a></figure>
<p>This plugin allows users to see the contents of a post in a popup window before going to the page. This is incredibly convenient for WordPress sites with a large number of articles. </p>
<p>You can easily control the display of featured images, excerpt size, and the position of information about the author, category, and the comments count.</p>
<p>Features include:</p>
<ul>
<li>multiple popup styles</li>
<li>five beautiful initial animations</li>
<li>built-in interface for binding the plugin to categories and single page</li>
<li>included pot file for quick translation on any language</li>
<li>perfect for RTL direction</li>
</ul>
<h3>3. <a href="https://elements.envato.com/tabs-for-elementor-E3YMYP4" target="_blank" rel="noopener">Tabs for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/tabs-for-elementor-E3YMYP4"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg" alt="Tabs for Elementor " loading="lazy" width="870px" height="585px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg" alt="Tabs for Elementor " loading="lazy" width="650px" height="439px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg" alt="Tabs for Elementor " loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/96E81029-E258-4B6D-875A-8D79161209B7.jpeg 2x"></a></figure>
<p>This plugin for Elementor allows you to quickly and easily create responsive tabs with any content. The tabs are responsive, so they work on all devices. </p>
<p>You can display the tabs in any possible style like at the top, bottom, left, right, or even custom positions. You can also add images, audio, video, or shortcodes to the tab content.  </p>
<p>Other features of this tab widget for Elementor:</p>
<ul>
<li>adding icons or images for each tab</li>
<li>multiple tabs for one page and anywhere on the site</li>
<li>adjustable tabs content height</li>
<li>customizable fonts, colors, borders, backgrounds, etc.</li>
<li>WooCommerce compatibility</li>
</ul>
<h3>4. <a href="https://elements.envato.com/navigation-menu-for-elementor-J44KA39" target="_blank" rel="noopener">Navigation Menu for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/navigation-menu-for-elementor-J44KA39"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=766/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg" alt="Navigation Menu for Elementor" loading="lazy" width="786px" height="537px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1532/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg" alt="Navigation Menu for Elementor" loading="lazy" width="650px" height="445px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg" alt="Navigation Menu for Elementor" loading="lazy" width="380px" height="263px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/F8ACB000-59E6-4958-90FF-E79AAB0CB450.jpeg 2x"></a></figure>
<p>This plugin comes with everything you need to create a unique and user-friendly website navigation menu for mobile, tablet, or desktop. You can simply add vertical or horizontal responsive menu blocks anywhere on your website page in just a few clicks. The menus work well across all browsers. </p>
<p>Features included:</p>
<ul>
<li>customizable mobile menu </li>
<li>supports horizontal or vertical layout</li>
<li>custom mobile menu logo</li>
<li>flexible settings of a submenu display position</li>
<li>included POT file for quick translation on any language</li>
<li>perfect for RTL direction</li>
<li>works well with all WordPress themes built on Elementor</li>
<li>SEO-friendly</li>
<li>WooCommerce compatibility</li>
</ul>
<h3>5. <a href="https://elements.envato.com/price-list-for-elementor-T3BVFA2" target="_blank" rel="noopener">Price List for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/price-list-for-elementor-T3BVFA2"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg" alt="Price List for Elementor" loading="lazy" width="870px" height="582px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg" alt="Price List for Elementor" loading="lazy" width="650px" height="437px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg" alt="Price List for Elementor" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/18C45258-A1F5-4BC0-A762-748F4D8D64E3.jpeg 2x"></a></figure>
<p>This plugin allows you to create attractive pricelists and price tables for the pricing page on your website. You can create outstanding customizable price blocks, add the information to the necessary fields, and display it both horizontally and vertically. </p>
<p>Features include:</p>
<ul>
<li>five pricing templates </li>
<li>customizable pricing layout</li>
<li>text and background gradient</li>
<li>flexible style settings for price elements</li>
<li>includes design layouts for Photoshop, Sketch, Figma, and Adobe XD</li>
<li>works well with all WordPress themes built on Elementor</li>
</ul>
<h3>6. <a href="https://elements.envato.com/image-slider-for-wpbakery-QR4G63Y" target="_blank" rel="noopener">Image Slider for WPBakery</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/image-slider-for-wpbakery-QR4G63Y/preview"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg" alt="Image Slider for WPBakery" loading="lazy" width="870px" height="587px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg" alt="Image Slider for WPBakery" loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg" alt="Image Slider for WPBakery" loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/F4FACCC6-D6CC-4113-AA37-771BC7CCBD08.jpeg 2x"></a></figure>
<p>This plugin allows you to create slides and slide-sets for your website in order to make it more engaging and interactive. </p>
<p>Features included:</p>
<ul>
<li>two slider elements with different types of displays </li>
<li>add and display custom content to slide</li>
<li>customizable slider height</li>
<li>flexible content settings</li>
<li>ability to manage the number of columns for different devices</li>
</ul>
<h3>7. <a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ" target="_blank" rel="noopener">Accordion Slider PRO </a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="870px" height="535px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="650px" height="402px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg" alt="Accordion Slider PRO - Responsive WordPress Plugin" loading="lazy" width="380px" height="238px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/1468546C-2401-40AA-BF0B-11549BD1C7ED.jpeg 2x"></a></figure>
<p><a href="https://elements.envato.com/accordion-slider-pro-responsive-wordpress-plugin-CVEG4LJ" target="_blank" rel="noopener">Accordion Slider PRO</a> is a full-featured, fully responsive, and touch-enabled accordion slider plugin. It offers a modern, intuitive, and engaging user experience. It works on both iOS and Android devices. </p>
<p>Here is a list of this plugin's top features:</p>
<ul>
<li>multiple accordions on your website or on the same page</li>
<li>multimedia support—images, YouTube video, and Vimeo video</li>
<li>lightbox support—images and videos will be opened in a lightbox window</li>
<li>share the large image opened in the lightbox on Facebook, Twitter, or Pinterest</li>
<li>supports deep linking to an image which will be opened in lightbox automatically</li>
<li>SEO—description for each image which will be indexed by the search engines</li>
</ul>
<h3>8. <a href="https://elements.envato.com/wordpress-pro-event-calendar-WWJN4K7" target="_blank" rel="noopener">WordPress Pro Event Calendar</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-pro-event-calendar-WWJN4K7"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="870px" height="585px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="650px" height="439px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg" alt="WordPress Pro Event Calendar" loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/531DCA9F-21B7-4210-B92D-728201C04B55.jpeg 2x"></a></figure>
<p>The Pro Event Calendar plugin adds a professional and sleek calendar to your posts or pages. Features include:</p>
<ul>
<li>100% responsive</li>
<li>easy to manage events</li>
<li>let users submit events from the front end</li>
<li>add special dates to your calendar, like holidays</li>
<li>allow users to book events</li>
<li>export bookings list to Excel (XLS)</li>
<li>limit the number of bookings in an event</li>
<li>Google Maps support</li>
</ul>
<h3>9. <a href="https://elements.envato.com/loading-progress-bar-for-wordpress-XAKYQGG" target="_blank" rel="noopener">Loading Progress Bar for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/loading-progress-bar-for-wordpress-XAKYQGG"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg" alt="Loading Progress Bar for WordPress" loading="lazy" width="870px" height="533px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg" alt="Loading Progress Bar for WordPress" loading="lazy" width="650px" height="400px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg" alt="Loading Progress Bar for WordPress" loading="lazy" width="380px" height="237px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/B84356C5-EB0C-4634-AFA0-85ADB6E407E1.jpeg 2x"></a></figure>
<p>This plugin adds a "page loading" progress bar to your website. The plugin automatically detects the loading progress percentage and indicates it on the progress bar. You can use any color or gradient for the bar and display it in a convenient place on the page.</p>
<h3>10. <a href="https://elements.envato.com/wordpress-author-box-for-elementor-68YG8ZA" target="_blank" rel="noopener">WordPress Author Box for Elementor</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-author-box-for-elementor-68YG8ZA"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg" alt="WordPress Author Box for Elementor" loading="lazy" width="870px" height="605px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg" alt="WordPress Author Box for Elementor" loading="lazy" width="650px" height="454px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg" alt="WordPress Author Box for Elementor" loading="lazy" width="380px" height="268px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/9C905424-39FF-4FFB-BA16-A0512B7890BB.jpeg 2x"></a></figure>
<p>When your website content is linked to an actual person, it increases the level of interest and engagement of your visitors. The Author Box WordPress plugin allows you to introduce the author of the posts in a nice author info box. This allows readers to learn more about the authors and contact them personally through social media or other available means of communication. </p>
<h2>The Best WordPress User Interface Plugins on CodeCanyon</h2>
<p>Browse through over 7,000 of the highest-quality WordPress plugins ever created on CodeCanyon. With a low-cost one-time payment, you can purchase these high-quality WordPress plugins and improve your website experience for you and your visitors. </p>
<p>Here are some of the best-selling user interface WordPress plugins on <a href="https://codecanyon.net/search/email%20woocommerce?sort=sales#content" target="_self">CodeCanyon</a> for 2021.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1809/posts/34520/image/UI.jpg" alt="Best Selling WordPress Interface Elements" loading="lazy" width="870px" height="557px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1809/posts/34520/image/UI.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1809/posts/34520/image/UI.jpg" alt="Best Selling WordPress Interface Elements" loading="lazy" width="650px" height="418px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1809/posts/34520/image/UI.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1809/posts/34520/image/UI.jpg" alt="Best Selling WordPress Interface Elements" loading="lazy" width="380px" height="247px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1809/posts/34520/image/UI.jpg 2x"></a>
<figcaption><a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">Browse CodeCanyon for the best-selling WordPress user interface plugins available</a></figcaption>
</figure>
<h2>Top 20 WordPress User Interface Plugins (From CodeCanyon for 2021)</h2>
<p>In today's digital world, website users are accustomed to seeing and interacting with modern user interfaces. These elements will help your website be more user-friendly.</p>
<h3>
<span class="sectionnum">1.</span> <a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" target="_blank" rel="external noopener">UberMenu: WordPress Mega Menu Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg" alt="UberMenu - WordPress Mega Menu Plugin" loading="lazy" width="870px" height="492px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg" alt="UberMenu - WordPress Mega Menu Plugin" loading="lazy" width="650px" height="370px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg" alt="UberMenu - WordPress Mega Menu Plugin" loading="lazy" width="380px" height="220px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/3C23908D-E730-41EE-9BED-1F3F3322D360.jpeg 2x"></a></figure>
<p>Mega menus are a WordPress user interface element that I really like but can be difficult to implement. But it's easy with the UberMenu WordPress mega menu plugin!</p>
<ul>
<li>enhanced mobile experience</li>
<li>easily add images and icons</li>
<li>build beautiful menu layouts</li>
<li>columns, rows, maps, forms, and more</li>
</ul>
<p>Tabbed submenus? Google Fonts? Vertical or horizontal? <a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" target="_blank" rel="external noopener">UberMenu</a> has it all.</p>
<h3>
<span class="sectionnum">2.</span> <a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380" target="_blank" rel="external noopener">Slider Revolution Responsive WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg" alt="Slider Revolution Responsive WordPress Plugin" loading="lazy" width="870px" height="524px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg" alt="Slider Revolution Responsive WordPress Plugin" loading="lazy" width="650px" height="394px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg" alt="Slider Revolution Responsive WordPress Plugin" loading="lazy" width="380px" height="233px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/5B0F816B-2C8F-46EB-99ED-6E6F1E712F51.jpeg 2x"></a></figure>
<p>When you need a slider—especially if you want an easy way to build it—you have to consider the Slider Revolution Responsive WordPress Plugin.</p>
<ul>
<li>animations, color pickers, layers—it's got them all baked in.</li>
<li>social media feeds</li>
<li>media galleries</li>
<li>hero blocks</li>
<li>carousels</li>
<li>sliders</li>
<li>and more</li>
</ul>
<p>The number one feature that makes this slider appealing is the powerful visual editor. Sliders are sliders, but the <a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380" target="_blank" rel="external noopener">Slider Revolution Responsive WordPress Plugin</a> brings a complete, robust slide designer suite.</p>
<h3>3. <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" target="_blank" rel="noopener">Green Popups</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png" alt="Green Popups " loading="lazy" width="870px" height="454px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png" alt="Green Popups " loading="lazy" width="650px" height="342px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png" alt="Green Popups " loading="lazy" width="380px" height="204px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36435/image-upload/35C2CC67-B6D1-4B92-BEB6-8B611DA214A9.png 2x"></a></figure>
<p>As much as I hate popups, sometimes you just need a popup. The Popup Plugin for WordPress is the easiest way to build and display popups on your WordPress site.</p>
<p>Features include, but are certainly not limited to:</p>
<ul>
<li>jQuery and CSS3 animations</li>
<li>social network integration</li>
<li>A/B campaign stats</li>
<li>200+ popup library</li>
<li>mobile-friendly design</li>
</ul>
<p>Popups can be triggered by <code class="inline">onLoad</code>, <code class="inline">onScroll</code>, <code class="inline">onClick</code>, <code class="inline">onExit</code>, or <code class="inline">onIdle</code> events.</p>
<p>And also features:</p>
<ul>
<li>sidebar widget</li>
<li>link locker</li>
<li>inline form</li>
<li>and more</li>
</ul>
<p><a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" target="_blank" rel="external noopener">Green Popups</a> is a robust solution that looks great to users and proves useful for admins.</p>
<h3>
<span class="sectionnum">4.</span> <a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256" target="_blank" rel="external noopener">Cool Timeline Pro: WordPress Timeline Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg" alt="Cool Timeline Pro" loading="lazy" width="870px" height="414px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg" alt="Cool Timeline Pro" loading="lazy" width="650px" height="312px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg" alt="Cool Timeline Pro" loading="lazy" width="380px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/1EA915A1-024A-459F-AEA7-A5DE22F29FCF.jpeg 2x"></a></figure>
<p>Add a timeline to blog posts, organization history pages, and more with the Cool Timeline Pro plugin. Create both horizontal and vertical timelines with its built-in designs and beautiful animation effects.</p>
<ul>
<li>convert any post type into a timeline</li>
<li>pagination for long timelines</li>
<li>create multiple timelines</li>
<li>add icons</li>
<li>simple, clean, and flexible</li>
</ul>
<p>The <a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256" target="_blank" rel="external noopener">Cool Timeline Pro WordPress Timeline Plugin</a> is a great way to build a timeline from your current content or to create a new, standalone timeline to help communicate to your reader.</p>
<h3>
<span class="sectionnum">5.</span> <a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863" target="_blank" rel="external noopener">Responsive FlipBook Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg" alt="Responsive FlipBook Plugin" loading="lazy" width="870px" height="679px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg" alt="Responsive FlipBook Plugin" loading="lazy" width="650px" height="508px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg" alt="Responsive FlipBook Plugin" loading="lazy" width="380px" height="299px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/9C84E3CB-18DD-424C-BA67-85888184369A.jpeg 2x"></a></figure>
<p>Deliver web content within a beautiful UI with this incredible WordPress plugin.</p>
<p>At first glance, the Responsive FlipBook Plugin looks like a nice way to display content with its cool bookshelf design. But it's <em>so</em> much more.</p>
<p>Features include:</p>
<ul>
<li>mobile zoom</li>
<li>PDF wizard</li>
<li>easy print</li>
<li>lazy load</li>
<li>and more!</li>
</ul>
<p>Create and present a complete collection of online eBooks with the <a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863" target="_blank" rel="external noopener">Responsive FlipBook Plugin</a>. It's pretty amazing.</p>
<h3>
<span class="sectionnum">6.</span> <a href="https://codecanyon.net/item/superfly-responsive-wordpress-menu-plugin/8012790" target="_blank" rel="external noopener">Superfly: Responsive WordPress Menu Plugin</a>
</h3>
<p>Replace your current WordPress menu or enhance it with the Superfly responsive menu plugin. This plugin is power packed and easy to use.</p>
<p>Menu design options include:</p>
<ul>
<li>side, skewed, and fullscreen menus</li>
<li>image backgrounds</li>
<li>static or anchored</li>
<li>icon bar</li>
<li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/superfly-responsive-wordpress-menu-plugin/8012790" target="_blank" rel="external noopener">Superfly Responsive WordPress Menu Plugin</a> also includes display options, making it super easy to build the right menu for the right user interface.</p>
<h3>
<span class="sectionnum">7.</span> <a href="https://codecanyon.net/item/the-team-pro-team-showcase-wordpress-plugin/17521235" target="_blank" rel="external noopener">The Team Pro: Team Showcase WordPress Plugin</a>
</h3>
<p>The Team Pro team showcase WordPress plugin claims to be “the most versatile WordPress plugin available to create and manage your Team page.”</p>
<p>I think they're right.</p>
<ul>
<li>slide-ins</li>
<li>drawer</li>
<li>circles</li>
<li>modal</li>
<li>table</li>
<li>cards</li>
<li>grid</li>
<li>list</li>
</ul>
<p>With these 8 presets, over 20 style options, and clean designs, your team never looked so good with <a href="https://codecanyon.net/item/the-team-pro-team-showcase-wordpress-plugin/17521235" target="_blank" rel="external noopener">The Team Pro WordPress plugin</a>.</p>
<h3>
<span class="sectionnum">8.</span> <a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719" target="_blank" rel="external noopener">Progress Map WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg" alt="Progress Map Wordpress Plugin" loading="lazy" width="870px" height="561px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg" alt="Progress Map Wordpress Plugin" loading="lazy" width="650px" height="421px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg" alt="Progress Map Wordpress Plugin" loading="lazy" width="380px" height="249px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/DCF51028-D26E-4A27-8CC7-425C31E2AF4B.jpeg 2x"></a></figure>
<p>The Progress Map WordPress Plugin is feature-rich. I most certainly can't do it justice with this short summary. The vision behind this WordPress user interface plugin is this:</p>
<blockquote>
<p>“The aim is to help users having websites like hotel listings, real estate listings, restaurant listings, job listings, store listings &amp; more… to list their locations on Google map and to easily navigate through the map using a carousel.”</p>
</blockquote>
<ul>
<li>search filter and distance search</li>
<li>custom post type support</li>
<li>custom markers</li>
<li>70+ map styles</li>
<li>geo-targeting</li>
<li>retina ready</li>
<li>and much, much more</li>
</ul>
<p><a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719" target="_blank" rel="external noopener">Progress Map WordPress Plugin</a> is easily one of the most robust map plugins you're going to find. </p>
<h3>
<span class="sectionnum">9.</span> <a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163" target="_blank" rel="external noopener">Content Timeline: Responsive WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg" alt="Content Timeline - Responsive WordPress Plugin for Displaying Posts/Categories in a Sliding Timeline" loading="lazy" width="870px" height="527px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg" alt="Content Timeline - Responsive WordPress Plugin for Displaying Posts/Categories in a Sliding Timeline" loading="lazy" width="650px" height="396px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg" alt="Content Timeline - Responsive WordPress Plugin for Displaying Posts/Categories in a Sliding Timeline" loading="lazy" width="380px" height="235px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/851FC9A4-A575-41E4-981F-27CC15C749F0.jpeg 2x"></a></figure>
<p>This WordPress user interface is unique, and I love it! The Content Timeline plugin is the perfect solution for a large array of content presentation types.</p>
<ul>
<li>fully responsive with swipe function</li>
<li>7 embedded script control methods</li>
<li>11 settings for easy customization</li>
<li>keyboard bindings</li>
<li>and more!</li>
</ul>
<p>Your timeline doesn't have to be a single string, either. This plugin allows for more than one element per spot in your timeline.</p>
<p>The <a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163" target="_blank" rel="external noopener">Content Timeline</a> plugin is unique, beautifully designed, and the perfect WordPress user interface for presenting in a timeline format.</p>
<h3>
<span class="sectionnum">10.</span> <a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" target="_blank" rel="external noopener">Testimonials Showcase WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="870px" height="510px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="650px" height="383px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="380px" height="228px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/7C60FFEE-1A8D-4C7D-9F1A-9D1B6067233F.jpeg 2x"></a></figure>
<p>Display and manage your client, customer, and supporter testimonials easily with the Testimonials Showcase WordPress plugin. Testimonials never looked so good. </p>
<p>Features you will find include:</p>
<ul>
<li>over 15 layout customization options</li>
<li>grid or slider layout</li>
<li>star rating system</li>
<li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" target="_blank" rel="external noopener">Testimonials Showcase WordPress Plugin</a> also includes front-end submissions.</p>
<h3>11. <a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018" target="_self">Team Builder</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg" alt="Team Builder" loading="lazy" width="870px" height="355px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg" alt="Team Builder" loading="lazy" width="650px" height="268px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg" alt="Team Builder" loading="lazy" width="380px" height="162px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/5B8FE86A-1646-4733-A6D7-45F4EDE301B8.jpeg 2x"></a></figure>
<p>Here are a few notable features of this plugin:</p>
<ul>
<li>grid, slider, table, and widget support</li>
<li>drag and drop builder</li>
<li>skill and stat bars</li>
<li>social icons bar</li>
</ul>
<p>Add this plugin to your website <a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018" target="_self">today</a>!</p>
<h3>
<span class="sectionnum">12.</span> <a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662" target="_blank" rel="external noopener">UberChart: WordPress Chart Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="870px" height="456px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="650px" height="343px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg" alt="UberChart - WordPress Chart Plugin" loading="lazy" width="380px" height="205px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/89710D46-0FCE-488E-BB66-61CB6E69791A.jpeg 2x"></a></figure>
<p>If you want to share data visually, you'd be hard-pressed to find a better way to build and present it than the UberChart plugin.</p>
<p>It's highly customizable and ready to drop into your WordPress install.</p>
<p>Its feature set includes:</p>
<ul>
<li>240 customizable options for each chart</li>
<li>embedded spreadsheet editor</li>
<li>import and export data</li>
<li>fully responsive</li>
</ul>
<p>And it includes ten different chart types: line, area, bar, horizontal bar, pie, doughnut, radar, polar area, scatter, and bubble.</p>
<p><a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662" target="_blank" rel="external noopener">UberChart WordPress Chart Plugin</a> is impressive.</p>
<h3>
<span class="sectionnum">13. </span><a href="https://codecanyon.net/item/kreatura-slider-plugin-for-wordpress/1362246" target="_blank" rel="noopener">Kreatura Slider Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/kreatura-slider-plugin-for-wordpress/1362246"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg" alt="Kreatura Slider Plugin for WordPress" loading="lazy" width="870px" height="547px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg" alt="Kreatura Slider Plugin for WordPress" loading="lazy" width="650px" height="411px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg" alt="Kreatura Slider Plugin for WordPress" loading="lazy" width="380px" height="243px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/99E8C4F1-EAF3-45D1-AD72-76F1B23B3FDB.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/kreatura-slider-plugin-for-wordpress/1362246" target="_blank" rel="noopener">Kreatura Slider Plugin</a> was built with user experience in mind. This plugin is a fully responsive and touch-enabled WordPress slider plugin that allows you to create professional and elegant sliders. The slider plugin focuses on simplicity and performance, while still providing a wide range of customization possibilities.</p>
<p>Here are a few of the plugin's features: </p>
<ul>
<li>animated layers</li>
<li>carousel layout</li>
<li>infinite scrolling</li>
<li>SEO friendly</li>
</ul>
<h3>
<span class="sectionnum">14.</span> <a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518" target="_blank" rel="external noopener">Slick Menu: Responsive WordPress Vertical Menu</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg" alt="Slick Menu - Responsive WordPress Vertical Menu" loading="lazy" width="870px" height="696px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg" alt="Slick Menu - Responsive WordPress Vertical Menu" loading="lazy" width="650px" height="521px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg" alt="Slick Menu - Responsive WordPress Vertical Menu" loading="lazy" width="380px" height="306px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/3E8BB556-B7A6-4B96-8EB9-4C3DDCB37DD2.jpeg 2x"></a></figure>
<p>Slick. Responsive. Vertical. Menu.</p>
<p>The Slick Menu is exactly that, with a little extra on the side.</p>
<p>Customize your:</p>
<ul>
<li>background colors</li>
<li>custom fonts</li>
<li>patterns</li>
<li>overlays</li>
<li>images</li>
<li>videos</li>
<li>and more</li>
</ul>
<p>Each level is independently customizable, making it super easy to build great WordPress user interfaces without expensive design apps or code knowledge. </p>
<p><a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518" target="_blank" rel="external noopener">Slick Menu</a> is an awesome option for vertical menus and more!</p>
<h3>
<span class="sectionnum">15.</span> <a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671" target="_blank" rel="external noopener">LoftLoader Pro: Preloader Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png" alt="LoftLoader Pro - Preloader Plugin for WordPress" loading="lazy" width="870px" height="509px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png" alt="LoftLoader Pro - Preloader Plugin for WordPress" loading="lazy" width="650px" height="382px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png" alt="LoftLoader Pro - Preloader Plugin for WordPress" loading="lazy" width="380px" height="227px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/4E8B54AC-C917-43EB-93EB-AF72553E596B.png 2x"></a></figure>
<p>Sometimes you need more time for something to load. Videos? Lots of HD images? Easily add a loading animation to your pages with the LoftLoader Pro Preloader Plugin for WordPress.</p>
<p>It's pretty fancy.</p>
<ul>
<li>adjust minimum load time</li>
<li>18 CSS3 animations</li>
<li>works on all devices</li>
<li>built-in editor</li>
<li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671" target="_blank" rel="external noopener">LoftLoader Pro</a> plugin makes it easy to add an animated loading screen—no coding required.</p>
<h3>
<span class="sectionnum">16.</span> <a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673" target="_blank" rel="external noopener">Ultra WordPress Admin Theme</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg" alt="Ultra WordPress Admin Theme" loading="lazy" width="870px" height="658px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg" alt="Ultra WordPress Admin Theme" loading="lazy" width="650px" height="493px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg" alt="Ultra WordPress Admin Theme" loading="lazy" width="380px" height="290px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36679/image-upload/E3289C2A-A09B-4B14-8963-A0E0948080F8.jpeg 2x"></a></figure>
<p>There's customizing the WordPress Admin. And then there's the Ultra WordPress Admin Theme.</p>
<p>This WordPress user interface takes admin customizations to a whole new level.</p>
<ul>
<li>admin menu management</li>
<li>create your own theme</li>
<li>import/export settings</li>
<li>and much, much more</li>
</ul>
<p>From the login screen to the top admin bar, the <a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673" target="_blank" rel="external noopener">Ultra WordPress Admin Theme</a> makes the entire WordPress Admin experience fully customizable.</p>
<h3>
<span class="sectionnum">17.</span> <a href="https://codecanyon.net/item/different-menu-in-different-pages/7857908" target="_blank" rel="noopener">Different Menu]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-04-27T11:46:47+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Top 18 Best Practices for Writing Super Readable Code]]></title>
      <link>//shineyrock.com/blog/read/top-18-best-practices-for-writing-super-readable-code</link>
      <guid>https://shineyrock.com/blog/read/top-18-best-practices-for-writing-super-readable-code#When:14:38:56Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Code readability is fundamental for development—it is key to maintainability and working together with a team. This article will detail the 18 most important best practices when writing readable code. </p>
<h2>
<span class="sectionnum">1.</span> Commenting &amp; Documentation</h2>
<p>IDEs (Integrated Development Environments) and code editors have come a long way in the past few years. This has made commenting your code more useful than ever. Following certain standards in your comments allows IDEs and other tools to utilize them in different ways.</p>
<p>Consider this example:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png" alt="VSCode User Comments" loading="lazy" width="870px" height="667px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png" alt="VSCode User Comments" loading="lazy" width="650px" height="500px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png" alt="VSCode User Comments" loading="lazy" width="380px" height="294px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36836/image-upload/vs_code_documentation.png 2x"></figure>
<p>The comments I added to the function definition can be previewed whenever I use that function, even from other files.</p>
<p>Here is another example where I call a function from a third-party library:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png" alt="VSCode 3rd Party documentation " loading="lazy" width="870px" height="474px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png" alt="VSCode 3rd Party documentation " loading="lazy" width="650px" height="356px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png" alt="VSCode 3rd Party documentation " loading="lazy" width="380px" height="212px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/36836/image-upload/vs_code_third_party.png 2x"></figure>
<p>In these particular examples, the type of commenting (or documentation) used is based on <a href="https://www.phpdoc.org/">PHPDoc</a>, and the IDE is <a href="https://code.visualstudio.com/download" target="_self">Visual Studio Code</a>.</p>
<h2>
<span class="sectionnum">2.</span> Consistent Indentation</h2>
<p>I assume you already know that you should indent your code. However, it's also worth noting that it is a good idea to keep your indentation style consistent.</p>
<p>There's more than one way of indenting code.</p>
<h4>Style 1</h4>
<pre class="brush: php noskimlinks noskimwords">function foo() {
	if ($maybe) {
		do_it_now();
		again();
	} else {
		abort_mission();
	}
	finalize();
}</pre>
<h4>Style 2</h4>
<pre class="brush: php noskimlinks noskimwords">function foo()
{
	if ($maybe)
	{
		do_it_now();
		again();
	}
	else
	{
		abort_mission();
	}
	finalize();
}</pre>
<h4>Style 3</h4>
<pre class="brush: php noskimlinks noskimwords">function foo()
{	if ($maybe)
	{	do_it_now();
		again();
	}
	else
	{	abort_mission();
	}
	finalize();
}</pre>
<p>I used to code in style 2 but recently switched to style 1. But that is only a matter of preference. There is no "best" style that everyone should be following. Actually, the best style is a consistent style. If you are part of a team or if you are contributing code to a project, you should follow the existing style that is being used in that project.</p>
<p>The indentation styles are not always completely distinct from one another. Sometimes, they mix different rules. For example, in <a href="https://pear.php.net/manual/en/standards.php">PEAR Coding Standards</a>, the opening bracket <code>"{"</code> goes on the same line as <a href="https://pear.php.net/manual/en/standards.control.php">control structures</a>, but they go to the next line after <a href="https://pear.php.net/manual/en/standards.funcdef.php">function definitions</a>.</p>
<p>PEAR Style:</p>
<pre class="brush: php noskimlinks noskimwords">function foo()
{                     // placed on the next line
    if ($maybe) {     // placed on the same line
        do_it_now();
        again();
    } else {
        abort_mission();
    }
    finalize();
}</pre>
<p>Also note that they are using four spaces instead of tabs for indentations.</p>
<p>On Wikipedia, you can see <a href="https://en.wikipedia.org/wiki/Indent_style" target="_self">samples of different indent styles</a>.</p>
<h2>
<span class="sectionnum">3.</span> Avoid Obvious Comments</h2>
<p>Commenting your code is fantastic; however, it can be overdone or just be plain redundant. Take this example:</p>
<pre class="brush: php noskimlinks noskimwords">// get the country code
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);

// if country code is US
if ($country_code == 'US') {

	// display the form input for state
	echo form_input_state();
}</pre>
<p>When the text is that obvious, it's really not productive to repeat it within comments.</p>
<p>If you must comment on that code, you can simply combine it to a single line instead:</p>
<pre class="brush: php noskimlinks noskimwords">// display state selection for US users
$country_code = get_country_code($_SERVER['REMOTE_ADDR']);
if ($country_code == 'US') {
	echo form_input_state();
}</pre>
<p>Comments should ideally explain why you were doing something the way you did it. If you have to write more than a one-line comment to explain what the code is doing, you should consider rewriting the code to be more readable.</p>
<h2>
<span class="sectionnum">4.</span> Code Grouping</h2>
<p>More often than not, certain tasks require a few lines of code. It is a good idea to keep these tasks within separate blocks of code, with some spaces between them.</p>
<p>Here is a simplified example:</p>
<pre class="brush: php noskimlinks noskimwords">// get list of forums
$forums = array();
$r = mysql_query("SELECT id, name, description FROM forums");
while ($d = mysql_fetch_assoc($r)) {
	$forums []= $d;
}

// load the templates
load_template('header');
load_template('forum_list',$forums);
load_template('footer');</pre>
<p>Adding a comment at the beginning of each block of code also emphasizes the visual separation.</p>
<h2>
<span class="sectionnum">5.</span> Consistent Naming Scheme</h2>
<p>PHP itself is sometimes guilty of not following consistent naming schemes:</p>
<ul>
<li>
<code>strpos()</code> vs. <code>str_split()</code>
</li>
<li>
<code>imagetypes()</code> vs. <code>image_type_to_extension()</code>
</li>
</ul>
<p>First of all, the names should have word boundaries. There are two popular options:</p>
<ul>
<li>
<strong>camelCase:</strong> The first letter of each word is capitalized, except the first word, like <code>parseRawImageData()</code>.</li>
<li>
<strong>underscores:</strong> Underscores between words, like <code>mysql_real_escape_string()</code>.</li>
</ul>
<p>Having different options creates a situation similar to the indent styles, as I mentioned earlier. If an existing project follows a certain convention, you should go with that. Also, some language platforms tend to use a certain naming scheme. For instance, in Java, most code uses camelCase names, while in PHP, the majority of code uses underscores.</p>
<p>These can also be mixed. Some developers prefer to use underscores for procedural functions and class names, but use camelCase for class method names:</p>
<pre class="brush: php noskimlinks noskimwords">class Foo_Bar {

	public function someDummyMethod() {

	}

}

function procedural_function_name() {

}</pre>
<p>So again, there is no obvious "best" style. Just be consistent.</p>
<h2>
<span class="sectionnum">6.</span> DRY Principle</h2>
<p>DRY stands for Don't Repeat Yourself. Also known as DIE: Duplication is Evil.</p>
<p>The principle states:</p>
<blockquote>
<p>"Every piece of knowledge must have a single, unambiguous, authoritative representation within a system." — <a href="https://en.wikipedia.org/wiki/Don%27t_repeat_yourself" target="_self">Wikipedia</a></p>
</blockquote>
<p>The purpose for most applications (or computers in general) is to automate repetitive tasks. This principle should be maintained in all code, even web applications. The same piece of code should not be repeated over and over again.</p>
<p>For example, most web applications consist of many pages. It's highly likely that these pages will contain common elements. Headers and footers are usually the best candidates for this. It's not a good idea to keep copying and pasting these headers and footers into every page. Instead, put that header and footer code in separate source files to be included wherever they are needed.</p>
<pre class="brush: php noskimlinks noskimwords">$this-&gt;load-&gt;view('includes/header');

$this-&gt;load-&gt;view($main_content);

$this-&gt;load-&gt;view('includes/footer');</pre>
<h2>
<span class="sectionnum">7.</span> Avoid Deep Nesting</h2>
<p>Too many levels of nesting can make code harder to read and follow.</p>
<pre class="brush: php noskimlinks noskimwords">function do_stuff() {

// ...

	if (is_writable($folder)) {

		if ($fp = fopen($file_path,'w')) {

			if ($stuff = get_some_stuff()) {

				if (fwrite($fp,$stuff)) {

					// ...

				} else {
					return false;
				}
			} else {
				return false;
			}
		} else {
			return false;
		}
	} else {
		return false;
	}
}</pre>
<p>For the sake of readability, it is usually possible to make changes to your code to reduce the level of nesting:</p>
<pre class="brush: php noskimlinks noskimwords">function do_stuff() {

// ...

	if (!is_writable($folder)) {
		return false;
	}

	if (!$fp = fopen($file_path,'w')) {
		return false;
	}

	if (!$stuff = get_some_stuff()) {
		return false;
	}

	if (fwrite($fp,$stuff)) {
		// ...
	} else {
		return false;
	}
}</pre>
<h2>
<span class="sectionnum">8.</span> Limit Line Length</h2>
<p>Our eyes are more comfortable when reading tall and narrow columns of text. This is precisely the reason why newspaper articles look like this:</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=477/net/uploads/legacy/516_code/newspaper.jpg" alt="columns of text in a newspaper " loading="lazy" width="497px" height="371px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=954/net/uploads/legacy/516_code/newspaper.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=477/net/uploads/legacy/516_code/newspaper.jpg" alt="columns of text in a newspaper " loading="lazy" width="497px" height="371px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=954/net/uploads/legacy/516_code/newspaper.jpg 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/516_code/newspaper.jpg" alt="columns of text in a newspaper " loading="lazy" width="380px" height="285px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/516_code/newspaper.jpg 2x">
</div>
<p>It is a good practice to avoid writing horizontally long lines of code.</p>
<pre class="brush: php noskimlinks noskimwords">// bad
$my_email-&gt;set_from('test@email.com')-&gt;add_to('programming@gmail.com')-&gt;set_subject('Methods Chained')-&gt;set_body('Some long message')-&gt;send();

// good
$my_email
	-&gt;set_from('test@email.com')
	-&gt;add_to('programming@gmail.com')
	-&gt;set_subject('Methods Chained')
	-&gt;set_body('Some long message')
	-&gt;send();

// bad
$query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = '123'";

// good
$query = "SELECT id, username, first_name, last_name, status
	FROM users
	LEFT JOIN user_posts USING(users.id, user_posts.user_id)
	WHERE post_id = '123'";</pre>
<p>Also, if anyone intends to read the code from a terminal window, such as <a href="https://net.tutsplus.com/tutorials/other/venturing-into-vim-new-premium-video-series/">Vim users</a>, it is a good idea to limit the line length to around 80 characters.</p>
<h2>
<span class="sectionnum">9.</span> File and Folder Organization</h2>
<p>Technically, you could write an entire application's code within a single file. But that would be a nightmare to read and maintain.</p>
<p>During my first programming projects, I knew about the idea of creating "include files." However, I was not yet even remotely organized. I created an <strong>inc</strong> folder, with two files in it: <code>db.php</code> and <code>functions.php</code>. As the applications grew, the functions file also became huge and unmaintainable.</p>
<h2>
<span class="sectionnum">10.</span> Consistent Temporary Names</h2>
<p>Normally, the variables should be descriptive and contain one or more words. But this doesn't necessarily apply to temporary variables. They can be as short as a single character.</p>
<p>It is a good practice to use consistent names for your temporary variables that have the same kind of role. Here are a few examples that I tend to use in my code:</p>
<pre class="brush: php noskimlinks noskimwords">// $i for loop counters
for ($i = 0; $i &lt; 100; $i++) {

	// $j for the nested loop counters
	for ($j = 0; $j &lt; 100; $j++) {

	}
}

// $ret for return variables
function foo() {
	$ret['bar'] = get_bar();
	$ret['stuff'] = get_stuff();

	return $ret;
}

// $k and $v in foreach
foreach ($some_array as $k =&gt; $v) {

}

// $q, $r and $d for mysql
$q = "SELECT * FROM table";
$r = mysql_query($q);
while ($d = mysql_fetch_assocr($r)) {

}

// $fp for file pointers
$fp = fopen('file.txt','w');</pre>
<h2>
<span class="sectionnum">11.</span> Capitalize SQL Special Words</h2>
<p>Database interaction is a big part of most web applications. If you are writing raw SQL queries, it is a good idea to keep them readable as well.</p>
<p>Even though SQL special words and function names are case insensitive, it is common practice to capitalize them to distinguish them from your table and column names.</p>
<pre class="brush: html noskimlinks noskimwords">SELECT id, username FROM user;

UPDATE user SET last_login = NOW()
WHERE id = '123'

SELECT id, username FROM user u
LEFT JOIN user_address ua ON(u.id = ua.user_id)
WHERE ua.state = 'NY'
GROUP BY u.id
ORDER BY u.username
LIMIT 0,20</pre>
<h2>
<span class="sectionnum">12.</span> Separation of Code and Data</h2>
<p>This is another principle that applies to almost all programming languages in all environments. In the case of web development, the "data" usually implies HTML output.</p>
<p>When PHP was first released many years ago, it was primarily seen as a template engine. It was common to have big HTML files with a few lines of PHP code in between. However, things have changed over the years, and websites have become more and more dynamic and functional. The code is now a huge part of web applications, and it is no longer a good practice to combine it with the HTML.</p>
<p>You can either apply the principle to your application by yourself, or you can use a third-party tool (template engines, frameworks, or CMSs) and follow their conventions.</p>
<h2>
<span class="sectionnum">13.</span> Alternate Syntax Inside Templates</h2>
<p>You may choose not to use a fancy template engine, and instead go with plain inline PHP in your template files. This does not necessarily violate the "Separation of Code and Data," as long as the inline code is directly related to the output and is readable. In this case, you should consider using the <a href="https://php.net/manual/en/control-structures.alternative-syntax.php">alternate syntax for control structures</a>.</p>
<p>Here is an example:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;div class="user_controls"&gt;
	&lt;?php if ($user = Current_User::user()): ?&gt;
		Hello, &lt;em&gt;&lt;?php echo $user-&gt;username; ?&gt;&lt;/em&gt; &lt;br/&gt;
		&lt;?php echo anchor('logout', 'Logout'); ?&gt;
	&lt;?php else: ?&gt;
		&lt;?php echo anchor('login','Login'); ?&gt; |
		&lt;?php echo anchor('signup', 'Register'); ?&gt;
	&lt;?php endif; ?&gt;
&lt;/div&gt;

&lt;h1&gt;My Message Board&lt;/h1&gt;

&lt;?php foreach($categories as $category): ?&gt;

	&lt;div class="category"&gt;

		&lt;h2&gt;&lt;?php echo $category-&gt;title; ?&gt;&lt;/h2&gt;

		&lt;?php foreach($category-&gt;Forums as $forum): ?&gt;

			&lt;div class="forum"&gt;

				&lt;h3&gt;
					&lt;?php echo anchor('forums/'.$forum-&gt;id, $forum-&gt;title) ?&gt;
					(&lt;?php echo $forum-&gt;Threads-&gt;count(); ?&gt; threads)
				&lt;/h3&gt;

				&lt;div class="description"&gt;
					&lt;?php echo $forum-&gt;description; ?&gt;
				&lt;/div&gt;

			&lt;/div&gt;

		&lt;?php endforeach; ?&gt;

	&lt;/div&gt;

&lt;?php endforeach; ?&gt;</pre>
<p>This lets you avoid lots of curly braces. Also, the code looks and feels similar to the way HTML is structured and indented.</p>
<h2>
<span class="sectionnum">14.</span> Object-Oriented vs. Procedural</h2>
<p>Object-oriented programming can help you create well-structured code. But that does not mean you need to abandon procedural programming completely. Actually, creating a mix of both styles can be good.</p>
<p>Objects should be used for representing data, usually residing in a database.</p>
<pre class="brush: php noskimlinks noskimwords">class User {

	public $username;
	public $first_name;
	public $last_name;
	public $email;

	public function __construct() {
		// ...
	}

	public function create() {
		// ...
	}

	public function save() {
		// ...
	}

	public function delete() {
		// ...
	}

}</pre>
<p>Procedural functions may be used for specific tasks that can be performed independently.</p>
<pre class="brush: php noskimlinks noskimwords">function capitalize($string) {

	$ret = strtoupper($string[0]);
	$ret .= strtolower(substr($string,1));
	return $ret;

}</pre>
<h2>
<span class="sectionnum">15.</span> Read Open-Source Code</h2>
<p>Open-source projects are built with the input of many developers. These projects need to maintain a high level of code readability so that the team can work together as efficiently as possible. Therefore, it is a good idea to browse through the source code of these projects to observe what these developers are doing.</p>
<div>
<img src="https://cdn.tutsplus.com/cdn-cgi/image/width=580/net/uploads/legacy/516_code/open_source.png" alt="open source code example" loading="lazy" width="600px" height="1000px" class="resized-image resized-image-desktop" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1160/net/uploads/legacy/516_code/open_source.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=580/net/uploads/legacy/516_code/open_source.png" alt="open source code example" loading="lazy" width="600px" height="1000px" class="resized-image resized-image-tablet" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=1160/net/uploads/legacy/516_code/open_source.png 2x"><img src="https://cdn.tutsplus.com/cdn-cgi/image/width=360/net/uploads/legacy/516_code/open_source.png" alt="open source code example" loading="lazy" width="380px" height="628px" class="resized-image resized-image-mobile" srcset="https://cdn.tutsplus.com/cdn-cgi/image/width=720/net/uploads/legacy/516_code/open_source.png 2x">
</div>
<h2>
<span class="sectionnum">16.</span> Use Meaningful Names for Variables and Functions</h2>
<p>You will save a lot of your precious time by using meaningful names for variables and functions. This may not seem like a big deal when you are just starting out and the programs you write are just a couple of dozen lines long. However, things get very confusing fairly quickly for code that has hundreds or thousands of lines.</p>
<p>Consider an example, where you have two variables <code>$is_vaccine_available</code> and <code>$iva</code>. In a large program, it won't be easy to guess what purpose <code>$iva</code> serves without looking through some relevant lines of code. On the other hand, you can guess that the variable <code>$is_vaccine_available</code> is almost certainly being used to store the status of vaccine availability.</p>
<p>Trying to save time by using very short names for variables and functions is counter-productive in the long run, especially when there are a lot of capable code editors and IDEs available to help you write code.</p>
<h2>
<span class="sectionnum">17.</span> Avoid Using Magic Numbers</h2>
<p>The concept of magic numbers in programming refers to the use of hard-coded numerical values in your code. Using such numbers might make sense to you while you are writing the code. However, you or someone else will most probably have a hard time figuring out what that number was supposed to do when they look at the same piece of code in future.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

while($egg_count &gt; 400) {
    // Do something
}

$container_capacity = 400;
while($egg_count &gt; $container_capacity) {
    // Do Something
}
?&gt;</pre>
<p>Considering the code above, in the first case, we have no idea what the 400 signifies. Is it the count of people who will be served eggs, or is it something else? On the other hand, we know very clearly in the second case that we are checking if our egg count is over the container capacity.</p>
<p>It is also easier to update the <code>$container_capacity</code> by changing its value in one place. This will not be possible when using magic numbers as you will have to go through the whole code.</p>
<h2>
<span class="sectionnum">18.</span> Code Refactoring</h2>
<p>When you "refactor," you make changes to the code without changing any of its functionality. You can think of it like a "cleanup," for the sake of improving readability and quality.</p>
<p>This doesn't include bug fixes or the addition of any new functionality. You might refactor code that you have written the day before, while it's still fresh in your head, so that it is more readable and reusable when you may potentially look at it two months from now. As the motto says: "refactor early, refactor often."</p>
<p>You may apply any of the "best practices" of code readability during the refactoring process.</p>
<h2>Conclusions</h2>
<p>I hope you enjoyed this article! Code readability is a huge topic, and it's well worth thinking more about, whether you work alone, with a team, or on a large open-source project.</p>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a>. Monty is a full-stack developer who also loves to write tutorials and to learn about new JavaScript libraries. </em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-04-20T14:38:56+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Best Affiliate WooCommerce Plugins Compared]]></title>
      <link>//shineyrock.com/blog/read/best_affiliate_woocommerce_plugins_compared</link>
      <guid>https://shineyrock.com/blog/read/best_affiliate_woocommerce_plugins_compared#When:13:45:48Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>WooCommerce and WordPress are, together, a powerful and winning combination for online commerce.</p>
<p>Together they run 37% of eCommerce business online. Leveraging these two is the perfect combination for selling physical products, digital goods, and services online. </p>
<p>But having the most awesome WooCommerce storefront and the best products is just a tiny part of what you need for online business success. </p>
<p>You may want also to consider an affiliate program to help spread the word and get your business in front of as many eyes as you can. Also, if you run a blog, you may want to monetize it through affiliate marketing. </p>
<p>On <a href="https://codecanyon.net/category/wordpress/ecommerce?sort=sales&amp;term=affiliate" target="_self">CodeCanyon</a> you can find affiliate marketing plugins for the WooCommerce store owner who wants to start his or her own affiliate network and for the blogger who wants to earn some money as an affiliate marketer.</p>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=bxe2qGFf5bI">
            <iframe data-src="https://www.youtube.com/embed/bxe2qGFf5bI?rel=0" frameborder="0" allowfullscreen="allowfullscreen" webkitallowfullscreen="webkitallowfullscreen" mozallowfullscreen="mozallowfullscreen" loading="lazy"></iframe><div class="video-preview-image youtube">
<div class="video-preview-image__ytv-heading">
            <div class="video-preview-image__ytv-heading-gradient-top"></div>
            <a class="video-preview-image__ytv-heading-channel-logo-link" href="https://www.youtube.com/channel/UC8lxnUR_CzruT2KA6cb7p0Q" target="_blank" style="background-image:url(https://yt3.ggpht.com/ytc/AAUvwnikyWhFtAFfG23X2YJtsPIWtglUuydSYAeJdnnE5g=s88-c-k-c0x00ffffff-no-rj)"></a>
            <a class="video-preview-image__ytv-heading-title-link" href="https://www.youtube.com/watch?v=bxe2qGFf5bI&amp;feature=emb_title" target="_blank">
              5 Best Affiliate WooCommerce Plugins
            </a>
          </div>
            <img loading="lazy" src="https://i.ytimg.com/vi/bxe2qGFf5bI/sddefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div>
          </figure>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-build-an-amazon-affiliate-website-with-a-woocommerce-affiliate-plugin--cms-33154"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Build an Amazon Affiliate Website With a WooCommerce Affiliate Plugin</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/envato-market-in-60-seconds-becoming-an-affiliate--cms-27914"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/27914/preview_image/preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/27914/preview_image/preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/27914/preview_image/preview.png 2x"><div class="roundup-block__primary-category topic-webdesign">Theme Development</div>
<div class="roundup-block__content-title">Envato Market in 60 Seconds: Becoming an Affiliate</div>
<div class="roundup-block__author">Adi Purdila</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/the-beginners-guide-to-woocommerce-adding-an-externalaffiliate-product--cms-22755"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">The Beginners Guide to WooCommerce: Adding an External/Affiliate Product</div>
<div class="roundup-block__author">Ahmad Awais</div></a></li>
</ul>
<p>Let's take a quick look at some of the best affiliate WooCommerce plugins and how they compare.</p>
<h2>Understanding Affiliate Marketing</h2>
<p>There are billions of products—physical or digital—that are sold every day. This makes affiliate marketing one of the most popular ways of earning money. Affiliate marketing is a very reliable way of generating more leads and sales. It is based on revenue sharing.</p>
<p>Here is how it works:</p>
<h3>The Merchant</h3>
<p>Let’s say you have a beautiful WooCommerce store with lots of beautiful products. In this case you are the merchant: <strong>you have a product, and you’re a seller</strong>. You want to sell more products. That is the goal. </p>
<p>The best way to get the word out about the products you’re selling would be revenue sharing.</p>
<p>You get other people to promote your products, and for every product that is sold, you pay them a commission. </p>
<h3>The Affiliate Marketer</h3>
<p>You have no product to sell. You have an active blog and/or social media account. You can become <strong>an affiliate marketer</strong> by promoting the products other people or businesses are selling. For every product sold, you earn a commission. </p>
<h3>The Drop Shipper</h3>
<p>You are a newbie. You set up a WooCommerce store. You register with different affiliate networks. You populate your online store with products from different merchants represented by the affiliate network. You earn commissions when the products sell, and the products are shipped directly from the merchants in the network. </p>
<p>You get the picture: affiliate marketing is getting paid to promote and sell other people’s products. You earn a commission for every product sold through your website. </p>
<p>As a merchant—producer and seller—who has a product to sell, you can create an <strong>affiliate program</strong> that affiliate marketers can join in order to promote and sell your products.  </p>
<p>As an <strong>affiliate marketer</strong>, you can promote one product from a single merchant or many products from many merchants. You promote the products through <strong>paid ads, landing pages, blogs, social media,</strong> or whatever means you have of getting the word out. </p>
<p><em>It’s highly recommended that you diversify your affiliate income sources</em>.</p>
<h3>Affiliate Networks </h3>
<p>There's another big wheel in the affiliate marketing business that happens to be very important: <strong>affiliate networks</strong>. </p>
<p>Affiliate networks are big players in the affiliate marketing game. There are thousands of affiliate networks. They act as intermediaries between merchants and affiliate marketers. </p>
<p>Here is what happens. </p>
<p>Because affiliate networks have a very extensive ground game developed over a very long time, merchants let affiliate networks handle everything to do with affiliate marketing. </p>
<p>If an affiliate marketer is interested in marketing particular products by particular merchants, they will have to go through the affiliate networks. </p>
<p>In this case, affiliate networks are affiliate marketing platforms that:</p>
<ul>
<li>bring together offers from different vendors under one roof </li>
<li>develop directories with listings of products and offers affiliate marketers to choose from</li>
<li>take care of all the administrative details of running an affiliate network</li>
</ul>
<p>Some networks give you tools like ads of their products to display on your blog, website, or social media. Some give pre-built landing pages of their products, and all you have to do is market. Other networks give you tools to create your own ads and landing pages of their products. </p>
<h3>
<strong>Examples of Affiliate Networks</strong>  </h3>
<p>There are thousands of affiliate networks. </p>
<p>There are affiliate networks that just specialize in digital products. Examples of affiliate networks in this category include MaxBounty, JVZoo, ClickBank, and 2Checkout.</p>
<p>Other affiliate networks specialize only in physical products. Examples of affiliates in this category include Target Affiliates.</p>
<p>Then there are those that specialize in both physical and digital products. Examples include AWIN, Amazon, and Shopify. </p>
<p>Other affiliate networks specialize in internet marketing, financial products, health and fitness products, or link share, especially deep linking. The list goes on! </p>
<h3>Types of Affiliate Payout</h3>
<p>There are different payment types and models in affiliate marketing. Lots of it depends on the affiliate network and what payment model works best for them. </p>
<p>If you are looking to create your own affiliate program, these models should give you some ideas on how to structure your payouts.</p>
<p>If you’re looking to be an affiliate marketer, the brief description of each payout type will give a clear picture of how you get paid. </p>
<h4>Commission-Based Payment </h4>
<p>A commission model for payment is the most popular. Some ways in which commission are determined: </p>
<ul>
<li>
<strong>Cost per sale: </strong>you get paid when you produce a sale for the product or service you’re promoting.</li>
<li>
<strong>Cost per click:</strong>you get paid when visitors click the ads displayed on the website, and it doesn’t matter if a sale is generated or not. </li>
<li>
<strong>Cost per lead:</strong>you get paid when you send potential customers (leads) to other businesses. Specialized niches, like law firms, doctors offices, and tax accountants, use this model. </li>
<li>
<strong>Cost per action:</strong> you get paid for each action an individual takes, such as filling in their personal details, answering survey information, or applying for a credit card.</li>
</ul>
<h4>Other Affiliate Program Payment Models </h4>
<ul>
<li>
<strong>Single-tiered program: </strong>The affiliate is paid based on a direct sale they make.</li>
<li>
<strong>Two-tiered affiliate program:</strong> This affiliate model allows you to make commissions not only on your own sales but the sales from others—sub-affiliates—that you recruit into the program as an affiliate. This has two levels of affiliates. </li>
<li>
<strong>Multi-tiered affiliate program:</strong> Similar to the model above but with more than two levels of affiliates. In this program, your affiliates recruit affiliates who recruit affiliates–the levels can go on and on.</li>
<li>
<strong>Flat rate program: </strong>You get paid a flat rate for each lead, sale, or action your promotion generates for the business. </li>
<li>
<strong>Performance-based program:</strong> You get paid based on measurable results. You put in the work—and lots of it—and if it results in sales, you get paid. </li>
<li>
<strong>Revenue share program: </strong>You don’t get paid per lead or per signup. Instead, you get paid based on future spending by a lead you referred who registers with the merchant you are promoting. If this future spending becomes regular, you receive payments indefinitely. It's called <strong>lifetime value. </strong>A good example of this situation is online casino affiliate programs.</li>
</ul>
<h3>Why a WooCommerce Store Needs an Affiliate Program</h3>
<ul>
<li>It’s the easiest and fastest way to drive traffic to your store.</li>
<li>It’s the most reliable way of generating leads and sales.</li>
<li>It’s the least costly way to advertise and promote your store.</li>
</ul>
<p>You can even get new customers to spread the word for you by making them your affiliates. </p>
<h3>Affiliate Plugins Explained </h3>
<p>There is a lot that goes into building a custom affiliate program from scratch. Putting together all the moving parts is time-consuming and costs a lot of money. Developers who create affiliate plugins have put a lot of thought into what an affiliate program needs and have incorporated all that into a plugin.</p>
<p>An affiliate plugin is a piece of software specifically made to allow you to set up your own affiliate program. It comes out of the box ready to get started immediately. You just need to install it and customize it to suit your needs.  </p>
<h3>What Affiliate Plugins Do</h3>
<ul>
<li>Provides you with a platform to manage your affiliate network by registering affiliates, setting up payout rates and payments methods, and more. </li>
<li>Allows tracking, using unique URLs, of clicks, referrals, and sales by your partners</li>
</ul>
<h3>How to Choose an Affiliate Plugin</h3>
<p>The following are things you should consider when looking for an affiliate plugin to suit your needs:</p>
<ul>
<li>
<strong>easy to use</strong>, with customizable templates and color swatches</li>
<li>integration with <strong>payment gateways </strong>like PayPal and Stripe for easy payouts to affiliates </li>
<li>integration with <strong>email marketing platforms </strong>like Constant Contact, Mailchimp, and AWeber </li>
<li>integration with <strong>social share</strong> for easy sharing on social media</li>
</ul>
<p>Finally, you need to make sure the hosting service you’re using can handle large databases. </p>
<h2>Affiliate WooCommerce Plugins for the Store Owner</h2>
<p>If you’re a merchant or store owner and you want to run your own affiliate marketing program, these <strong>self-hosted affiliate WooCommerce solution </strong>plugins allow you to register affiliate marketing partners and determine commissions for your affiliates. </p>
<h3>1. <a href="https://codecanyon.net/item/ultimate-affiliate-pro-wordpress-plugin/16527729" target="_blank" rel="external noopener">Ultimate Affiliate Pro WordPress Plugin</a> </h3>
<p>Let's start with the Ultimate Affiliate Pro WordPress Plugin.</p>
<p>It is easily one of the most robust affiliate WooCommerce plugins as it is integrated with WooCommerce, Easy Digital Downloads, PayPal, and Stripe, and it includes a complete feature set to get your own affiliate program up and running.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1225/posts/29556/image/001.jpg" alt="Ultimate Affiliate Pro WordPress Plugin" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1225/posts/29556/image/001.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1225/posts/29556/image/001.jpg" alt="Ultimate Affiliate Pro WordPress Plugin" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1225/posts/29556/image/001.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1225/posts/29556/image/001.jpg" alt="Ultimate Affiliate Pro WordPress Plugin" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1225/posts/29556/image/001.jpg 2x"></figure>
<p>You'll find all sorts of useful features such as:</p>
<ul>
<li>performance bonuses and banner management</li>
<li>unlimited affiliates and special offers</li>
<li>rankings and commission levels</li>
<li>referrals and social shares</li>
<li>PayPal and Stripe payouts</li>
<li>and much, much more</li>
</ul>
<p>This is one of the best affiliate WooCommerce plugins you'll find on Envato Market.</p>
<p>If this all wasn't impressive enough, this also includes free login, register, and account page templates, and connects with the top email marketing platforms like Mailchimp, Constant Contact, and many more.</p>
<p><a href="https://codecanyon.net/item/ultimate-affiliate-pro-wordpress-plugin/16527729" target="_blank" rel="external noopener">Ultimate Affiliate Pro WordPress Plugin</a> <em>is</em> the ultimate affiliate WordPress plugin.</p>
<h3>2. <a href="https://codecanyon.net/item/sumo-affiliates-pro-wordpress-affiliate-plugin/22795996" target="_blank" rel="external noopener">SUMO Affiliates Pro—WordPress Affiliate Plugin</a> </h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg" alt="SUMO Affiliates Pro - WordPress Affiliates Plugin" loading="lazy" width="870px" height="443px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg" alt="SUMO Affiliates Pro - WordPress Affiliates Plugin" loading="lazy" width="650px" height="334px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg" alt="SUMO Affiliates Pro - WordPress Affiliates Plugin" loading="lazy" width="380px" height="199px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/33403/image/82FBF4F4-0041-4848-908F-D5A1BEF28F27.jpeg 2x"></figure>
<p><strong>SUMO Affiliates Pro</strong> is a comprehensive WordPress Affiliates Plugin that allows you to run an affiliate system on your existing WordPress site. And you can fully integrate it into your WooCommerce store. </p>
<p>You can award affiliate commissions for actions such as affiliate signup, form submission, and product purchases.</p>
<p>Some features of this plugin include: </p>
<ul>
<li>separate tables to capture the URLs that were accessed using an affiliate link</li>
<li>separate tables to capture the referral actions which got converted</li>
<li>approve the referrals automatically or approve the referrals after review</li>
<li>award lifetime commission to the affiliates for the purchases made by their referrals</li>
<li>allow affiliates to generate readable affiliate links (pretty affiliate links)</li>
<li>create unique landing pages for affiliates</li>
</ul>
<p>Check out the <a href="https://demo.fantasticplugins.com/sumo-affiliates-pro/dashboard/" target="_blank" rel="external noopener">live preview</a> and see why this is one of the best affiliate plugins available on the market. </p>
<p>User <a class="t-link -decoration-reversed" href="https://codecanyon.net/user/ceem123">CeeM123</a> says:</p>
<blockquote>
<p>"Very quick and outstanding support and awesome plugin that provides all possibilities we were searching for."</p>
</blockquote>
<h3>3. <a href="https://codecanyon.net/item/sumo-affiliates-woocommerce-affiliate-system/18273930" target="_blank" rel="external noopener">SUMO Affiliates—WooCommerce Affiliate System</a>
</h3>
<p>The SUMO Affiliates: WooCommerce Affiliate System is simple and straightforward.</p>
<p>Its approach is on point:</p>
<blockquote>"...logged in users can apply and become Affiliates and promote the products in the site. Whenever a user purchases a product by using an Affiliate Link, the Affiliate associated with the link will earn commission for the purchase."</blockquote>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1225/posts/29556/image/004.jpg" alt="SUMO Affiliates - WooCommerce Affiliate System" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1225/posts/29556/image/004.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1225/posts/29556/image/004.jpg" alt="SUMO Affiliates - WooCommerce Affiliate System" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1225/posts/29556/image/004.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1225/posts/29556/image/004.jpg" alt="SUMO Affiliates - WooCommerce Affiliate System" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1225/posts/29556/image/004.jpg 2x"></figure>
<p>This solid solution works with WooCommerce supported themes and also includes:</p>
<ul>
<li>CSV export for unpaid commissions</li>
<li>translation and WPML ready</li>
<li>affiliate cookie validator</li>
<li>affiliate link generator</li>
<li>highly customizable</li>
<li>affiliate applications</li>
<li>affiliate dashboard</li>
<li>and much more</li>
</ul>
<p>If you're just looking for an affiliate WooCommerce plugin, look no further.</p>
<p><a href="https://codecanyon.net/item/sumo-affiliates-woocommerce-affiliate-system/18273930" target="_blank" rel="external noopener">The SUMO Affiliates: WooCommerce Affiliate System</a> hits all the right marks.</p>
<h3>4. <a href="https://codecanyon.net/item/woocommerce-multilevel-referral-plugin/16993804" target="_blank" rel="external noopener">WooCommerce Multilevel Referral Plugin</a>
</h3>
<p>Interested in building a strong referral chain?</p>
<p>The WooCommerce Multilevel Referral Plugin allows affiliates to earn credit points while their followers purchase your products from the existing online store.</p>
<p>Build your affiliate perks through sales.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1225/posts/29556/image/003.jpg" alt="WooCommerce Multilevel Referral Plugin" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1225/posts/29556/image/003.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1225/posts/29556/image/003.jpg" alt="WooCommerce Multilevel Referral Plugin" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1225/posts/29556/image/003.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1225/posts/29556/image/003.jpg" alt="WooCommerce Multilevel Referral Plugin" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1225/posts/29556/image/003.jpg 2x"></figure>
<p>Features you'll find here:</p>
<ul>
<li>set custom credit and redemption limits</li>
<li>full admin reporting of registered users</li>
<li>global or product specific settings</li>
<li>shortcode support</li>
<li>and much more</li>
</ul>
<p>This is a multilevel referral system for WooCommerce, something that's outside of the typical affiliate transactional system.</p>
<p><a href="https://codecanyon.net/item/woocommerce-multilevel-referral-plugin/16993804" target="_blank" rel="external noopener">WooCommerce Multilevel Referral Plugin</a> is unique in approach and may be exactly what you're looking for. </p>
<h2>Solutions for Affiliate Marketers</h2>
<p>WooCommerce is also perfect for <em>affiliates</em>. With the help of these plugins, you can create a niche storefront that has the look, feel, and convenience of a WooCommerce shopping experience, while serving users products from Amazon and other affiliate networks. </p>
<h3>5. <a href="https://codecanyon.net/item/woocommerce-amazon-affiliates-wordpress-plugin/3057503" target="_blank" rel="external noopener">WooCommerce Amazon Affiliates WordPress Plugin</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg" alt="" loading="lazy" width="870px" height="636px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg" alt="" loading="lazy" width="650px" height="477px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg" alt="" loading="lazy" width="380px" height="281px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/33403/image/2D59969A-7FBA-4982-9867-A327F896ECA9.jpeg 2x"></figure>
<p>If you want to set up an affiliate site and import products directly from Amazon, then <a href="https://codecanyon.net/search/woocommerce%20affiliates%20plugin" target="_blank" rel="external noopener">WooCommerce Amazon Plugin for WordPress</a> is your best choice. It pulls all product information, specs, images and reviews together in one place. </p>
<p>Your site will look and function like an eCommerce website, but at checkout, customers will be redirected to Amazon. </p>
<p>Also, you can import and synchronize products without the need for PA API (Product Advertising) keys! The sync occurs automatically, every 15 minutes, and the recurrence is every 24 hours. </p>
<p>Go to the <a href="https://preview.codecanyon.net/item/woocommerce-amazon-affiliates-wordpress-plugin/full_screen_preview/3057503" target="_self">live preview and see for yourself what this plugin can do!</a> </p>
<p>User <a class="t-link -decoration-reversed" href="https://codecanyon.net/user/abundance_for_all">Abundance_For_All</a> says this about <a href="https://codecanyon.net/item/woocommerce-amazon-affiliates-wordpress-plugin/3057503" target="_blank" rel="external noopener">WooCommerce Amazon Plugin for WordPress</a></p>
<blockquote>"Great plugin easy to use! A must-use plugin if you are an Amazon affiliate! Highly recommended."</blockquote>
<h3>6. <a href="https://codecanyon.net/item/content-egg-all-in-one-plugin-for-affiliate-comparison-deal-sites/19195707" target="_blank" rel="external noopener">Content Egg</a> </h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg" alt="Content Egg" loading="lazy" width="870px" height="788px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg" alt="Content Egg" loading="lazy" width="650px" height="589px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg" alt="Content Egg" loading="lazy" width="380px" height="345px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/33403/image/A66AA903-679E-4F50-8A92-371BC593C9AA.jpeg 2x"></figure>
<p>For an affiliate marketer, diversifying is the best business model. This means curating affiliate products sourced from different affiliate networks. In short, creating a website that promotes products from different merchants. </p>
<p>This, sometimes, may not be as simple as you think. You may need to have separate plugins to import products and information from separate networks. </p>
<p>Content Egg is unique because it is an affiliate and content curation plugin that brings together and supports many affiliate networks under one roof. Content Egg uses network APIs. </p>
<p>Here is how it works: </p>
<ol>
<li>Activate your modules by adding your API keys to access each network.</li>
<li>Add offers by searching by keyword. Import offers to your page with special shortcodes.</li>
<li>Start to earn: The plugin will add your affiliate ID to all links. You will earn affiliate commissions according to the rules of the given network.</li>
</ol>
<p>This plugin works with all WooCommerce themes. You can easily import offers for WooCommerce products and also import specifications to WooCommerce attributes. </p>
<p>It’s easy for novices and professionals. It has has a clear interface and saves significant time and effort when creating affiliate websites.</p>
<p>It has everything you need to effectively manage and create affiliate monetization on your websites and quickly find content and products to monetize.</p>
<p>Other features of this great plugin include:</p>
<ul>
<li>Up-to-date products: offers, deals, and prices will be updated automatically.</li>
<li>Price drop alerts: email alerts for price drops and price history.</li>
<li>Links cloaking: add redirect to your affiliate links.</li>
<li>Use Autoblog to fill your site with different content: text, video, and pictures.</li>
<li>All pages will be search optimized because Content Egg functions like search engines and uses search keywords.</li>
</ul>
<p>The proof is in the pudding. <a href="https://codecanyon.net/item/content-egg-all-in-one-plugin-for-affiliate-comparison-deal-sites/full_screen_preview/19195707" target="_self">Go to the live preview and try it for yourself!</a></p>
<p>User <a class="t-link -decoration-reversed" href="https://codecanyon.net/user/manjupmf">ManjuPmf</a> says:</p>
<blockquote>"Includes almost every affiliate network and works great. I highly recommend it."</blockquote>
<h3>7. <a href="https://codecanyon.net/item/affiliate-egg-niche-affiliate-marketing-wordpress-plugin/21852757" target="_blank" rel="external noopener">Affiliate Egg: Niche Affiliate Marketing Plugin</a> </h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg" alt="Affiliate Egg Niche Affiliate Marketing Plugin" loading="lazy" width="870px" height="648px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg" alt="Affiliate Egg Niche Affiliate Marketing Plugin" loading="lazy" width="650px" height="485px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg" alt="Affiliate Egg Niche Affiliate Marketing Plugin" loading="lazy" width="380px" height="286px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/33403/image/1AB767CC-88A8-456D-A3E8-1DDD917B1AD8.jpeg 2x"></figure>
<p>Local shops usually have better prices, better partnerships, and better commissions for local regions. I highly recommend <a href="https://codecanyon.net/item/affiliate-egg-niche-affiliate-marketing-wordpress-plugin/21852757" target="_blank" rel="external noopener">Affiliate Egg</a> if you want to create a successful affiliate website by taking advantage of the best conversions and commissions offered by local popular shops. </p>
<h4>Why Local Affiliate Marketing?</h4>
<ul class="list list--standard">
<li>You know your local merchants better than the online giants.</li>
<li>Local SEO is easier and much more effective. </li>
<li>Present better prices with fewer competitors.</li>
</ul>
<h3>How Affiliate Egg Works </h3>
<ol>
<li>Create storefronts: Just copy links from the original online store and insert them into the plugin. You can also use category or search links for bulk imports.</li>
<li>Add shortcodes: Choose an output layout and insert the shortcode anywhere on your site.</li>
<li>Start to earn: Set your partner's affiliate ID to make a simple affiliate link.</li>
</ol>
<p>The <a href="https://codecanyon.net/item/affiliate-egg-niche-affiliate-marketing-wordpress-plugin/21852757" target="_blank" rel="external noopener">Affiliate Egg</a> plugin:</p>
<ul class="list list--standard mb60">
<li>can get products directly from webshops </li>
<li>can be easily integrated into your WooCommerce site </li>
<li>has price update functions </li>
<li>automatically adds affiliate IDs to links </li>
</ul>
<p>User <a class="t-link -decoration-reversed" href="https://codecanyon.net/user/cmv925">cmv925</a> says:</p>
<blockquote>
<p>"You run an affiliate site and need an easy solution to automate your inventory upload, this plugin is for you. Easily create storefronts in minutes."</p>
</blockquote>
<h3><span class="sectionnum">8. <a href="https://codecanyon.net/item/rakutenomatic-rakuten-affiliate-network-plugin/29558417" target="_blank" rel="noopener">Rakutenomatic—Rakuten Affiliate Network Plugin</a></span></h3>
<figure class="post_image"><a href="https://codecanyon.net/item/rakutenomatic-rakuten-affiliate-network-plugin/29558417"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/29556/image-upload/rak.jpg" alt="Rakutenomatic—Rakuten Affiliate Network Plugin" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/29556/image-upload/rak.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/29556/image-upload/rak.jpg" alt="Rakutenomatic—Rakuten Affiliate Network Plugin" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/29556/image-upload/rak.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/29556/image-upload/rak.jpg" alt="Rakutenomatic—Rakuten Affiliate Network Plugin" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/29556/image-upload/rak.jpg 2x"></a>
<figcaption>Rakutenomatic—Rakuten Affiliate Network Plugin</figcaption>
</figure>
<p>This best affiliate plugin for WordPress enables you to earn a passive income from being enrolled in multiple affiliate programs from Rakuten, earning percentages on sales that you generate.</p>
<p>Rakutenomatic uses the Rakuten Market API to turn your WordPress website into a money-making machine. Import affiliate products based on search queries to maximise earnings.</p>
<p>Tested on WordPress 5.6.x and Gutenberg-ready, this plugin has been developed by an Envato Elite Author and is regularly maintained and updated.</p>
<p>What's more, you can try it before you buy it.</p>
<h3>9. <a href="https://codecanyon.net/item/wordpress-woocommerce-affiliate-program/23580333" target="_blank" rel="noopener">WordPress and WooCommerce Affiliate Program</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-woocommerce-affiliate-program/23580333"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg" alt="WordPress and WooCommerce Affiliate Program" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg" alt="WordPress and WooCommerce Affiliate Program" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg" alt="WordPress and WooCommerce Affiliate Program" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/29556/image-upload/WaWCAP.jpg 2x"></a>
<figcaption>WordPress and WooCommerce Affiliate Program</figcaption>
</figure>
<p>WordPress and WooCommerce Affiliate Program is an affiliate marketing plugin to help you to market products through an affiliate team.</p>
<p>Through two-way commision, the site admin can give commissions to users in the form of product discounts which is a portion of the commission referred by the Affiliate. Or choose a manual referral commission or experiment with social media share using social media icons.</p>
<p>Furthermore, this WooCommerce affiliate plugin is compatible with digital downloads and you can reward your affiliates for marketing these.</p>
<p>Generate more income from an eCommerce site by having more visibility and increased traffic by installing this plugin. This is the WooCommerce affiliate system.</p>
<h3>10. <a href="https://codecanyon.net/item/affiliate-management-system-woocommerce-amazon/29955429" target="_blank" rel="noopener">Affiliate Management System—WooCommerce Amazon</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/affiliate-management-system-woocommerce-amazon/29955429"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/29556/image-upload/ams-wca.jpg" alt="Affiliate Management System—WooCommerce Amazon" loading="lazy" width="870px" height="330px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/29556/image-upload/ams-wca.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/29556/image-upload/ams-wca.jpg" alt="Affiliate Management System—WooCommerce Amazon" loading="lazy" width="650px" height="250px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/29556/image-upload/ams-wca.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/29556/image-upload/ams-wca.jpg" alt="Affiliate Management System—WooCommerce Amazon" loading="lazy" width="380px" height="151px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/29556/image-upload/ams-wca.jpg 2x"></a>
<figcaption>Affiliate Management System—WooCommerce Amazon</figcaption>
</figure>
<p>If you're looking for the best affiliate plugin for WordPress, you probably can't go wrong with one that allows you to import drop-shipped or affiliated Amazon products directly into a WooCommerce store.</p>
<p>If you're looking for a WooCommerce affiliate plugin, this one enables you to use a WooCommerce store to sell Amazon products from all Amazon country stores.</p>
<p>This is a compelling WooCommerce affiliate plugin and comparison with others is recommended.</p>
<h2>Conclusion</h2>
<p>These are some of the affiliate plugins that I recommend if you're looking to start your own affiliate program or you're an affiliate yourself. Check out more affiliate WooCommerce plugins on <a href="https://codecanyon.net/category/wordpress/ecommerce?sort=sales&amp;term=affiliate" target="_blank" rel="external noopener">CodeCanyon</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-build-an-amazon-affiliate-website-with-a-woocommerce-affiliate-plugin--cms-33154"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/369/posts/33154/preview_image/how%20to%20build%20an%20amazon%20affiliate%20ecommerce%20store%20in%20wordpress.png 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Build an Amazon Affiliate Website With a WooCommerce Affiliate Plugin</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/envato-market-in-60-seconds-becoming-an-affiliate--cms-27914"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/27914/preview_image/preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/27914/preview_image/preview.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/27914/preview_image/preview.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/27914/preview_image/preview.png 2x"><div class="roundup-block__primary-category topic-webdesign">Theme Development</div>
<div class="roundup-block__content-title">Envato Market in 60 Seconds: Becoming an Affiliate</div>
<div class="roundup-block__author">Adi Purdila</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/the-beginners-guide-to-woocommerce-adding-an-externalaffiliate-product--cms-22755"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/164/posts/22755/preview_image/WooCommerce.jpg 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">The Beginners Guide to WooCommerce: Adding an External/Affiliate Product</div>
<div class="roundup-block__author">Ahmad Awais</div></a></li>
</ul>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-04-19T13:45:48+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[18 Best WordPress Star Rating Plugins]]></title>
      <link>//shineyrock.com/blog/read/18-best-wordpress-star-rating-plugins</link>
      <guid>https://shineyrock.com/blog/read/18-best-wordpress-star-rating-plugins#When:15:34:43Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Star ratings are used by websites to review all kinds of products and services. You can use them to rate pretty much anything your users are interested in: a movie, the food in a restaurant, the quality of service provided by a mechanic, etc.</p>
<p>One of the reasons star ratings are so popular is that they allow users to quickly determine the quality of a product or service based on the experience of people who have used it.</p>
<p>It is also very common to find businesses asking people to rate their services or products. This is because people are more likely to buy something if they see real reviews from other people who have actually used it.</p>
<p>If your website sells something, it is a good idea to include a star rating system somewhere so that your customers can review your products.</p>
<p>In this post, I'll list the best WordPress star rating plugins on CodeCanyon and Envato Elements that you can use today.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="870px" height="496px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="650px" height="373px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="380px" height="222px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"></a>
<figcaption>Testimonials Showcase is one example of star rating plugins found on Envato Elements and CodeCanyon.</figcaption>
</figure>
<p>Before we look at the star rating plugins, let's explore the benefits of a <a href="https://elements.envato.com/subscribe/create-account" target="_blank" rel="noopener">monthly subscription to Envato Elements</a>. </p>
<h2>Subscribe to Envato Elements</h2>
<p>For designers and developers, access to unlimited digital assets makes it easy to focus on creating unique products. There are countless tools and resources that you can download, all with an <a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">Envato Elements subscription</a>.</p>
<p>Envato Elements is a service that provides an unlimited download subscription, meaning that you are free to download as many items as you like from millions of digital assets.</p>
<p>The subscription is covered by simple commercial licensing that gives you the rights to use the item in a broad variety of projects, including those of a commercial nature.</p>
<figure class="post_image"><a href="https://elements.envato.com/"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="870px" height="520px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="650px" height="391px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg" alt="Unlimited downloads of 54+ million creative assets. From just €14.50/month." loading="lazy" width="380px" height="232px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/6AF9EE91-DF1A-4E66-87C9-036E987F3D31.jpeg 2x"></a></figure>
<p>The licensing is future-proof, meaning even if you unsubscribe and can't download items from Envato Elements any more, any existing uses that you registered are still covered.</p>
<p>You can cancel or upgrade your Envato Elements subscription at any time.</p>
<p><a href="https://elements.envato.com/pricing" target="_blank" rel="noopener">Subscribe today</a> and start creating! </p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/10-reasons-envato-elements-is-great-for-wordpress-developers--cms-33702"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1631/posts/33702/preview_image/WordPressDevelopers.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">40 Reasons Envato Elements Is Great for WordPress Developers</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<h2>Star Rating Plugins on Both Envato Elements and CodeCanyon</h2>
<p>Here is a brief review of the best WordPress star rating plugins that you can buy on Envato Elements and CodeCanyon. In the descriptions, we'll mention plugins that appear on both marketplaces. </p>
<h3>1. <a href="https://elements.envato.com/star-rating-for-wordpress-LERKA7D" target="_blank" rel="noopener">Star Rating for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/star-rating-for-wordpress-LERKA7D" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif" alt="Stellar Star Rating Plugin" loading="lazy" width="870px" height="586px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif" alt="Stellar Star Rating Plugin" loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif" alt="Stellar Star Rating Plugin" loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/36677/image-upload/7bd09ed1-6678-4935-a6d5-194458b5a675.jfif 2x"></a></figure>
<p>Star Rating is a simple star rating plugin for WordPress that gives you the option to create and save ratings for each WordPress entry like a post, page, or product.</p>
<p>The review microdata is also visible in search results, so you will get a boost in visibility. It is fully compatible with all popular WordPress themes.</p>
<p>It comes with a lot of customization options. You can easily change the color, size, and shape of icons that are used to display the rating to users. The rating assigned to each post or page is also visible on the search page.</p>
<p>The plugin has cross-browser compatibility and does not rely on jQuery to work properly. You can download it with a subscription to Envato Elements. </p>
<h3>2. <a href="https://elements.envato.com/testimonials-showcase-W9QGZML" target="_blank" rel="noopener">Testimonials Showcase</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/testimonials-showcase-W9QGZML" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="870px" height="496px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="650px" height="373px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png" alt="Testimonials Showcase - WordPress Plugin" loading="lazy" width="380px" height="222px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/4E8FB77D-6595-403E-B38A-121C4E979CBC.png 2x"></a></figure>
<p>This WordPress testimonial plugin with star ratings gives you an easy way to display testimonials, reviews, and quotes from users in an attractive layout.</p>
<p>It is very flexible in terms of customization options and offers a responsive design. It's compatible with rich snippets and structured data used by search engines to display reviews and ratings in search results.</p>
<p>The reviews and testimonials can be showcased on the front-end either as a grid or as a slider. Each of these layouts comes with its own settings to control the look and feel of the reviews.</p>
<p>There are five different themes that you can use with this plugin: rounded speech bubbles, flat speech bubbles, flat card box, quote marks, or simple separator. With a low-cost monthly subscription, you can download this plugin and many others from Envato Elements. </p>
<div class="_1LXMQinR">
<h3>3. <a href="https://elements.envato.com/wordpress-facebook-reviews-plugin-UBKE4DL" target="_blank" rel="nofollow noopener">WordPress Facebook Reviews Plugin</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/wordpress-facebook-reviews-plugin-UBKE4DL"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg" alt="WordPress Facebook Reviews Plugin" loading="lazy" width="870px" height="584px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg" alt="WordPress Facebook Reviews Plugin" loading="lazy" width="650px" height="438px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg" alt="WordPress Facebook Reviews Plugin" loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36674/image-upload/9CB06195-C521-4BE2-A79F-B08908C43C3E.jpeg 2x"></a></figure>
<a href="https://elements.envato.com/wordpress-facebook-reviews-plugin-UBKE4DL" target="_blank" rel="nofollow noopener">The WordPress Facebook Reviews Plugin</a> is a star rating plugin that allows you to add business reviews from your Facebook page to your website. This highly customizable plugin comes with a clean and flexible interface to suit any website style and is packed with features including four predefined layouts, three review templates, a flexible header, and more.</div>
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">The review widget has six switchable elements: author name and picture, recommendation, date, Facebook icon, and star rating. The widget also allows filtering of your reviews and has a review-request button. You also have the option of showing your star rated reviews in a slider layout. </div>
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">The plugin supports 22 languages and works perfectly with many WordPress themes, including the most popular on <a href="https://themeforest.net/" target="_blank" rel="noopener">ThemeForest</a>. It is available on both CodeCanyon and Envato Elements. </div>
<div class="_16f9Id89">
<div class="_3BQ6bIFS _2GOWNtzR">
<div class="_1LXMQinR">
<h3>4. <a href="https://elements.envato.com/epic-review-wordpress-plugin-EQFYY24" target="_blank" rel="noopener">Epic Review WordPress Plugin</a> </h3>
<figure class="post_image"><a href="https://elements.envato.com/epic-review-wordpress-plugin-EQFYY24"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg" alt="Epic Review" loading="lazy" width="870px" height="826px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg" alt="Epic Review" loading="lazy" width="650px" height="617px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg" alt="Epic Review" loading="lazy" width="380px" height="361px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/0FED571D-06E8-47AA-90C6-E593C09B8DBF.jpeg 2x"></a></figure>
<div class="_1LXMQinR">
<a href="https://elements.envato.com/epic-review-wordpress-plugin-EQFYY24" target="_blank" rel="noopener">Epic Review</a>, which has three post rating systems including star, point, and percentage, is perfect if you write review articles that show your opinion of products, movies, etc.</div>
</div>
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">You can add responsive review boxes or blocks by the side or at the bottom of the article. You can showcase your best reviews. A widget shows a list of recent reviews on the sidebar so users can navigate through other reviews. There is also a special search feature that allows users to easily search and navigate through your review articles.</div>
<div class="_1LXMQinR">
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">You can monetize your posts by adding referral and affiliate links for the items you're reviewing. You can add multiple affiliate sources, and the plugin will automatically calculate which seller has the best price for the item you're reviewing. </div>
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">
<p>Available on both CodeCanyon and Envato Elements, this WordPress post rating plugin is also an add-on for Elementor and WPBakery Page Builder. </p>
<h3>5. <a href="https://elements.envato.com/testimonials-showcase-for-wordpress-excited-8UD53AB" target="_blank" rel="noopener">Excited! Testimonial Showcase for WordPress</a>
</h3>
<figure class="post_image"><a href="https://elements.envato.com/testimonials-showcase-for-wordpress-excited-8UD53AB"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg" alt="Testimonials Showcase for WordPress — Excited!" loading="lazy" width="870px" height="374px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg" alt="Testimonials Showcase for WordPress — Excited!" loading="lazy" width="650px" height="282px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg" alt="Testimonials Showcase for WordPress — Excited!" loading="lazy" width="380px" height="170px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/EF53868C-DDBF-485A-9960-13175CF65DFA.jpeg 2x"></a></figure>
<div class="_1LXMQinR">
<a href="https://elements.envato.com/testimonials-showcase-for-wordpress-excited-8UD53AB" target="_blank" rel="noopener">Excited! Testimonial Showcase</a> is​ a premium multi-use WordPress plugin with the ​main purpose of building an awesome testimonials showcase on your website or blog. </div>
<div class="_1LXMQinR"> </div>
<div class="_1LXMQinR">
<p>This WordPress testimonial plugin with star ratings, available exclusively on Envato Elements, is packed with exciting features like:</p>
<ul>
<li>beautiful layouts and templates that you can customize to your heart's delight</li>
<li>testimonial builder with eye-catching presentation styles: classic grid, grid with tooltips, single testimonial with or without slider, and widgets</li>
<li>rating submission with approval system</li>
<li>supports rich snippets for search engines </li>
<li>shortcode to place a submission form anywhere on your website</li>
</ul>
<p>The plugin is 100% responsive, and the summary block fits any container. In addition, it's compatible with Visual Composer, Mailchimp, and the WPML translation plugin. </p>
<h2>Star Rating Plugins Exclusively on CodeCanyon</h2>
</div>
</div>
</div>
</div>
</div>
<p>There are currently about <a href="https://codecanyon.net/category/wordpress?term=star%20rating" target="_blank" rel="noopener">70 premium WordPress star rating plugins</a> available on CodeCanyon. All of them serve some unique purpose, like adding a star rating field to different forms or allowing users to review a product or service on your website.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=star%20rating" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png" alt="WordPress Star Rating Plugins CodeCanyon" loading="lazy" width="870px" height="560px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png" alt="WordPress Star Rating Plugins CodeCanyon" loading="lazy" width="650px" height="420px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png" alt="WordPress Star Rating Plugins CodeCanyon" loading="lazy" width="380px" height="249px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png 2x"></a></figure>
<p>The price for some of these star rating plugins starts from as low as $7. The fact that you get free lifetime updates and six months of free support makes buying them a very good deal.</p>
<p>Here is a brief review of the best star rating plugins that you can buy on CodeCanyon:</p>
<h3>6. <a href="https://codecanyon.net/item/rating-form/10357679" target="_blank" rel="external noopener">Rating Form</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/rating-form/10357679"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg" alt="Rating Form" loading="lazy" width="870px" height="627px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg" alt="Rating Form" loading="lazy" width="650px" height="470px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg" alt="Rating Form" loading="lazy" width="380px" height="277px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/67AD679C-25AC-4619-8D52-8C8ABFE6A428.jpeg 2x"></a></figure>
<p>This is one of the best WordPress star rating plugins on CodeCanyon. It is highly rated and receives updates at regular intervals. Each update also adds a lot of new features to the plugin.</p>
<p>The ratings are updated using AJAX, and a nice spinning animation is shown while the plugin updates the rating in the database. The results are immediately visible on the webpage once a user submits the ratings.</p>
<p>You can choose from different rating images provided by the plugin or upload your own custom images. You can add star ratings to any post or webpage using shortcodes. It is also possible to use the ratings with comments by using the <code class="inline">comment_id</code> attribute in shortcodes.</p>
<h3>7. <a href="https://codecanyon.net/item/ap-custom-testimonials-for-wordpress/16350828" target="_blank" rel="external noopener">AP Custom Testimonial Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ap-custom-testimonials-for-wordpress/16350828"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg" alt="AP Custom Testimonial Pro - Plugin To Showcase User/Google Places Testimonials for WordPress" loading="lazy" width="870px" height="741px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg" alt="AP Custom Testimonial Pro - Plugin To Showcase User/Google Places Testimonials for WordPress" loading="lazy" width="650px" height="554px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg" alt="AP Custom Testimonial Pro - Plugin To Showcase User/Google Places Testimonials for WordPress" loading="lazy" width="380px" height="325px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/CC9A60D2-C735-4867-BAF1-DEB57EB1802C.jpeg 2x"></a></figure>
<p>The AP Custom Testimonial Pro plugin also allows you to showcase reviews and testimonials from your clients and customers on your website.</p>
<p>The WordPress testimonial plugin with star ratings comes with 12 different layouts to display the user reviews. It also offers some other unique features like embedding videos in the testimonials or only displaying certain user reviews based on their ID. You can also optionally add links to the social media accounts of clients who write a review.</p>
<p>The plugin gives you granular control over all aspects of the review. This includes things like the image border color, review title color, review content color, etc.</p>
<p>The shortcode generator that comes with this plugin makes it incredibly easy for you to create custom shortcodes to display the testimonials exactly the way you want.</p>
<h3>8. <a href="https://codecanyon.net/item/bne-testimonials-pro-wordpress-testimonials-and-reviews/20475779" target="_blank" rel="external noopener">BNE Testimonials Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bne-testimonials-pro-wordpress-testimonials-and-reviews/20475779"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg" alt="BNE Testimonials Pro - WordPress Testimonials and Reviews" loading="lazy" width="870px" height="537px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg" alt="BNE Testimonials Pro - WordPress Testimonials and Reviews" loading="lazy" width="650px" height="403px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg" alt="BNE Testimonials Pro - WordPress Testimonials and Reviews" loading="lazy" width="380px" height="239px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/D360EE57-4D78-49D4-9827-83594FB28260.jpeg 2x"></a></figure>
<p>You can use the WordPress BNE Testimonials Pro plugin to display testimonials and reviews anywhere on your website.</p>
<p>The plugin offers a large variety of customization and layout options for the reviews. You can choose from four different layouts: list, slider, thumbnail slider, and masonry grid. There are also four different themes: simple, default, bubbles, and cards.</p>
<p>The star ratings incorporate Schema.org tags to make sure that the rich snippets for the review are visible in search results.</p>
<p>One big advantage of using this plugin is that it offers the ability to import reviews from other platforms like Facebook, Google, and Yelp. So, if your users have written any reviews about your business on Facebook, they will be automatically pulled and added to your own website.</p>
<h3>9. <a href="https://codecanyon.net/item/ratings-reviews-plugin-for-wordpress/25458834" target="_blank" rel="noopener">Ratings and Reviews Plugin for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/ratings-reviews-plugin-for-wordpress/25458834"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg" alt="Ratings &amp; Reviews plugin for WordPress" loading="lazy" width="870px" height="626px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg" alt="Ratings &amp; Reviews plugin for WordPress" loading="lazy" width="650px" height="469px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg" alt="Ratings &amp; Reviews plugin for WordPress" loading="lazy" width="380px" height="277px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/C84187E0-B712-492F-9B30-B02AEA4719B6.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/ratings-reviews-plugin-for-wordpress/25458834" target="_blank" rel="noopener">Ratings and Reviews plugin for WordPress</a> allows you to set up a single rating or multi-ratings for a review. The plugin displays a list of reviews and adds a review button, submission form, stars, and ratings.</p>
<p>For multi-rating, you can configure any number of rating criteria like usability, comfort, size, price, service, and so on. Users will rate each criterion separately.  </p>
<p>You can also place ratings and reviews on any WooCommerce products and display the product price along with the review rating in the reviews slider widget on the product page or a separate single review page. </p>
<h3>10. <a href="https://codecanyon.net/item/wp-facebook-review-showcase-fb-page-review-plugin-for-wordpress/22592187" target="_blank" rel="noopener">WP Facebook Review Showcase</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-facebook-review-showcase-fb-page-review-plugin-for-wordpress/22592187"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg" alt="WP Facebook Review Showcase - FB Page Review Plugin for WordPress" loading="lazy" width="870px" height="564px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg" alt="WP Facebook Review Showcase - FB Page Review Plugin for WordPress" loading="lazy" width="650px" height="423px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg" alt="WP Facebook Review Showcase - FB Page Review Plugin for WordPress" loading="lazy" width="380px" height="250px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/7BF17110-9D0F-4F67-8735-75599F9867B7.jpeg 2x"></a></figure>
<p>Using <a href="https://codecanyon.net/item/wp-facebook-review-showcase-fb-page-review-plugin-for-wordpress/22592187" target="_blank" rel="noopener">WP Facebook Review Showcase</a>, you can add your starred Facebook reviews on your website. You can display them in eye-popping fashion thanks to ten beautifully designed templates for page reviews with user ratings and ten beautifully designed badge templates with ribbons attached. Each template is fully equipped with a variety of animation styles.</p>
<p>You can configure the reviews display to showcase only five-star reviews from Facebook on your website. Reviews can also be displayed by pagination to give your audience the freedom to view as many as they want. </p>
<p>Use shortcodes to embed your reviews on any of your pages. And you also get the chance to display your reviews in widget areas in the sidebar or footer.</p>
<p>A caching option is also built into the plugin to help you optimize your site and make the pages load faster. The plugin is completely responsive to all screen sizes and resolutions.</p>
<h3>11. <a href="https://codecanyon.net/item/gravity-forms-star-rating-field/19647571" target="_blank" rel="external noopener">Gravity Forms Star Rating Field</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/gravity-forms-star-rating-field/19647571"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg" alt="Gravity Forms Star Rating Field" loading="lazy" width="870px" height="528px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg" alt="Gravity Forms Star Rating Field" loading="lazy" width="650px" height="397px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg" alt="Gravity Forms Star Rating Field" loading="lazy" width="380px" height="235px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/4348BBEA-242A-42A2-9F5E-FA554438930D.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/gravity-forms-star-rating-field/19647571" target="_blank" rel="external noopener">Gravity Forms Star Rating Field</a> is a rating form plugin that allows you to add star rating fields to all your Gravity Forms.</p>
<h3>12. <a href="https://codecanyon.net/item/contact-form-7-star-rating-field/20561177" target="_blank" rel="external noopener">Contact Form 7 Star Rating Field</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/contact-form-7-star-rating-field/20561177"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png" alt="Contact Form 7 Star Rating Field" loading="lazy" width="870px" height="656px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png" alt="Contact Form 7 Star Rating Field" loading="lazy" width="650px" height="491px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png" alt="Contact Form 7 Star Rating Field" loading="lazy" width="380px" height="289px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/06182AAF-E449-46D7-8973-B6606CADA075.png 2x"></a></figure>
<p><a href="https://codecanyon.net/item/contact-form-7-star-rating-field/20561177" target="_blank" rel="external noopener">Contact Form 7 Star Rating Field</a> lets you add star rating fields to any of your Contact Form 7 forms. There are 12 different customization options available.</p>
<p>This rating form plugin works with all versions of the Contact Form 7 plugin, and you can also make the rating field required for form submission. The plugin also allows you to set a default rating value for the field.</p>
<p>One more feature that you will find useful is the ability to include rating results in an email using a shortcode.</p>
<h3>13. <a href="https://codecanyon.net/item/rating-stars-messages-for-woocommerce/30570501" target="_blank" rel="noopener">Rating Stars Messages for WooCommerce</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/rating-stars-messages-for-woocommerce/30570501"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg" alt="Rating Stars Messages for WooCommerce" loading="lazy" width="870px" height="596px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg" alt="Rating Stars Messages for WooCommerce" loading="lazy" width="650px" height="447px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg" alt="Rating Stars Messages for WooCommerce" loading="lazy" width="380px" height="264px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/636D45A6-BA3C-413D-860D-6758421D8545.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/rating-stars-messages-for-woocommerce/30570501" target="_blank" rel="noopener">Rating Stars Messages for WooCommerce</a> allows you to create flexible and catchy messages on the product page based on the product rating. This plugin can be used both as a complete rating stars replacement or as an addition to it. This creates engagement and a positive mood for the customer and can help you increase sales.</p>
<h2>Free WordPress Star Rating Plugins</h2>
<p>Before listing some free WordPress star rating plugins, I would like to mention that using premium plugins comes with its own advantages. The premium plugin developers are more likely to provide regular updates and solve any issues that you might be facing with the use of these plugins. This is especially true for the best-sellers on CodeCanyon or Elements.</p>
<p>Also, the premium plugins generally offer a more polished design to give your website a professional look. But sometimes a free plugin is the right choice for a limited budget—I've pulled together a few of these free plugins below.</p>
<h3>14. <a href="https://wordpress.org/plugins/gd-rating-system/" target="_blank" rel="noopener">GD Rating System</a>
</h3>
<figure class="post_image"><a href="https://wordpress.org/plugins/gd-rating-system/"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg" alt="GD Rating System" loading="lazy" width="870px" height="461px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg" alt="GD Rating System" loading="lazy" width="650px" height="347px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg" alt="GD Rating System" loading="lazy" width="380px" height="207px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/CBAB5A73-1FEF-4E95-81A5-26B24294E355.jpeg 2x"></a></figure>
<p>With <a href="https://wordpress.org/plugins/gd-rating-system/" target="_blank" rel="noopener">GD Rating System</a>, you can rate anything—including posts, custom posts, comments, users, and more. You can also rate one or more categories. It supports rich snippets, post integration, and comment integration. With shortcodes, you can place ratings anywhere on your website. </p>
<h3>15. <a href="https://wordpress.org/plugins/wp-customer-reviews/" target="_blank" rel="noopener">WP Customer Reviews</a>
</h3>
<figure class="post_image"><a href="https://wordpress.org/plugins/wp-customer-reviews/"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg" alt="WP Customer Reviews" loading="lazy" width="870px" height="497px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg" alt="WP Customer Reviews" loading="lazy" width="650px" height="374px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg" alt="WP Customer Reviews" loading="lazy" width="380px" height="222px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/8590E268-329D-4B99-BA9F-06DEBDE5A1A3.jpeg 2x"></a></figure>
<p>Get ratings from users using <a href="https://wordpress.org/plugins/wp-customer-reviews/" target="_blank" rel="noopener">WP Customer Reviews</a>. This multisite and multiuser star rating plugin allows you to set up a specific page on your blog to receive testimonials from customers about your business or service. Customers can write reviews about products you carry. All reviews are moderated and can include images. Widgets can be customized, and there is spam protection. In addition to rich snippet support, this lightweight plugin has caching to help your pages load faster. </p>
<h3>16. <a href="https://wordpress.org/plugins/site-reviews/" target="_self">Site Reviews</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34474/image/site_reviews.png" alt="Site Reviews" loading="lazy" width="870px" height="308px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34474/image/site_reviews.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34474/image/site_reviews.png" alt="Site Reviews" loading="lazy" width="650px" height="233px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34474/image/site_reviews.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34474/image/site_reviews.png" alt="Site Reviews" loading="lazy" width="380px" height="142px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34474/image/site_reviews.png 2x"></figure>
<p>This plugin is more suited for people who want to allow users to provide reviews in a manner similar to websites like TripAdvisor or Yelp. It comes with a nice set of features that you can see on the <a href="https://wordpress.org/plugins/site-reviews/" target="_blank" rel="external noopener">plugin description</a> page.</p>
<h3>17. <a href="https://wordpress.org/plugins/yet-another-stars-rating/" target="_self">Yasr—Yet Another Stars Rating</a>
</h3>
<figure class="post_image"><a href="https://wordpress.org/plugins/yet-another-stars-rating/"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg" alt="Yasr – Yet Another Stars Rating" loading="lazy" width="870px" height="573px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg" alt="Yasr – Yet Another Stars Rating" loading="lazy" width="650px" height="430px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg" alt="Yasr – Yet Another Stars Rating" loading="lazy" width="380px" height="254px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/36677/image-upload/4BBFC1A6-9185-4871-ADA1-5E11BDE6E2CA.jpeg 2x"></a></figure>
<p><a href="https://wordpress.org/plugins/yet-another-stars-rating/" target="_blank" rel="external noopener">This plugin</a> comes with two different types of ratings. The first type is provided by the post author. This is ideal for websites that publish reviews of different products and services. The second type gives your visitors the ability to vote.</p>
<h3>18. <a href="https://wordpress.org/plugins/rate-my-post/" target="_self">Rate My Post—WP Post Rating</a>
</h3>
<p>People who are only looking for a WordPress star rating plugin so that they can allow users to rate their posts and pages should consider using the <a href="https://wordpress.org/plugins/rate-my-post/" target="_blank" rel="external noopener">Rate My Post</a> WordPress plugin. It will allow you to easily add ratings to all your posts and pages using shortcodes.</p>
<h2>Benefits of Using Star Ratings</h2>
<p>A website with a built-in customer review and star rating component is easily recognized by search engines. Allowing users to leave their reviews and star ratings on different aspects of your business like products, blog posts, etc., has many benefits for your business. </p>
<h4>Star Ratings Increase Engagement and Traffic</h4>
<p>They can vastly increase engagement and traffic to your website by boosting your site's search engine rankings for certain searches. </p>
<h4>Star Ratings Are Easily Picked Up by Search Engines</h4>
<p>Reviews are a source of fresh content to search engines. It's why search results include customer reviews and star ratings from websites. This builds your credibility. </p>
<h4>Star Ratings Offer Great Opportunities for Improvement</h4>
<p>A customer may like your delicious food but they are not impressed by your customer service. For this reason, they give you three stars instead of five. You now have a chance to take their feedback and improve where your services are lacking. </p>
<h2>Ways You Can Use Star Ratings on Your Website</h2>
<p>Having looked at best practices, let's now explore ways you can use star ratings on your website.</p>
<p>The most popular use of star ratings is to rate products or blog posts. But you can expand the uses of star ratings to include many other aspects of your business by doing the following:</p>
<ul>
<li>Let customers upload photos of themselves using your products and allow other users to comment and give star ratings for the photos.</li>
<li>Let customers upload videos of themselves using your product and allow other users to leave comments and rate the videos.</li>
<li>Let customers rate reviews written by others. Use prompts like: was this review helpful?</li>
</ul>
<p>This is how you create engagement that makes the website active in the eyes of search engines that are always looking for fresh content. </p>
<h4>Promotion</h4>
<p>If you're running a sales promotion, how about letting customers rate the promotion? It creates a lot of buzz that helps your promotion take off and become successful. Also, ratings help give social proof to the promotion, letting other customers know if it's worth their time. </p>
<h4>Blog Topic Suggestions</h4>
<p>You can ask customers to suggest topics for your blog and have other customers weigh in with their ratings. This way, you can keep your content fresh by writing something that's relevant to your customers. In addition, you build a community of users who feel their feedback is valued. </p>
<h2>How to Get Customers to Submit Ratings</h2>
<h4>Prominently Display Review Tools</h4>
<p>Let customers know they can leave their reviews and make it easy for them to do so. It's easy. Prominently display tools that invite them to leave ratings or reviews. You can use prompts like "rate this product", "review this product", and so on.  </p>
<h4>Email Reminders</h4>
<p>Send email reminding customers to review products they've purchased. Knowing the lead times allows you to send out the email after customers have received their products. You can ask them to rate different aspects: customer service, delivery time, the product itself, and more. </p>
<h4>Incentives Are a Win-Win</h4>
<p>When you offer customers coupons for their next purchase in exchange for their reviews and ratings, it's a win-win for both you and your customers. </p>
<h2>Best Practices to Keep in Mind When Using Star Rating Plugins</h2>
<p>The ultimate goal of using these star rating plugins is to help your website visitors. So here are some guidelines that you can follow to use them in a way that benefits the visitors. </p>
<h3>1. Place Ratings Only in Important Places</h3>
<p>If you are reviewing a product or service for your visitors, make sure that you don't place the same ratings in ten different places. If you are writing a detailed review of the product, it is acceptable to provide different ratings for different aspects like the design, quality, pricing, etc. However, don't use the same overall 8/10 rating in six different places in a post.</p>
<h3>2. Use Rich Snippet Data With the Correct Attributes</h3>
<p>Search engines usually display star ratings in their search results only when they think that it will provide some useful information. For example, let's say you use rich snippets that display star ratings for products but use attributes that indicate that the rating is for posts. In such cases, the search engines might not show the ratings in their search results at all. So make sure that the rich snippet data to show the ratings has the correct attributes.</p>
<h2>Final Thoughts</h2>
<p>In this post, we have briefly reviewed both free and premium WordPress star rating plugins that you can add to your website. The aim of the post was to include the best WordPress star rating plugins for certain tasks like user testimonials, form fields, and product reviews.</p>
<h2>The Best WordPress Plugins on CodeCanyon</h2>
<p>If you are looking for a WordPress plugin for any use, take a look at the premium <a href="https://codecanyon.net/category/wordpress" target="_blank" rel="external noopener">WordPress plugins</a> on CodeCanyon. Hopefully, one of the plugins listed there will meet all your needs.</p>
<figure class="post_image"><a href="https://codecanyon.net/popular_item/by_category?category=wordpress" target="_self"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg" alt loading="lazy" width="870px" height="647px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg" alt loading="lazy" width="650px" height="485px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg" alt loading="lazy" width="380px" height="286px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg 2x"></a></figure>
<p>Here are a few of the best-selling and hot new WordPress plugins available on CodeCanyon for 2021.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-visual-composer-addons-extensions-of-2017--cms-28733"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WPBakery Page Builder (Visual Composer) Addons and Extensions of 2021</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/8-best-wordpress-slider-carousel-plugins-of-2017--cms-28592"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/28592/preview_image/slider.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/28592/preview_image/slider.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/30/posts/28592/preview_image/slider.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/30/posts/28592/preview_image/slider.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/28592/preview_image/slider.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/28592/preview_image/slider.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">24 Best WordPress Slider &amp; Carousel Plugins of 2021</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/20-best-wordpress-calendar-plugins-and-widgets--cms-25906"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/25906/preview_image/calendar-c.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/25906/preview_image/calendar-c.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/25906/preview_image/calendar-c.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/25906/preview_image/calendar-c.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/25906/preview_image/calendar-c.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/25906/preview_image/calendar-c.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">30 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-popup-opt-in-wordpress-plugins--cms-28617"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28617/preview_image/opt-in.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28617/preview_image/opt-in.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/34/posts/28617/preview_image/opt-in.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/34/posts/28617/preview_image/opt-in.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/34/posts/28617/preview_image/opt-in.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/34/posts/28617/preview_image/opt-in.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">27 Best Popup &amp; Opt-in WordPress Plugins</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
</ul>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/franc-lucas" target="_self">Franc Lucas</a>. Franc is a writer for Envato Tuts+ who enjoys exploring the world of SaaS.</em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-03-30T15:34:43+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[10+ Best WordPress Twitter Widgets]]></title>
      <link>//shineyrock.com/blog/read/10-best-wordpress-twitter-widgets</link>
      <guid>https://shineyrock.com/blog/read/10-best-wordpress-twitter-widgets#When:14:13:12Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>As a website owner, you should always try to use all the tools at your disposal to increase visitor traffic to your website. For many websites, more traffic drives up revenue to further expand business or improve the quality of the services you currently provide. Social media plays an important role when it comes to driving traffic to a website.</p>
<p>Proper use of social media helps businesses in two ways:</p>
<ol>
<li>First, it brings visitors and clients from sources other than search engines.</li>
<li>Second, it gives followers a way to interact with you in places other than your website.</li>
</ol>
<p>One of the most popular social media platforms for engagement with customers is Twitter. In this post, I'll list the best WordPress Twitter widgets that you can start using today.</p>
<h2>WordPress Twitter Widgets on CodeCanyon</h2>
<p>There are currently <a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="external noopener">over 250 WordPress widgets related to Twitter</a> available on CodeCanyon. You can use them to do all kinds of things like showing tweet and follow buttons, fetching the feed of a Twitter user or hashtag, or automatically posting tweets about the latest article on your website.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=twitter" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="850px" height="544px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="630px" height="403px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="360px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"></a></figure>
<p>The price of these plugins starts from as low as $6. The best sellers offer regular updates and a lot of features. You also get six months of free support. This should be enough to help you get started with your website.</p>
<h2>Best WordPress Twitter Widgets and Plugins</h2>
<p>Here are the top seven WordPress widgets and plugins that you can buy on CodeCanyon and add to your website:</p>
<h3>1. <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener">Twitter Feed—WordPress Twitter Plugin</a>
</h3>
<p>This <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener">Twitter feed plugin by Elfsight</a> displays a Twitter feed for a specific profile or a hashtag directly on a website. As a result, people start engaging more with your website as well as the Twitter profile.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png" alt="Elfsight Twitter Feed" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png 2x"></a></figure>
<p>The plugin has multiple templates to display Twitter feeds on your website. You can display these feeds for any username you want or any hashtag that your website visitors and clients are likely to use.</p>
<p>Sometimes, visitors might not directly express their satisfaction with your service on your website. If your clients usually tweet good things about you on Twitter, you can use this plugin to display those tweets on your website as testimonials.</p>
<p>The plugin is fully compatible with WordPress and works with all WordPress themes, including many popular ones that you find on CodeCanyon. Ensure that you take a look at the Elfsight Twitter Feed plugin!</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-responsive-wordpress-themes--cms-29973"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="850px" height="589px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="630px" height="436px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy" width="360px" height="249px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">31+ Best Responsive WordPress Themes (For Sites in 2021)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li></ul>
<h3>2. <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener">AccessPress Twitter Feed Pro</a>
</h3>
<p>The <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener">AccessPress Twitter Feed Pro WordPress plugin</a> also allows you to showcase Twitter feeds on a website. The feed may come from a single user account, multiple user accounts, or specific hashtags.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/access_press.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/access_press.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/access_press.jpg" alt="AccessPress Twitter Feed Pro" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/access_press.jpg 2x"></a></figure>
<p>The plugin has three different modes or layouts—called default mode, slider mode, and ticker mode—to display the latest tweets from your feed.</p>
<p>There are more than 20 different templates for displaying the feed, and they all look absolutely stunning. You can easily choose a template that looks great on your own website.</p>
<p>The plugin also added a lot of new features with its recent update. This includes things like showing user cards, displaying retweet information, and a shortcode generator to make the plugin as user-friendly as possible.</p>
<p>If users click on a video or image inside your Twitter feed, it will open in a nicely designed lightbox.</p>
<h3>3. <a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener">Twitter Plus</a>
</h3>
<p>The <a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener">Twitter Plus</a> WordPress plugin makes it incredibly easy for you to add Twitter buttons to any post or page on your website. It will automatically add Twitter buttons for tweet, follow, mention, or hashtags on all pages and posts that you select.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-plus/16852014" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter-plus.png" alt="Twitter Plus" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter-plus.png 2x"></a></figure>
<p>There are a couple of customization options that are available for each type of button. For example, you can set the tweet text to the page title or some other custom value for the tweet, hashtag, and mention buttons.</p>
<p>You can also choose to show either the username or the follower count (or both) on the follow buttons.</p>
<p>The plugin lets you choose the buttons that you want to show on different posts. You don't have to show all four of them everywhere. Just pick the ones you like and tell the plugin to add them either at the top or bottom of your page or post.</p>
<h3>4. <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener">WordPress to Twitter—Twitter Bot</a>
</h3>
<p>Running and maintaining a website takes a lot of work. Therefore, it makes sense to automate some simple tasks and use the time you saved to improve the website.</p>
<p>The <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener">WordPress to Twitter</a> plugin allows you to do exactly that. Once you purchase and install the plugin, you can set it up to tweet different types of posts from categories that you select.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/wp2twitter.png" alt="WordPress to Twitter - Twitter Bot" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/wp2twitter.png 2x"></a></figure>
<p>You can specify the delay time that will determine the interval between different tweets. You can also tell the plugin if it should include the post title or link in the tweets. Each tweet can also contain some custom additional text, a mention, or hashtags.</p>
<p>It is possible to specify the time interval within which a post has been published to shortlist it for automated tweets.</p>
<p>All these features make this plugin a good tool to save time and automate some of your social media outreach workload.</p>
<h3>5. <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener">Twitter Feed Grid With Carousel for WordPress</a>
</h3>
<p>This is yet another plugin that you can use to show the Twitter feed for any particular user or hashtag. However, there are a few things that make this one different from the others.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png" alt="Twitter Feed Grid with Carousel" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png 2x"></a></figure>
<p>You can either show the Twitter feed as a grid or as a carousel. When shown as a grid, the plugin comes with a bunch of options to control things like the number of columns on desktops, tablets, and mobile devices. You can also choose to use a box layout or a full-width layout.</p>
<p>The plugin comes with seven different grid styles to display the feed. When visitors hover over any tweet in the feed, the plugin will display social share buttons to allow users to directly share the tweets on their favorite social media platform.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="850px" height="340px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="630px" height="252px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png" alt="Twitter feed displayed in grid style" loading="lazy" width="360px" height="144px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png 2x"></figure>
<p>The Carousel also offers eight more completely different layouts to display a bunch of tweets on the website. You should definitely check out <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" target="_blank" rel="external noopener">the live preview</a> of this plugin.</p>
<h3>6. <a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" target="_blank" rel="external noopener">WP Tweet Selection—Twitter Highlighter</a>
</h3>
<p>The <a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" target="_blank" rel="external noopener">WP Tweet Selection plugin</a> gives your users a way to share the articles from your website on Twitter by selecting the text that they like the most.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg" alt="WP Tweet Selection" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg" alt="WP Tweet Selection" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg" alt="WP Tweet Selection" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg 2x"></a></figure>
<p>For example, if a user likes a statistic that you mentioned in your article, they could select it using regular text selection, and then the plugin will show them a prompt to share the selected text on Twitter.</p>
<p>This is a great way to increase the engagement of visitors with your website and give them the ability to customize the tweet. It can also bring more traffic back to your website than simply displaying the title of the article with each share.</p>
<p>You can control the appearance of the prompt by setting values for options like its color, size, and the text that appears inside it—for example, "<strong>Share on Twitter</strong>".</p>
<h3>7. <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener">Social Locker for WordPress</a>
</h3>
<p>Almost every website places social share buttons somewhere on its pages in the hope that users will share the content that they like. While some people do click these share buttons, most visitors just ignore them.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="850px" height="442px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="630px" height="328px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg" alt="Social Locker for WordPress" loading="lazy" width="360px" height="187px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg 2x"></a></figure>
<p>This plugin, called <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" target="_blank" rel="external noopener">Social Locker for WordPress</a>, can actually help you get more people to share your articles. The basic idea is that some of the content on the webpage is hidden behind a message that asks people to either tweet about the article, like it, or follow you on Facebook. Whichever option they choose, it will help you get more visibility on social media platforms.</p>
<p>Besides articles, you can use it to lock all kinds of things like videos, PDFs, videos, and download files. Give the plugin a try, and see your Twitter followers go up!</p>
<h3>8. <a href="https://codecanyon.net/item/easy-twitter-embedded-feed/25548193" target="_blank" rel="noopener">Easy Twitter Embedded Feed</a>
</h3>
<p>Sometimes all you need is something simple and simplicity works best.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/easy-twitter-embedded-feed/25548193"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="850px" height="310px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="630px" height="230px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg" alt="Easy Twitter Embedded Feed" loading="lazy" width="360px" height="131px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/EasyEmbed.jpg 2x"></a>
<figcaption>Easy Twitter Embedded Feed</figcaption>
</figure>
<p>If you're looking for a simple WordPress Twitter Widget to display your recent tweets, some solutions are overkill and a little too complex.</p>
<p>Easy Twitter Embedded Feed is a great little plugin that enables the use of shortcodes for embedding a Twitter feed. Customize the height and width. This comes with multi-language support.</p>
<h3>9. <a href="https://codecanyon.net/item/wp-social-stream-designer/26344658" target="_blank" rel="noopener">Social Stream Designer</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-social-stream-designer/26344658"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="850px" height="310px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="630px" height="230px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/SocialStream.jpg" alt="Social Stream Designer" loading="lazy" width="360px" height="131px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/SocialStream.jpg 2x"></a>
<figcaption>Social Stream Designer</figcaption>
</figure>
<p>Social Stream Designer is a WordPress Twitter plugin that's extremely versatile if you're looking for a WordPress Twitter plugin to showcase your tweets.</p>
<p>Made by an Envato Elite Author, Social Stream Designer gives you four templates with variations and six layouts. Choose from grid, list, masonry, horizontal slider, vertical slider and timeline. And customize further with drag-n-drop functionality. Great if you're looking for a twitter feed carousel.</p>
<p>It's not just Twitter, Social Stream Designer is the go-to plugin for integrating social networks on your WordPress site.</p>
<h3>10. <a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292" target="_blank" rel="noopener">Twitter Tweets Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="850px" height="310px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="630px" height="230px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg" alt="Twitter Tweets Pro" loading="lazy" width="360px" height="131px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/TwitterTweetsPro.jpg 2x"></a>
<figcaption>Twitter Tweets Pro</figcaption>
</figure>
<p>Twitter Tweets Pro is an advanced Twitter plugin for WordPress Twitter feeds. It displays Twitter feeds on a WordPress site and can be customized to match the site.</p>
<p>It may support multiple Twitter accounts without limitation. Features and benefits include:</p>
<ul>
<li>Multiple Twitter feeds with no limitations</li>
<li>Feeds of multiple Users, hashtags or search terms</li>
<li>Filter Tweets by hashtag or words</li>
<li>Display Tweets in Slider</li>
<li>Configurable number of tweets to display</li>
<li>Load more tweets</li>
<li>Feed background color</li>
<li>Tweet background color</li>
<li>Tweet font color</li>
<li>Tweet font size</li>
<li>Date text size</li>
<li>Date font weight</li>
<li>Link color</li>
<li>Link font size</li>
<li>Google Fonts</li>
<li>Tweet Actions (reply, retweet, like)</li>
<li>Share Tweets on Social Media</li>
<li>Update Twitter Status</li>
</ul>
<h3>11. <a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292" target="_blank" rel="noopener">WordPress Any Contact Us</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/wordpress-any-contact-us/23280292"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="850px" height="310px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="630px" height="230px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg" alt="WordPress Any Contact Us" loading="lazy" width="360px" height="131px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/31/posts/27127/image-upload/WPAnyContactUs.jpg 2x"></a>
<figcaption>WordPress Any Contact Us</figcaption>
</figure>
<p>WordPress Any Contact Us is a simple and powerful WordPress Twitter widget that gives you the ability to add awesome social shortcode buttons to any WordPress site.</p>
<p>This means that websites visitors can contact you easily via Twitter. </p>
<p>And it also includes contact methods via a range of other popular social media platforms, too!</p>
<p>Increase your revenue by connecting with clients wherever they are:</p>
<ul>
<li>Direct Email</li>
<li>Schedule Call</li>
<li>Shortcode and HTML In Popup</li>
<li>Typing Animation</li>
<li>Smart Message Popup</li>
<li>Fully Customizable</li>
<li>Smooth Animations</li>
<li>GDPR Ready</li>
<li>Beautifully Responsive</li>
<li>WhatsApp, Skype, Telegram, Twitter and much more…</li>
<li>Unlimited Social Contact</li>
<li>24/7 premium support.</li>
<li>Automated updates</li>
<li>And more…</li>
</ul>
<h2>Free WordPress Twitter Plugins</h2>
<p>If you are not sure about buying premium plugins right now, there are also many free WordPress Twitter plugins. However, they generally have some downsides like fewer features and slow support—if it's provided at all.</p>
<p>Now, here are some free WordPress Twitter plugins that you can try.</p>
<h3>12. <a href="https://wordpress.org/plugins/custom-twitter-feeds/" target="_self">Custom Twitter Feeds</a>
</h3>
<p>You can use the Custom Twitter Feeds plugin to display customizable and responsive tweets. The content of these tweets is also crawlable by search engines. The source of the feed can be any user or a specific hashtag.</p>
<h3>13. <a href="https://wordpress.org/plugins/wp-to-twitter/" target="_self">WP to Twitter</a>
</h3>
<p>The WP to Twitter plugin helps post tweets from WordPress to Twitter. You can also do a couple of other things with it, like displaying your recent tweets in the sidebar, etc.</p>
<h3>14. <a href="https://wordpress.org/plugins/social-locker/" target="_self">OnePress Social Locker</a>
</h3>
<p>The OnePress Social Locker WordPress plugin is simply a free version of the premium Social Locker plugin on CodeCanyon. It has limited features, but it should give you an idea of its capabilities.</p>
<h2>Tips for Using Twitter Widgets and Plugins</h2>
<p>There are a couple of things that you should be aware of when using these WordPress Twitter plugins on your website.</p>
<h3>1. Don't Fill Your Website With Twitter Feeds</h3>
<p>It may sound tempting to add Twitter feeds from different accounts and hashtags on your webpages because you get automatically generated content. However, don't overdo it. The feeds have to add some value to the website. If the visitors only wanted to see the Twitter feeds, they would just go to Twitter!</p>
<h3>2. Don't Put All Your Content Behind Social Lockers</h3>
<p>It is also important to not put all your content behind a social locker. Use it only when you have something unique and useful to offer. If every article on your website is behind a social locker, people will just start visiting your competition.</p>
<h3>3. Don't Use Too Many Social Sharing Buttons</h3>
<p>Unless you are focusing your marketing campaign exclusively on Twitter, you should not put the tweet, follow, mention, and other such buttons on every page. This, when combined with like and follow buttons from other networks, will become very distracting.</p>
<h2>Final Thoughts</h2>
<p>I hope that this article helped you find the perfect WordPress Twitter plugin for your website.</p>
<p>This small list of plugins covers all the important things that you might want to do, like showing your Twitter feed on your website or giving users an easy way to share your content on Twitter.</p>
<p>If you're looking for something that isn't covered in this article, make sure you check out some of the other <a href="https://codecanyon.net/category/wordpress/social-networking" target="_self">best-selling WordPress social networking plugins and widgets</a> on CodeCanyon.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress/social-networking" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="850px" height="544px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="630px" height="403px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png" alt="WordPress Twitter Widgets on Codecanyon" loading="lazy" width="360px" height="230px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png 2x"></a></figure>
<p>Which plugins do you use to increase your social media presence? Let us know in the comments below.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-03-25T14:13:12+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[20+ Best WordPress Booking and Reservation Plugins]]></title>
      <link>//shineyrock.com/blog/read/20-best-wordpress-booking-and-reservation-plugins</link>
      <guid>https://shineyrock.com/blog/read/20-best-wordpress-booking-and-reservation-plugins#When:01:21:16Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Are you looking for an automated booking or reservation plugin that saves you and your customers time? Are you tired of losing business to your competitors? Are you looking for a way to streamline your online appointments and bookings?</p>
<p>Your website should make it easy for guests to view, reserve, and book available appointments. This is where WordPress booking and reservation plugins can help you meet your online business goals.</p>
<p>So whatever your business—from haircuts to hotels, and from health salons to consulting firms—WordPress booking and reservations plugins help customers book appointments on your site any time of day or night.</p>
<figure class="embedded-video" data-video-embed="true" data-original-url="https://www.youtube.com/watch?v=hJiuQfLXvzU"><iframe data-src="//www.youtube.com/embed/hJiuQfLXvzU?rel=0" frameborder="0" allowfullscreen="allowfullscreen" loading="lazy"></iframe>
          <div class="video-preview-image youtube">

            <img loading="lazy" src="https://i.ytimg.com/vi/hJiuQfLXvzU/hqdefault.jpg">
            <svg class="play-button" height="100%" version="1.1" viewbox="0 0 68 48" width="68px" xmlns="http://www.w3.org/2000/svg">
              <path class="play-button-bg" d="M66.52,7.74c-0.78-2.93-2.49-5.41-5.42-6.19C55.79,.13,34,0,34,0S12.21,.13,6.9,1.55 C3.97,2.33,2.27,4.81,1.48,7.74C0.06,13.05,0,24,0,24s0.06,10.95,1.48,16.26c0.78,2.93,2.49,5.41,5.42,6.19 C12.21,47.87,34,48,34,48s21.79-0.13,27.1-1.55c2.93-0.78,4.64-3.26,5.42-6.19C67.94,34.95,68,24,68,24S67.94,13.05,66.52,7.74z" fill="#212121"></path>
              <path d="M 45,24 27,14 27,34" fill="#fff"></path>
            </svg>
          </div></figure>
<p>In this post, I'll share the best reservation plugins for WordPress today.</p>
<h2>The Best WordPress Booking and Reservation Plugins</h2>
<p>CodeCanyon offers a huge variety of <a href="https://codecanyon.net/category/wordpress/calendars?sort=sales#content" target="_blank" rel="external noopener">WordPress booking and reservation plugins</a> you can download and install.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress/calendars?sort=sales#content" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/34329/image/booking-reservation.jpg" alt="WordPress booking and reservation plugins" loading="lazy" width="870px" height="560px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/34329/image/booking-reservation.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/34329/image/booking-reservation.jpg" alt="WordPress booking and reservation plugins" loading="lazy" width="650px" height="420px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/34329/image/booking-reservation.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/34329/image/booking-reservation.jpg" alt="WordPress booking and reservation plugins" loading="lazy" width="380px" height="249px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/34329/image/booking-reservation.jpg 2x"></a></figure>
<p>Some of the best features include:</p>
<ul>
<li>easy customization and integration</li>
<li>translation-ready</li>
<li>ability to integrate with payment gateways like PayPal, Stripe, Square, or Mollie.</li>
</ul>
<h2>20+ Best WordPress Booking and Reservation Plugins for 2021</h2>
<p>Check our selection of some of the best booking plugins for WordPress. Here you'll find the <a href="https://codecanyon.net/category/wordpress/calendars?sort=sales" target="_blank" rel="external noopener">WordPress booking plugin</a> you need for your website:</p>
<h3>1. Best-Selling: <a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener">EventON—WordPress Event Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg" alt="EventON - WordPress Event Calendar Plugin" loading="lazy" width="870px" height="1249px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg" alt="EventON - WordPress Event Calendar Plugin" loading="lazy" width="650px" height="931px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg" alt="EventON - WordPress Event Calendar Plugin" loading="lazy" width="380px" height="541px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35998/image/EventON%20-%20WordPress%20Event%20Calendar%20Plugin.jpg 2x"></a></figure>
<p>Looking for the best booking plugin for WordPress? Check out EventON, our best-selling WordPress booking plugin. </p>
<p>EventON is packed with 200+ useful features, such as highly customizable repeating events, multiple event images, unlimited event creation, and various calendar layout designs.</p>
<p>With a 4.5-star rating and more than 50,000 sales, customers are very happy with this WordPress booking plugin. User EAAcalendar says:</p>
<blockquote>This calendar system is very, very all-encompassing. They made it extremely flexible and, to be honest, I have barely scratched the surface on all the features customizations that are possible.</blockquote>
<h3>2. Best-Selling: <a href="https://codecanyon.net/item/calendarize-it-for-wordpress/2568439" target="_blank" rel="external noopener">Calendarize it! for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/calendarize-it-for-wordpress/2568439" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg" alt="Calendarize it for WordPress" loading="lazy" width="870px" height="822px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg" alt="Calendarize it for WordPress" loading="lazy" width="650px" height="614px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg" alt="Calendarize it for WordPress" loading="lazy" width="380px" height="360px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35998/image/Calendarize%20it%20for%20WordPress.jpg 2x"></a></figure>
<p>Calendarize it! is another top-selling WordPress booking plugin. With more than 11,000 sales, users like it because it's packed with useful features and add-ons you can download with your purchase:</p>
<ul>
<li>WP Bakery Page Builder (Visual Composer) compatibility</li>
<li>event tickets with WooCommerce integration</li>
<li>Eventbrite tickets</li>
<li>external event sources </li>
<li>payment options</li>
<li>RSVP events</li>
</ul>
<p>User hiegl says:</p>
<blockquote>After two years of using this great plugin, I happily renew my 5 stars review and want to thank Richard and his team for the best support I got here on Envato. If you need a really flexible calendar, this is the best solution!</blockquote>
<h3>3. Best-Selling: <a href="https://codecanyon.net/item/booked-appointments-appointment-booking-for-wordpress/9466968" target="_blank" rel="external noopener">Booked—Appointment Booking for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/booked-appointments-appointment-booking-for-wordpress/9466968" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg" alt="Booked - Appointment Booking for WordPress" loading="lazy" width="870px" height="494px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg" alt="Booked - Appointment Booking for WordPress" loading="lazy" width="650px" height="371px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg" alt="Booked - Appointment Booking for WordPress" loading="lazy" width="380px" height="221px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35998/image/Booked%20-%20Appointment%20Booking%20for%20WordPress.jpg 2x"></a></figure>
<p>Booked is a powerful WordPress booking plugin that makes online booking a simple process. You can add as many calendars as you need and easily customize them.</p>
<p>Some of the best features of this WordPress reservation plugin are:</p>
<ul>
<li>front-end calendar as shortcode or widget</li>
<li>fully responsive</li>
<li>customer profile and appointment management</li>
<li>guest booking</li>
<li>lifetime updates</li>
<li>add-ons (included)</li>
<li>payments with WooCommerce </li>
<li>front-end agents</li>
<li>calendar feeds</li>
</ul>
<h3>4. Best-Selling: <a href="https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091" target="_blank" rel="external noopener">Bookly Pro—Booking &amp; Scheduling System</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg" alt="Bookly" loading="lazy" width="870px" height="444px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg" alt="Bookly" loading="lazy" width="650px" height="334px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg" alt="Bookly" loading="lazy" width="380px" height="200px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35230/image/46790FB1-F265-4216-B1EF-77A4722FB561.jpeg 2x"></a></figure>
<p>Bookly Pro WordPress Booking Plugin is a full-featured plugin that's easy to install, getting you up and running in a matter of seconds. It is fully customizable and mobile-ready, so customers can book appointments on the go. This WordPress booking plugin comes with an easy scheduling process that walks the user from booking to payment in a few simple steps.</p>
<p>The inclusion of SMS notifications, online payments, and Google Calendar sync sets it apart from many others.</p>
<p>Other notable features of this plugin include:</p>
<ul>
<li>compatible with WooCommerce</li>
<li>multi-language support</li>
<li>unlimited number of staff members and services</li>
<li>integration with most payment systems</li>
<li>ability to allow or prevent caching of pages with booking form</li>
</ul>
<h3>5. Best-Selling: <a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" target="_blank" rel="external noopener">Timetable Responsive Schedule for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg" alt="Timetable Responsive Schedule for WordPress" loading="lazy" width="870px" height="377px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg" alt="Timetable Responsive Schedule for WordPress" loading="lazy" width="650px" height="285px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg" alt="Timetable Responsive Schedule for WordPress" loading="lazy" width="380px" height="171px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35230/image/B01FA7C7-0949-4E0E-AAF4-4B0D34463699.jpeg 2x"></a></figure>
<p>Timetable is a powerful and easy-to-use schedule plugin for WordPress. It will help you to create a timetable view of your events in minutes!</p>
<p>It comes with booking functionality. You can take online reservations for any event within the available number of free slots.</p>
<p>Other awesome features include an events manager, event occurrences shortcode, timetable shortcode generator, and upcoming events widget. You can generate PDFs from your timetable view.</p>
<p>Fully compatible with Visual Composer, this WordPress booking and reservation plugin is perfect for your gym classes, school or kindergarten, medical departments, nightclubs and pubs, class schedules, meal plans, you name it.</p>
<h3>6. Trending: <a href="https://codecanyon.net/item/advance-seat-reservation-management-for-woocommerce/19984266" target="_blank" rel="external noopener">Advance Seat Reservation Management for WooCommerce</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/advance-seat-reservation-management-for-woocommerce/19984266" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg" alt="Advance Seat Reservation Management for WooCommerce" loading="lazy" width="870px" height="636px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg" alt="Advance Seat Reservation Management for WooCommerce" loading="lazy" width="650px" height="477px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg" alt="Advance Seat Reservation Management for WooCommerce" loading="lazy" width="380px" height="281px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/8FC5449A-7858-4B81-AB4D-575D1655C15A.jpeg 2x"></a></figure>
<p>Advance Seat Reservation Management for WooCommerce is suitable for businesses such as cinemas, trains, airlines, event venues, movie theatres, bus companies, and more.</p>
<p>Your customers can reserve seats through this WordPress reservation system plugin for WooCommerce. It works with WooCommerce products, carts, orders, and WordPress posts.</p>
<h3>7. Trending: <a href="https://codecanyon.net/item/hotel-booking-engine-for-wordpress/19603111" target="_blank" rel="external noopener">Hotel Booking WordPress Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/hotel-booking-engine-for-wordpress/19603111" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg" alt="Hotel Booking WordPress Plugin" loading="lazy" width="870px" height="404px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg" alt="Hotel Booking WordPress Plugin" loading="lazy" width="650px" height="305px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg" alt="Hotel Booking WordPress Plugin" loading="lazy" width="380px" height="183px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/5E598337-2EE2-41EC-960E-A4C4D44E0CB2.jpeg 2x"></a></figure>
<p>Hotel Booking is a complete hotel and vacation rental booking system. You can use this WordPress booking system for hotels, bed and breakfast, guest houses, apartments, villas, and even hostels.</p>
<p>It comes with all the functionality you need to run a fully functional hospitality business website and manage reservations. You can create beautiful listings of all your properties, control seasonal pricing and rates, and rent properties out online, with or without payment.</p>
<p>In addition, you can synchronize direct site reservations with popular travel channels via iCal through the admin channel manager.</p>
<h3>8. <a href="https://codecanyon.net/item/book-appointment-online-pro/22522265" target="_blank" rel="external noopener">Book An Appointment Online Pro</a> (With Video Conferencing)</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/book-appointment-online-pro/22522265" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg" alt="Book An Appointment Online Pro" loading="lazy" width="870px" height="534px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg" alt="Book An Appointment Online Pro" loading="lazy" width="650px" height="401px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg" alt="Book An Appointment Online Pro" loading="lazy" width="380px" height="238px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/335FF7E9-9FB6-4A50-9110-C67FD357FB4A.jpeg 2x"></a></figure>
<p>You can now provide remote services directly from your appointment booking plugin. You can do it from a phone or computer via video conference with built-in live chat. Video conferencing is between one employee and one customer.</p>
<p>This is what makes <a href="https://codecanyon.net/item/book-appointment-online-pro/22522265" target="_blank" rel="external noopener">Book An Appointment Online Pro</a> the WordPress appointment plugin of choice for medical centers, beauty and hair salons, or car services.</p>
<p>While this feature is available only to users with active support, the benefits you reap are immeasurably more than the extra cost you invest in extended support.</p>
<p>You can create three different types of schedules: regular working hours, custom schedule, and shifts. To help avoid double booking, users can book an appointment only by available time slots. They get SMS reminders, and they can also pay using PayPal or Stripe.</p>
<h3>9. <a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116?_ga=2.66945646.1968242203.1575528425-1709438589.1534264476" target="_blank" rel="external noopener">Bookme WordPress Booking Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116?_ga=2.66945646.1968242203.1575528425-1709438589.1534264476" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg" alt loading="lazy" width="870px" height="587px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg" alt loading="lazy" width="650px" height="440px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg" alt loading="lazy" width="380px" height="260px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/37A811CE-62EF-4E42-B2F7-B650B77DDE05.jpeg 2x"></a></figure>
<p>Bookme is a multi-purpose WordPress booking plugin that can be used by all kinds of businesses, ranging from beauty salons and fitness centers to educational institutions and medical centers.</p>
<p>You can set up a wide range of services at different prices and build custom fields depending on your requirements.</p>
<p>You can offer numerous booking types, including default booking, group booking, consultant booking, add to cart booking, free booking, and booking with WooCommerce.</p>
<p>Customers can receive SMS notifications via Twillio API. They can also pay with multiple payment systems such as Stripe or PayPal.</p>
<h3>10. <a href="https://codecanyon.net/item/rnb-woocommerce-rental-booking-system/14835145" target="_blank" rel="external noopener">RnB—WooCommerce Booking &amp; Rental Plugin</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/rnb-woocommerce-rental-booking-system/14835145" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg" alt="RnB WooCommerce Booking  Rental Plugin" loading="lazy" width="870px" height="441px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg" alt="RnB WooCommerce Booking  Rental Plugin" loading="lazy" width="650px" height="332px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg" alt="RnB WooCommerce Booking  Rental Plugin" loading="lazy" width="380px" height="198px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/2BC7512F-39EA-4658-AF45-8491917B2A87.jpeg 2x"></a></figure>
<p>If you want to build a booking business, then WooCommerce Booking and Rental Plugin will help you do just that. You will able to rent cars, bikes, dresses, tools, gadgets, and more.</p>
<p>You can add unlimited rental products, set your own pricing, block rental days and hours, set minimum and maximum booking days, have single-day booking, and set up a maximum time penalty.</p>
<p>You can set custom pricing for particular customers. The plugin also offers inventory management, and it's fully compatible with the latest WooCommerce and WordPress versions.</p>
<p>This WordPress booking plugin supports WPML, which allows your website to become multilingual.</p>
<h3>11. Trending: <a href="https://codecanyon.net/item/salon-booking-wordpress-plugin/15963435" target="_blank" rel="external noopener">Salon Booking WordPress Reservation Plugin</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/salon-booking-wordpress-plugin/15963435" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg" alt="Salon Booking Wordpress Plugin" loading="lazy" width="870px" height="344px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg" alt="Salon Booking Wordpress Plugin" loading="lazy" width="650px" height="260px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg" alt="Salon Booking Wordpress Plugin" loading="lazy" width="380px" height="157px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/B07427DF-42F9-446E-975A-D219BAC9A194.jpeg 2x"></a></figure>
<p>Salon Booking is a complete and easy-to-manage appointment booking system for busy salons. It will make it easy for customers to make reservations on your website, and it will save you a lot of time with management tasks.</p>
<p>Salon Booking is perfect for hairdressing salons, barber shops, beauticians, therapists, spas, clinics, sport facilities rentals, and more.</p>
<h3>12. <a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?s_rank=10" target="_blank" rel="external noopener">HBook Hotel Booking System</a>
</h3>
<figure class="post_image">
<figure class="post_image"><a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?_ga=2.104958531.1501047258.1564979420-1843124563.1539278404" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg" alt loading="lazy" width="870px" height="420px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg" alt loading="lazy" width="650px" height="316px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg" alt loading="lazy" width="380px" height="189px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35230/image/FC2D909D-DEAA-41B9-9CAF-808C5CFE6C73.jpeg 2x"></a></figure>
</figure>
<p>HBook is a powerful and versatile plugin that is ideally suited for anybody who owns a business in the hospitality industry: a hotel, B&amp;B, holiday apartment, or campground.</p>
<p>It comes equipped with a drag-and-drop form builder that lets you choose what customer details you want to gather. Its efficient booking management system includes:</p>
<ul>
<li>calendar view to see your bookings at a glance </li>
<li>reservation list in a table form to view details of all bookings, add comments, change accommodation, update remaining balance, or send emails.</li>
<li>multiple payment methods: Stripe, PayPal, Square, Cardlink, Mollie, and more. </li>
</ul>
<p>You can also synchronize your bookings with websites such as Airbnb, HomeAway, VRBO, and Booking.com. Finally, shortcode support allows you to add availability calendars, table rates, and booking forms anywhere on your website in seconds.</p>
<h3>13. <a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497?s_rank=16" target="_blank" rel="external noopener">Amelia—Enterprise-Level Appointment Booking</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497?s_rank=16" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg" alt loading="lazy" width="870px" height="576px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg" alt loading="lazy" width="650px" height="432px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg" alt loading="lazy" width="380px" height="255px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/17C6B4FA-3AC4-42B1-BE85-C0F644266527.jpeg 2x"></a></figure>
<p>Like the other plugins in this list, Amelia lets your customers make appointments at any time of day and night. This plugin is easy to customize, helping you build your appointment booking forms in no time. What stands apart with this plugin is that you can keep your customers and employees notified and reminded of their appointments in real time with SMS notifications.</p>
<p>Some features include:</p>
<ul>
<li>supports multiple employees, each with their services and availability schedule</li>
<li>supports multiple business locations</li>
<li>step-by-step appointment wizard makes booking easy</li>
<li>options to upsell during appointment booking </li>
<li>integration with WooCommerce, PayPal, and Stripe </li>
<li>supports on-site payments so your customers can pay in cash when they arrive</li>
</ul>
<h3>14. <a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=8" target="_blank" rel="external noopener">Events Plus—WordPress Events Calendar Registration &amp; Booking</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=8" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg" alt="Events Plus - WordPress Events Calendar Registration  Booking" loading="lazy" width="870px" height="490px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg" alt="Events Plus - WordPress Events Calendar Registration  Booking" loading="lazy" width="650px" height="368px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg" alt="Events Plus - WordPress Events Calendar Registration  Booking" loading="lazy" width="380px" height="219px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/BAB07542-3A52-4F67-9DC3-05049513EFA3.jpeg 2x"></a></figure>
<p><a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=1" target="_blank" rel="external noopener">Events Calendar Registration and Booking</a> plugin has got you covered if you want to:</p>
<ul>
<li>promote classes, seminars, workshops, conferences, or concerts on your WordPress website</li>
<li>set ticket prices for your events, create recurring events, or even accept donations for your events</li>
</ul>
<p>It gives you a quick glimpse of the latest events created, letting you sort them by categories, view payments, and keep track of your attendees.</p>
<p>Visitors will be able to register and pay online for those events via PayPal, Stripe, or Authorize.net. The plugin also comes with shortcodes for calendars and single events.</p>
<h3>15. Trending: <a href="https://codecanyon.net/item/car-rental-booking-system-for-wordpress/21663173" target="_blank" rel="external noopener">Car Rental Booking System for WordPress</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/car-rental-booking-system-for-wordpress/21663173" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg" alt="Car Rental Booking System for WordPress" loading="lazy" width="870px" height="690px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg" alt="Car Rental Booking System for WordPress" loading="lazy" width="650px" height="517px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg" alt="Car Rental Booking System for WordPress" loading="lazy" width="380px" height="304px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/EEBF5995-23CD-4DCF-8C69-E66E756AC0B5.jpeg 2x"></a></figure>
<p>To run a robust car rental business, you need an efficient, powerful online booking system. This is where Car Rental Booking System comes in. It is designed to support an unlimited number of locations, vehicles, and booking forms.</p>
<p>In addition to pricing rules for different cars, it has booking add-ons to order custom vehicle attributes and service restrictions related to the driver's age.</p>
<p>The booking process—together with multiple payment options—is simple and includes email and SMS notification.</p>
<h3>16. <a href="https://codecanyon.net/item/chauffeur-booking-system-for-wordpress/21072773" target="_blank" rel="external noopener">Chauffeur Booking System for WordPress</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/chauffeur-booking-system-for-wordpress/21072773" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg" alt="Chauffeur Booking System" loading="lazy" width="870px" height="585px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg" alt="Chauffeur Booking System" loading="lazy" width="650px" height="439px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg" alt="Chauffeur Booking System" loading="lazy" width="380px" height="259px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35230/image/A3826A41-864C-45E5-8AF3-2EC5D97F8511.jpeg 2x"></a></figure>
<p>Chauffeur Booking System is a powerful limo reservation WordPress plugin for companies of all sizes. It can be used by both limo and shuttle operators. It provides a simple, step-by-step booking process with online payments, e-mail and SMS notifications, WooCommerce, Google Calendar integration, and an intuitive back-end administration.</p>
<h3>17. <a href="https://codecanyon.net/item/latepoint-appointment-booking-reservation-plugin-for-wordpress/22792692" target="_blank" rel="external noopener">LatePoint—Booking Reservation Plugin for WordPress</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/latepoint-appointment-booking-reservation-plugin-for-wordpress/22792692" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg" alt="LatePoint - Appointment Booking  Reservation plugin for WordPress" loading="lazy" width="870px" height="311px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg" alt="LatePoint - Appointment Booking  Reservation plugin for WordPress" loading="lazy" width="650px" height="236px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg" alt="LatePoint - Appointment Booking  Reservation plugin for WordPress" loading="lazy" width="380px" height="143px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/DEC20208-2820-4F7B-B2C0-76EAA57B5A33.jpeg 2x"></a></figure>
<p>Complicated booking software takes forever to set up, slows down your website, and puts off customers. LatePoint to the rescue.</p>
<p>LatePoint is a simple, intuitive WordPress appointment booking plugin that makes it incredibly simple for your customers to schedule appointments.</p>
<p>The setup process takes less than five minutes. After that, you can create agents, add services, and set working hours. The rest is just a matter of inserting the booking shortcode button anywhere on your page, and your customers will be able to book appointments right away.</p>
<p>Customers can log in using popular social networks to pre-fill their personal information. Once they create an account, they can manage their reservations online.</p>
<p>LatePoint also has a powerful, clean, and modern admin dashboard for business owners to easily see reports of agent performance and manage services and customers.</p>
<h3>18. <a href="https://codecanyon.net/item/bookmify-appointment-booking-wordpress-plugin/23837899" target="_blank" rel="external noopener">Bookmify—Appointment Booking WordPress Plugin</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/bookmify-appointment-booking-wordpress-plugin/23837899" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg" alt="Bookmify - Appointment Booking WordPress Plugin" loading="lazy" width="870px" height="514px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg" alt="Bookmify - Appointment Booking WordPress Plugin" loading="lazy" width="650px" height="386px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg" alt="Bookmify - Appointment Booking WordPress Plugin" loading="lazy" width="380px" height="229px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/BCAD0178-B4C3-49F6-A521-2370162313FB.jpeg 2x"></a></figure>
<p>Bookmify is the go-to WordPress booking plugin for businesses in many sectors: health and wellness, government, education, fitness and recreation, entertainment, and more.</p>
<p>It is simple, functional, versatile, powerful, and modern. The online scheduling system is equipped with a powerful user interface to help manage your day-to-day events, keep up with your schedule and billing, and send email campaigns—all from one online app.</p>
<h3>19. <a href="https://codecanyon.net/item/arb-appointment-reservation-and-booking-solution-for-woocommerce/24888311" target="_blank" rel="external noopener">ARB - Appointment Reservation Booking Plugin</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/arb-appointment-reservation-and-booking-solution-for-woocommerce/24888311" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg" alt="ARB - Appointment Reservation Booking Plugin" loading="lazy" width="870px" height="449px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg" alt="ARB - Appointment Reservation Booking Plugin" loading="lazy" width="650px" height="338px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg" alt="ARB - Appointment Reservation Booking Plugin" loading="lazy" width="380px" height="202px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/7FC86E3B-0803-403E-ABBE-6D416CC713B2.jpeg 2x"></a></figure>
<p>The ARB Reservations plugin is the most flexible WordPress booking plugin for WooCommerce. It is perfect for businesses that require appointment booking: hotel rooms or resorts, appointments for courses, doctors, salons, renting products, and more.</p>
<p>What's really interesting about this WordPress booking plugin is that it has a "request for quote" feature, in which a customer can request a particular price and you can set custom pricing for that person.</p>
<h3>20. <a href="https://codecanyon.net/item/booknetic-wordpress-appointment-booking-and-schduling-system/24753467" target="_blank" rel="external noopener">Booknetic—WordPress Appointment Booking &amp; Scheduling System</a> </h3>
<figure class="post_image"><a href="https://codecanyon.net/item/booknetic-wordpress-appointment-booking-and-schduling-system/24753467" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg" alt="Booknetic - WordPress Appointment Booking  Scheduling System" loading="lazy" width="870px" height="550px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg" alt="Booknetic - WordPress Appointment Booking  Scheduling System" loading="lazy" width="650px" height="413px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg" alt="Booknetic - WordPress Appointment Booking  Scheduling System" loading="lazy" width="380px" height="244px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/35153/image/F8B9EC24-55C9-4E73-97BB-2E26261550F2.jpeg 2x"></a></figure>
<p>This is an online appointment booking plugin which supports WooCommerce, PayPal, Stripe, and SMS and email notifications. It also has:</p>
<ul>
<li>reminders</li>
<li>manageable calendar</li>
<li>customizable templates</li>
<li>built-in form builder</li>
<li>multiple category levels</li>
<li>and many other features</li>
</ul>
<h3>21. Trending: <a href="https://codecanyon.net/item/stachethemes-event-calendar-wordpress-events-calendar-plugin/16168229" target="_blank" rel="external noopener">Stachethemes Event Calendar - WordPress Events Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/stachethemes-event-calendar-wordpress-events-calendar-plugin/16168229" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Stachethemes Event Calendar - WordPress Events Calendar Plugin" loading="lazy" width="870px" height="820px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Stachethemes Event Calendar - WordPress Events Calendar Plugin" loading="lazy" width="650px" height="613px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Stachethemes Event Calendar - WordPress Events Calendar Plugin" loading="lazy" width="380px" height="359px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35998/image/Stachethemes%20Event%20Calendar%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"></a></figure>
<p>This WordPress reservation plugin is a unique approach to the classic event calendar concept. It's fully responsive with a modern design. This WordPress booking plugin will display your events in a layout that's easy to read and navigate.</p>
<p>The WordPress booking plugin is trending thanks to its cool features, including:</p>
<ul>
<li>compatible with Elementor</li>
<li>event filter</li>
<li>single event page</li>
<li>multiple calendar views: month, week, day, grid, map, agenda and more</li>
<li>mobile ready</li>
<li>WooCommerce integration</li>
<li>social media integration for event sharing</li>
</ul>
<h3>22. Trending: <a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_blank" rel="external noopener">Events Schedule - WordPress Events Calendar Plugin</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_blank" rel="external noopener"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Events Schedule - WordPress Events Calendar Plugin" loading="lazy" width="870px" height="925px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Events Schedule - WordPress Events Calendar Plugin" loading="lazy" width="650px" height="691px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg" alt="Events Schedule - WordPress Events Calendar Plugin" loading="lazy" width="380px" height="403px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/2659/posts/35998/image/Events%20Schedule%20-%20WordPress%20Events%20Calendar%20Plugin.jpg 2x"></a></figure>
<p>We close the selection with another trending WordPress booking plugin. Event Schedule is a simple and versatile plugin that offers 12 schedule styles, each of them with a different design and features.</p>
<p>It's a great WordPress reservation plugin. You can sell tickets with WooCommerce, and it's 100% responsive and retina ready.</p>
<p>See what user lizYA01 says about it:</p>
<blockquote>Beautifully designed and elegant plugin backed by the best customer support I have ever had from Envato. I recommend this plugin to anyone looking for a classy looking events calendar. Can't say enough about the professional support received!</blockquote>
<h2>4 Free Booking and Reservation Plugins Available for Download</h2>
<p>As much as premium plugins offer more benefits and more features, there are a couple of free plugins that can help you with your business if you're on a tight budget. If you're just starting, a free plugin can give you time to gain recognition and build your brand without committing to a premium solution.</p>
<h3>1. <a href="https://wordpress.org/plugins/motopress-hotel-booking-lite/" target="_blank" rel="external noopener">Hotel Booking Lite</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png" alt="hotel booking lite plugin" loading="lazy" width="870px" height="315px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png" alt="hotel booking lite plugin" loading="lazy" width="650px" height="239px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png" alt="hotel booking lite plugin" loading="lazy" width="380px" height="145px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png 2x"></figure>
<p>Hotel Booking Lite is the perfect booking plugin for anybody in the hotel and accommodation space. It allows you to simplify the booking experience of your customers. It offers real-time search, custom pricing, multiple currencies, and other excellent features.</p>
<p>Hotel Booking Lite also integrates seamlessly with most themes.</p>
<h3>2. <a href="https://wordpress.org/plugins/booking/" target="_blank" rel="external noopener">Booking Calendar</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/34329/image/booking%20calendar.png" alt="booking-calendar" loading="lazy" width="870px" height="312px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/34329/image/booking%20calendar.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/34329/image/booking%20calendar.png" alt="booking-calendar" loading="lazy" width="650px" height="236px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/34329/image/booking%20calendar.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/34329/image/booking%20calendar.png" alt="booking-calendar" loading="lazy" width="380px" height="144px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/34329/image/booking%20calendar.png 2x"></figure>
<p>Booking Calendar is a flexible plugin for any business that operates on a booking basis. It is also fully responsive, so users on mobile, tablet, or desktop devices can book on the go. Booking Calendar also allows you to import <strong>.ics</strong> feeds from services that use that format, such as Airbnb and TripAdvisor.</p>
<h3>3. <a href="https://wordpress.org/plugins/wp-simple-booking-calendar/" target="_blank" rel="external noopener">WP Simple Booking Calendar</a>
</h3>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/34329/image/wp-simple-booking.png" alt="wp-booking calendar" loading="lazy" width="870px" height="307px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/34329/image/wp-simple-booking.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/34329/image/wp-simple-booking.png" alt="wp-booking calendar" loading="lazy" width="650px" height="233px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/34329/image/wp-simple-booking.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/34329/image/wp-simple-booking.png" alt="wp-booking calendar" loading="lazy" width="380px" height="142px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/34329/image/wp-simple-booking.png 2x"></figure>
<p>Simple Booking Calendar is the perfect plugin to show the availability of your properties or equipment. With the free version of this plugin, you can responsively feature available space and save time you would otherwise spend on manually communicating with customers.</p>
<h3>4. <a href="https://wordpress.org/plugins/sagenda/" target="_blank" rel="external noopener">Sagenda</a>
</h3>
<p>Sagenda allows you to book appointments and meetings with your clients online. Sagenda allows an unlimited number of bookings or customers. It also integrates with the popular PayPal payment system to enable customers to pay for bookings.</p>
<h2>Tips for Choosing a Booking and Reservation Plugin</h2>
<p>An online booking is a must if you wish to succeed in business in this digital age. Here are some suggestions for choosing the right plugin:</p>
<ul>
<li>
<strong>Simplicity:</strong> a good plugin should be user-friendly and easy to customize.</li>
<li>
<strong>Budget: </strong>you should select a plugin that will not strain your operating costs or eat up profit margins.</li>
<li>
<strong>Support: </strong>you need to go with someone who will walk you through any issues that might arise, especially during the initial stages.</li>
<li>
<strong>Features: </strong>you might not always get a plugin that meets every need. However, make a checklist of features you can't do without—such as payments, analytics, and reminders.</li>
</ul>
<h2>Explore More Awesome WordPress Plugins and Resources</h2>
<p>Looking for more premium and free WordPress plugins? Try our free course, which introduces you to the <a href="https://code.tutsplus.com/courses/essential-wordpress-plugins" target="_blank" rel="external noopener">best WordPress plugins</a> out there. Secure your site, make it run faster, optimize it for the search engines, and more.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/courses/essential-wordpress-plugins"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png 2x"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">Essential WordPress Plugins</div>
<div class="roundup-block__author">Rachel McCollin</div></a>
</li></ul>
<p>And you can read more about WordPress event and booking calendars here on Envato Tuts+!</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/guide-to-wordpress-event-calendar-and-booking-plugins--cms-33687"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33687/preview_image/calendar-c.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33687/preview_image/calendar-c.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/769/posts/33687/preview_image/calendar-c.jpg" loading="lazy" width="420px" height="297px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=800/uploads/users/769/posts/33687/preview_image/calendar-c.jpg 2x"><img class="roundup-block__preview-image resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/769/posts/33687/preview_image/calendar-c.jpg" loading="lazy" width="380px" height="269px" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/769/posts/33687/preview_image/calendar-c.jpg 2x"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Guide to WordPress Event Calendar and Booking Plugins</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/show-course-schedules-and-timetables-with-a-wordpress-calendar-plugin--cms-34082"><img class="roundup-block__preview-image resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=400/uploads/users/1251/po]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-03-18T01:21:16+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Working With Tables in React: Part Two]]></title>
      <link>//shineyrock.com/blog/read/working-with-tables-in-react-parttwo</link>
      <guid>https://shineyrock.com/blog/read/working-with-tables-in-react-parttwo#When:03:49:01Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>In this two-part series, you will learn about the ins and outs of working with tabular data in React using the React Bootstrap Table2 component. You'll be able to create sophisticated and professional-looking tables with little effort and yet be able to customize every aspect. In this part, we'll continue the journey by expanding rows, pagination, cell editing, and advanced customization.</p>
<h2>Overview</h2>
<p>This is part two of a two-part series about <a class="editor-rtfLink" href="https://github.com/react-bootstrap-table/react-bootstrap-table2" target="_blank" rel="noopener">React Bootstrap Table2</a>. In part one, we created a simple React application using react-create-app and created the table shown below.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/basic-table(1).png" alt="react table" loading="lazy"></figure>
<p>We also populated a table with data, worked with columns, styled the table, and selected rows. </p>
<p>In this part, we'll continue the journey by creating expanding rows, allowing cell editing, and doing some advanced customization.</p>
<h2>Expanding Rows</h2>
<p>Expanding rows is one of the coolest features of React Bootstrap Table2. When displaying tabular data, you may want to see additional data on one or two rows, but you might clutter the display if you show all the data for all the rows. </p>
<p>One option is to show tooltips, but tooltips require that you hover with the mouse over the target area, and you can only see one tooltip at a time. Expanding the rows lets you display additional data for each row in a kind of drawer that stays expanded as long as you want, and you can collapse it back when you're done. You can expand as many rows as you want at the same time. Here is how it's done with React Bootstrap Table2.</p>
<p>Let's take a look at our data. </p>
<pre class="brush: javascript noskimlinks noskimwords">const product = [
  {id: 1, name: 'Headphone  Fusion', value: '100'},
  {id: 2, name: 'Headphone Beats', value: '80'},
  {id: 3, name: 'Headphone Modus', value: '70'},
  {id: 4, name: 'Headphone Jam', value: '100'}

];</pre>
<p>We'll use the prop <code>expandRow</code> to specify how rows will expand on click.</p>
<pre class="brush: javascript noskimlinks noskimwords">const expandRow = {
  renderer: (row, rowIndex) =&gt; (
    &lt;div&gt;
      &lt;p&gt;{ `This Expand row is belong to rowKey ${row.id}` }&lt;/p&gt;
      &lt;p&gt;You can render anything here, also you can add additional data on every row object&lt;/p&gt;
      &lt;p&gt;expandRow.renderer callback will pass the origin row object to you&lt;/p&gt;
    &lt;/div&gt;
  )
};</pre>
<p>We then add the <code>expandRow</code> property to our table.</p>
<pre class="brush: javascript noskimlinks noskimwords"> &lt;BootstrapTable
        // striped
        hover
        keyField='id'
         keyField='id'
          data={ product }
           columns={ columns }
           // apply the expandRow property here
          expandRow={ expandRow }
/&gt;</pre>
<p>This is how the table will look when you click on a row.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/expand%20rows%20react.png" alt="expand rows " loading="lazy"></figure>
<h2>Pagination</h2>
<p>So far, we've displayed just four rows of data. Tables are designed to display a lot of data that doesn't necessarily all fit on the screen simultaneously. That's where pagination comes in. React Bootstrap Table2 supports many pagination options. </p>
<p>Let's populate our table with additional data by adding a few entries, as shown below.</p>
<pre class="brush: javascript noskimlinks noskimwords">const product = [
  {id: 1, name: 'Headphone  Fusion', value: '100'},
  {id: 2, name: 'Headphone Beats', value: '80'},
  {id: 3, name: 'Headphone Modus', value: '70'},
  {id: 4, name: 'Headphone Jam', value: '100'},
  {id: 5, name: 'Headphone Auto', value: '50'},
  {id: 6, name: 'Headphone Byte', value: '70'},
  {id: 7, name: 'Headphone Duo', value: '150'},
  {id: 8, name: 'Headphone Modular', value: '80'},
  {id: 9, name: 'Headphone Pivot', value: '150'},
  {id: 10, name: 'Headphone Optimizer', value: '70'},
  {id: 11, name: 'Headphone Rave', value: '50'},
  {id: 12, name: 'Headphone Mach', value: '40'}
];</pre>
<p>Let's now implement pagination on our table. First, use NPM to install the <code>react-bootstrap-table2-paginator</code> package.</p>
<pre class="brush: powershell noskimlinks noskimwords">npm install react-bootstrap-table2-paginator --save</pre>
<p>Next, open <strong>App.js</strong> and import the <code>paginationFactory</code> function.</p>
<pre class="brush: javascript noskimlinks noskimwords">import paginationFactory from 'react-bootstrap-table2-paginator';</pre>
<p> Customize the pagination by declaring the following configurations.</p>
<pre class="brush: javascript noskimlinks noskimwords">const options = {
    page: 1,
    sizePerPage: 5,
    nextPageText: '&gt;',
    prePageText: '&lt;',
    showTotal: true
  };</pre>
<p>We then apply the property to the table, as shown below.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;BootstrapTable
        // striped
        hover
        keyField='id'
         keyField='id'
          data={ person }
           columns={ columns }
          expandRow={ expandRow }
          //apply the pagination function here
          pagination={ paginationFactory(options) }


            /&gt;</pre>
<p>The table will be displayed starting from the first page and will show five entries per page.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/pagination.png" alt="pagination react" loading="lazy"></figure>
<h2>Cell Editing</h2>
<p>Another form of data manipulation is in-place editing (a.k.a. cell editing). Cell editing can be triggered by a click or double-click. To enable this property, first install the <code>react-bootstrap-table2-editor</code>.</p>
<pre class="brush: powershell noskimlinks noskimwords">npm install react-bootstrap-table2-editor --save</pre>
<p>Then import it at the top of <strong>App.js</strong>.</p>
<pre class="brush: javascript noskimlinks noskimwords">//App.js
import cellEditFactory from 'react-bootstrap-table2-editor';</pre>
<p>This is how you enable cell editing on a table.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;BootstrapTable
 hover
 keyField='id'
 data={ product }
 columns={ columns }
 expandRow={ expandRow }
 pagination={ paginationFactory(options) }
 cellEdit={ cellEditFactory({ mode: 'click' }) }

    /&gt;</pre>
<p>You can also specify non-editable rows and hook functions. For example, the code below restricts cell editing on row 3.</p>
<pre class="brush: javascript noskimlinks noskimwords">&lt;BootstrapTable
 hover
 keyField='id'
 data={ product }
 columns={ columns }
 expandRow={ expandRow }
 pagination={ paginationFactory(options) }
 cellEdit={ cellEditFactory({
                     mode: 'click',
                     blurToSave: true,
                     nonEditableRows: () =&gt; [0, 3] }) }


 }) }

    /&gt;</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/cell-editing.png" alt="cell editing" loading="lazy"></figure>
<h2>Exporting Your Data</h2>
<p>Sometimes, viewing your data in a web UI is not enough, and you need to take your data and feed it to other tools. Import the <code>exportCSV</code> attribute (and optionally a filename), and an export button is added to the table. When you click the button, it allows you to save your data to a CSV file.</p>
<p>Install <code>react-bootstrap-table2-toolkit</code>.</p>
<pre class="brush: powershell noskimlinks noskimwords">npm install react-bootstrap-table2-toolkit --save</pre>
<p>The export feature is available via the <code>exportCSV</code> prop in the <code>ToolkitProvider</code> wrapper. To display and enable CSV export, wrap the <code>BootstrapTable</code> in a <code>ToolkitProvider</code>.</p>
<pre class="brush: javascript noskimlinks noskimwords">import ToolkitProvider, { CSVExport } from 'react-bootstrap-table2-toolkit';

const { ExportCSVButton } = CSVExport;

//  the rest of the code here

&lt;ToolkitProvider
  keyField="id"
  data={ product }
  columns={ columns }
  exportCSV
&gt;
  {
    props =&gt; (
      &lt;div&gt;
        &lt;ExportCSVButton { ...props.csvProps }&gt;Export CSV!!&lt;/ExportCSVButton&gt;
        &lt;hr /&gt;
        &lt;BootstrapTable { ...props.baseProps } /&gt;
      &lt;/div&gt;
    )
  }
&lt;/ToolkitProvider</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/export-csv.png" alt="export csv" loading="lazy"></figure>
<div>
<div class="syntaxhighlighter  plain">
<table>
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number4 index3 alt1"><code class="plain plain"></code></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<h3>Table Search</h3>
<p>This property works the same way as the Export feature.  First, import the <code>Search</code> property, enable it on  <code>ToolKitProvider</code>, and wrap the <code>SearchBar</code> as a child of <code>ToolkitProvider</code>.</p>
<pre class="brush: javascript noskimlinks noskimwords">import ToolkitProvider, { CSVExport} from 'react-bootstrap-table2-toolkit';
import { Search } from 'react-bootstrap-table2-toolkit';

const { ExportCSVButton } = CSVExport;
const { SearchBar } = Search;

class App extends Component {
  render() {
    return (
      &lt;div className="App"&gt;
        &lt;p className="Table-header"&gt;REXO&lt;/p&gt;
       &lt;ToolkitProvider
        keyField="id"
        data={ product }
        columns={ columns }
        exportCSV
        search
 &gt;
     {
    props =&gt; (
      &lt;div&gt;
        &lt;ExportCSVButton  { ...props.csvProps }&gt;Export CSV!!&lt;/ExportCSVButton&gt;
        &lt;h3&gt;Search anything below:&lt;/h3&gt;
        &lt;SearchBar { ...props.searchProps } /&gt;
        &lt;hr /&gt;

        &lt;hr /&gt;
        &lt;BootstrapTable

                pagination={paginationFactory()}
                {...props.baseProps}
              /&gt;
      &lt;/div&gt;
    )
     }
&lt;/ToolkitProvider&gt;</pre>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/36584/image-upload/search.png" alt="search react-bootstrap" loading="lazy"></figure>
<h2>Summary</h2>
<p>We covered a lot of material in this tutorial, but React Bootstrap Table2 has a lot more in store. Practically every aspect of the table can be customized. Read the <a href="https://allenfang.github.io/react-bootstrap-table/custom.html" target="_self">full documentation</a> on how to customize a table.</p>
<p>Here are all the features offered by React Bootstrap Table2:</p>
<ul>
<li>row customization</li>
<li>column customization</li>
<li>table sort</li>
<li>table search</li>
<li>row selection</li>
<li>column filter</li>
<li>cell edit</li>
<li>pagination</li>
<li>expandable row</li>
<li>overlay</li>
<li>remote tables</li>
</ul>
<h2>Conclusion</h2>
<p>React Bootstrap Table2 packs a powerful punch. It provides a pleasant user interface for displaying, searching, and manipulating tabular data out of the box. The API is very consistent—major features can be enabled by specifying a simple attribute and optionally customized with additional attributes that often can be dynamic functions. While the default behavior and the basic configuration should satisfy most users, if you need more advanced features and customization, <a href="https://react-bootstrap-table.github.io/react-bootstrap-table2/docs/overlay.html" target="_self">the official documentation</a> has lots of examples of how to go about it.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/best-modern-javascript-admin-templates-for-your-react-angular-and-vuejs-apps--cms-32099"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/769/posts/32099/preview_image/admin%20template%20b.JPG" loading="lazy"><div class="roundup-block__primary-category topic-code">React</div>
<div class="roundup-block__content-title">19 Best JavaScript Admin Templates for React, Angular, and Vue.js</div>
<div class="roundup-block__author">Franc Lucas</div></a></li></ul>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-02-26T03:49:01+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Best CSS Animations and Effects on CodeCanyon]]></title>
      <link>//shineyrock.com/blog/read/best-css-animations-and-effects-on-codecanyon</link>
      <guid>https://shineyrock.com/blog/read/best-css-animations-and-effects-on-codecanyon#When:16:29:04Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi"><div class="layout__content-with-sidebar">
<p>In the past few years, browsers have come a long way when it comes to supporting newer CSS properties that allow developers to create nice effects and animations using just pure CSS.</p>
<p>There is a lot of browser support for using different transitions and keyframe animations in your projects now. You no longer have to rely on JavaScript libraries to add basic animations. You can animate your web pages with CSS alone!</p>
<figure class="post_image"><a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/image-thumb-hover-effects.jpg" alt="Best Animations on CodeCanyon" loading="lazy"></a>
<figcaption>The <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_self">Image Hover Effects Collection</a> comes with 20 different CSS animation styles.</figcaption>
</figure>
<p>Animating different elements on a webpage is now easier than ever. However, it can still be very confusing or daunting for absolute beginners. In this post, we will cover some of the best CSS animation libraries on CodeCanyon that you can use to add fancy CSS animation and stunning CSS effects to your webpages today.</p>
<h2>CSS Animations and Effects on CodeCanyon</h2>
<p>If you head over to the <a href="https://codecanyon.net/category/css/animations-and-effects?sort=sales" target="_blank" rel="external noopener">CSS Animations and Effects section on CodeCanyon</a>, you will see that there are currently over 140 different libraries related to CSS animations.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/css/animations-and-effects?sort=sales" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/CSS%20Animations%20from%20CodeCanyon.png" alt="CSS Animations from CodeCanyon" loading="lazy"></a></figure>
<p>New libraries are added periodically to the collection, and you can select one from the best-sellers or apply your own filters to fine-tune the results.</p>
<p>There are libraries to animate all kinds of elements or apply different kinds of effects to elements like buttons.</p>
<h2>Best CSS Animations Libraries (On CodeCanyon for 2021)</h2>
<h3>1. <a href="https://codecanyon.net/item/css3-image-hover-effects/471215" target="_self">CSS3 Image Hover Effects</a>
</h3>
<p>The first one on our list is <a href="https://codecanyon.net/item/css3-image-hover-effects/471215" target="_blank" rel="external noopener">CSS3 Image Hover Effects</a>. You can use it to add around 17 different kinds of image hover animations.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/css3-image-hover-effects/471215" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/css3-image-hover-effects.jpg" alt="Css3 Image Hover Effects" loading="lazy"></a></figure>
<p>This includes basic CSS effects like fading and sliding overlays, as well as more advanced animations like splitting overlays and joining overlays. Other interesting effects include corner ribbons and image stacks.</p>
<p>Visit the <a href="https://codecanyon.net/item/css3-image-hover-effects/471215" target="_blank" rel="external noopener">description page</a> to find out more about the library. The video on the description page shows all the animations in action.</p>
<h3>2. <a href="https://codecanyon.net/item/css3-mega-tooltip-animation-pack/2557230" target="_self">CSS3 Mega Tooltip Animation Pack</a>
</h3>
<p>This <a href="https://codecanyon.net/item/css3-mega-tooltip-animation-pack/2557230" target="_blank" rel="external noopener">CSS3 Mega Tooltip Animation Pack</a> offers a great solution for people who want to integrate nice animations with different tooltips on their website.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/css3-mega-tooltip-animation-pack/2557230" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/mega-tooltip-animation.jpg" alt="Mega Tooltip Animation" loading="lazy"></a></figure>
<p>This great CSS animations pack comes with ten different tooltip animations. There are eight predefined color options. However, you can change the CSS files to add your own unique colors.</p>
<p>There is support for all major browsers. You can even support browsers as old as IE8 with a fix included in the download files after purchase.</p>
<p>The download files also contain detailed documentation and HTML samples that illustrate how to use the animation pack effectively.</p>
<h3>3. <a href="https://codecanyon.net/item/tfigure-image-captions/8370121" target="_self">tFigure—Image Captions</a>
</h3>
<p>The <a href="https://codecanyon.net/item/tfigure-image-captions/8370121" target="_blank" rel="external noopener">tFigure—Image Captions</a> library offers five different hover animations to display image captions.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/tfigure-image-captions/8370121" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/tfigure-image-captions.png" alt="tFigure Image Captions" loading="lazy"></a></figure>
<p>You can use them to show nicely animated captions for different images. The overlays for each animation are available in four different colors.</p>
<p>The animations themselves are pretty simple. However, the way in which the captions are laid out on the overlays makes them very attractive.</p>
<p>These animations are framework independent, so you can install them on any website you want. They are also easily customizable, so you can make sure that the color scheme of the overlay matches the theme of your website.</p>
<p>Check out the animation's <a href="https://codecanyon.net/item/tfigure-image-captions/8370121" target="_blank" rel="external noopener">live preview page</a> to see the awesome image caption animation in action.</p>
<h3>4. <a href="https://codecanyon.net/item/animated-loaders-kit/8242708" target="_self">Animated Loaders Kit</a>
</h3>
<p>There are a lot of times when users might have to wait a while for a process to complete. This might be a very large image that has to load or some other computational process that needs to complete.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/animated-loaders-kit/8242708" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/animated-loaders-kit.png" alt="Animated Loaders Kit" loading="lazy"></a></figure>
<p>If the process takes a few seconds, it is a good practice to let users know that you are working on it. A good way to do that is with simple animated loaders.</p>
<p>The <a href="https://codecanyon.net/item/animated-loaders-kit/8242708" target="_blank" rel="external noopener">Animated Loaders Kit</a> is perfect for this situation. It comes with ten CSS-only animated loaders.</p>
<p>There are many advantages of using these pure CSS-based animated loaders. They are easy to customize. It will take only a couple of minutes to change the color, font, and size of the loaders. You can also change the animation speed. They have a very small file size compared to using GIF files.</p>
<p>The best way to appreciate how nice they are is to see the live preview on the <a href="https://codecanyon.net/item/animated-loaders-kit/8242708" target="_blank" rel="external noopener">description page</a>.</p>
<h3>5. <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_self">Image Hover Effects Collection</a>
</h3>
<p>This <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_blank" rel="external noopener">Image Hover Effects Collection</a> kit was added fairly recently to CodeCanyon and comes with 20 different awesome CSS animation styles.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/image-thumb-hover-effects.jpg" alt="Image Thumb Hover Effects Collection" loading="lazy"></a></figure>
<p>They follow a responsive design philosophy and support all major browsers. So you can rest assured that any effects you use on your website will look good on all devices and all screen sizes.</p>
<p>The animations are also fully customizable, and you can easily change the overlay and text colors for all animations to better align them with the overall theme of your own website.</p>
<p>The code is well documented, so it will be easier to make changes whenever necessary. You should definitely check out the <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_blank" rel="external noopener">live preview</a> to see how good these hover animations are.</p>
<h2>Free CSS Animation Libraries for 2021</h2>
<p>Generally, you can expect these paid CSS animation libraries to have a lot of variety in the animations compared to free alternatives. They also come with free support for six months and lifetime updates.</p>
<p>Many times, these premium libraries also support old browsers. However, this might not be the case with free animation libraries.</p>
<p>It might be easier for anyone who is just starting out to simply use these paid libraries. However, if you don't have the budget to purchase these paid plugins, we have also listed some free alternatives below.</p>
<p>Here are four free CSS animation libraries that you can use in your projects:</p>
<h3><a href="https://github.com/wayou/SlipHover" target="_blank" rel="noopener">SlipHover</a></h3>
<p>This free image hover animation library only comes with basic sliding animations. The unique feature of this library is that the hover animations are aware of the cursor direction. So the overlay will appear to move in from the left side if the user hovers over the image from the left side.</p>
<h3><a href="https://github.com/daneden/animate.css" target="_blank" rel="noopener">animate.css</a></h3>
<p>This animation library is not aimed at a specific use case like image hover animations or tooltips. It is simply a general-purpose library that you can use to animate different elements on a webpage. There are a bunch of classes that you can add to different elements to control the speed and delay of the animation.</p>
<h3><a href="https://github.com/ciar4n/imagehover.css" target="_blank" rel="external noopener">imagehover.css</a></h3>
<p>This library gives you the option to add simple image hover animations from different directions. It comes with 40 different hover animations.</p>
<figure class="post_image"><a href="https://github.com/ciar4n/imagehover.css"><img src="https://cms-assets.tutsplus.com/uploads/users/1997/posts/36558/image-upload/F31DE5FE-EC31-4426-A214-2B45DB80A042.jpeg" alt="imagehover.css" loading="lazy"></a></figure>
<h3><a href="https://github.com/ConnorAtherton/loaders.css" target="_blank" rel="external noopener">loaders.css</a></h3>
<p>This library consists of pure CSS-based loading animations. You can use them in your project if you are looking for some nice preloader animations.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/loaders-css.png" alt="CSS Loaders" loading="lazy"></figure>
<h2>Additional Resources</h2>
<p>It can be hard to figure out where to start for an absolute beginner. We are listing some tutorials here which will make it easier for you to understand how CSS animations work and how you can start using them in your own projects.</p>
<p>You could start by reading this <a href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068" target="_blank" rel="external noopener">beginner-level introduction to CSS animation</a>. After that, you should consider learning <a href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868" target="_blank" rel="external noopener">how to use CSS variables for animation</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/21068/preview_image/animation.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Animation</div>
<div class="roundup-block__content-title">A Beginner’s Introduction to CSS Animation</div>
<div class="roundup-block__author">Catalin Miron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/638/posts/28868/preview_image/css-variable-animations.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">Animation</div>
<div class="roundup-block__content-title">How to Use CSS Variables for Animation</div>
<div class="roundup-block__author">Dennis Gaebel</div></a></li>
</ul>
<p>Using different pre-built CSS animation libraries is not hard at all. However, having a basic understanding of the concepts will go a long way when it comes to making changes to these animations or trying to create something of your own in future.</p>
<p>You should also consider reading a couple of tutorials that teach you how to create your own CSS-based animations from scratch. The first tutorial is for <a href="https://webdesign.tutsplus.com/tutorials/how-to-create-different-css-hover-effects-from-scratch--cms-34222" target="_blank" rel="external noopener">basic hover effects</a>, while the second one is a quick tip for <a href="https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-enhance-a-page-with-css-animations--cms-32100" target="_blank" rel="external noopener">page loading animations</a>. And here are some other great options:</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/638/posts/28868/preview_image/css-variable-animations.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">Animation</div>
<div class="roundup-block__content-title">How to Use CSS Variables for Animation</div>
<div class="roundup-block__author">Dennis Gaebel</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/21068/preview_image/animation.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Animation</div>
<div class="roundup-block__content-title">A Beginner’s Introduction to CSS Animation</div>
<div class="roundup-block__author">Catalin Miron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-create-different-css-hover-effects-from-scratch--cms-34222"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/34222/preview_image/hover-pre1.gif" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS</div>
<div class="roundup-block__content-title">How to Create 7 Different CSS Hover Effects From Scratch</div>
<div class="roundup-block__author">George Martsoukos</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-enhance-a-page-with-css-animations--cms-32100"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/32100/preview_image/pre1.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Animation</div>
<div class="roundup-block__content-title">Enhance the Way a Web Page Loads With CSS Animations</div>
<div class="roundup-block__author">George Martsoukos</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/10-examples-of-animation-on-codepen-you-can-learn-from--cms-28244"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/28244/preview_image/pre.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">Animation</div>
<div class="roundup-block__content-title">10 Examples of Animation on CodePen You Can Learn From</div>
<div class="roundup-block__author">Donovan Hutchinson</div></a></li>
</ul>
<h2>Final Thoughts</h2>
<p>Using a bit of animation for different elements on your website can make the content more interesting and engaging.</p>
<p>Coming up with our own unique animations from scratch can take some time. So we listed some of the best free and premium CSS-based animation libraries that will help you get started in no time.</p>
<p>New animations and effects are added all the time to CodeCanyon—you can choose one of the best-sellers or try something fresh and new!</p>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/franc-lucas" target="_self">Franc Lucas</a>. Franc is a writer for Envato Tuts+ who enjoys exploring the world of SaaS.</em></p>
</div></div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-02-25T16:29:04+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[30 CSS Best Practices for Beginners]]></title>
      <link>//shineyrock.com/blog/read/30-css-best-practices-for-beginners</link>
      <guid>https://shineyrock.com/blog/read/30-css-best-practices-for-beginners#When:05:50:18Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>CSS is a language that is used by nearly <em>every</em> developer at some point. While it's a language that we sometimes take for granted, it is powerful and has many nuances that can help (or hurt) our designs. Here are 30 of the best CSS practices that will keep you writing solid CSS and avoiding some costly mistakes.</p>
<h3>1. Make It Readable</h3>
<p>The readability of your CSS is incredibly important, though most people overlook <em>why</em> it's important. Great readability of your CSS makes it much easier to maintain in the future, as you'll be able to find elements quicker. Also, you'll never know who might need to look at your code later on.</p>
<h3>2. Keep It Consistent</h3>
<p>Along the lines of keeping your code readable is making sure that the CSS is consistent. You should start to develop your own "sub-language" of CSS that allows you to quickly name things. There are certain classes that I create in nearly every theme, and I use the same name each time. For example, I use <code>.caption-right</code> to float images which contain a caption to the right.</p>
<p>Think about things like whether or not you'll use underscores or dashes in your IDs and class names, and in what cases you'll use them. When you start creating your own standards for CSS, you'll become much more proficient.</p>
<h3>3. Start With a Framework</h3>
<p>Some design purists scoff at the thought of using a <a href="https://webdesign.tutsplus.com/tutorials/introduction-to-tailwind-css--cms-33545" target="_self">CSS framework</a> with each design, but I believe that if someone else has taken the time to maintain a tool that speeds up production, why reinvent the wheel? I know frameworks shouldn't be used in every instance, but most of the time they can help.</p>
<p>Many designers have their own framework that they have created over time, and that's a great idea too. It helps keep consistency within the projects.</p>
<p>At the same time, I would also like to say that you should use frameworks only if you already know a good deal of CSS. There will almost certainly come a time when you will have to create a certain aspect of some layout all by yourself, and your deep understanding of CSS will help you get things done.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/introduction-to-tailwind-css--cms-33545"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/33545/preview_image/tailwind-pre.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS</div>
<div class="roundup-block__content-title">Introduction to Tailwind CSS: A Utility-First CSS Framework</div>
<div class="roundup-block__author">Adi Purdila</div></a></li></ul>
<h3>4. Use a Reset</h3>
<p>Most CSS frameworks have a reset built in, but if you're not going to use one, then <em>at least</em> consider using a reset. Resets essentially eliminate browser inconsistencies such as heights, font sizes, margins, and headings. The reset allows your layout to look consistent in all browsers.</p>
<p>The <a href="https://meyerweb.com/eric/tools/css/reset/index.html">MeyerWeb</a> is a classic reset. <a href="https://necolas.github.io/normalize.css/" target="_self">Normalize.css</a> is another very popular reset.</p>
<h3>5. Organize the Stylesheet With a Top-Down Structure</h3>
<p>It always makes sense to lay your stylesheet out in a way that allows you to quickly find parts of your code. I recommend a top-down format that tackles styles as they appear in the source code. So an example stylesheet might be ordered like this:</p>
<ol>
<li>Generic classes (<code>body</code>, <code>a</code>, <code>p</code>, <code>h1</code>, etc.)</li>
<li><code>#header</code></li>
<li><code>#nav-menu</code></li>
<li><code>#main-content</code></li>
</ol>
<p>It also helps if you keep track of different sections of the website in the stylesheet with comments.</p>
<pre class="brush: css noskimlinks noskimwords">/****** main content *********/

styles go here...

/****** footer *********/

styles go here...</pre>
<h3>6. Combine Elements</h3>
<p>Elements in a stylesheet sometimes share properties. Instead of rewriting previous code, why not just combine them? For example, your <code>h1</code>, <code>h2</code>, and <code>h3</code> elements might all share the same font and color:</p>
<pre class="brush: css noskimlinks noskimwords">	h1, h2, h3 {font-family: tahoma, color: #333}</pre>
<p>We could add unique characteristics to each of these header styles if we wanted (i.e. <code>h1 {size: 2.1em}</code>) later in the stylesheet.</p>
<h3>7. Create Your HTML First</h3>
<p>Many designers create their CSS at the same time they create the HTML. It seems logical to create both at the same time, but actually you'll save even more time if you create the <em>entire</em> HTML mockup first. The reasoning behind this method is that you know all the elements of your site layout, but you don't know what CSS you'll need with your design. Creating the HTML layout first allows you to visualize the entire page as a whole, and allows you to think of your CSS in a more holistic, top-down manner.</p>
<h3>8. Use Multiple Classes</h3>
<p>Sometimes it's beneficial to add multiple classes to an element. Let's say that you have a <code>div</code> "box" that you want to float right, and you've already got a class <code>.right</code> in your CSS that floats everything to the right. You can simply add an extra class in the declaration, like so:</p>
<pre class="brush: css noskimlinks noskimwords">	&lt;div class="box right"&gt;&lt;/div&gt;</pre>
<p>You can add as many classes as you'd like (<strong>space</strong> separated) to any declaration.</p>
<p>This is one of those situations where you have to take individual cases into account. While it is helpful to create class names that provide some hint of how they affect the layout, you should also avoid using class names that require you to constantly switch between HTML and CSS.</p>
<p>Be very careful when using ids and class-names like "left" and "right." I will use them, but only for things such as examples in blog posts. How come? Let's imagine that, down the road, you decide that you'd rather see the box floated to the left. In this case, you'd have to return to your HTML and change the class name—all in order to adjust the <em>presentation</em> of the page. This is unsemantic. Remember: HTML is for markup and content. CSS is for presentation.</p>
<blockquote>
<p>If you must return to your HTML to change the presentation (or styling) of the page, you're doing it wrong!</p>
</blockquote>
<h3>9. Use the Right Doctype</h3>
<p>The doctype declaration greatly affects whether or not your markup and CSS will validate. In fact, the entire look and feel of your site can change greatly depending on the doctype that you declare.</p>
<p>Learn more about which doctype to use at <a href="http://www.alistapart.com/articles/doctype/">A List Apart</a>. You can simply start using <code>&lt;!DOCTYPE html&gt;</code> when creating pages based on HTML5.</p>
<h3>10. Use Shorthand</h3>
<p>You can shrink your code considerably by using shorthand when crafting your CSS. For elements like padding, margin, font, and some others, you can combine styles in one line. For example, a div might have these styles:</p>
<pre class="brush: css noskimlinks noskimwords">	#crayon {
		margin-left:	5px;
		margin-right:	7px;
		margin-top:	8px;
	}</pre>
<p>You could combine those styles in one line, like so:</p>
<pre class="brush: css noskimlinks noskimwords">	#crayon	{
		margin: 8px 7px 0px 5px; // top, right, bottom, and left values, respectively.
	}</pre>
<p>If you need more help, here's a <a href="http://www.dustindiaz.com/css-shorthand/">comprehensive guide on CSS shorthand properties</a>.</p>
<h3>11. Comment Your CSS</h3>
<p>Just like any other language, it's a great idea to comment your code in sections. To add a comment, simply add <code>/*</code> behind the comment, and <code>*/</code> to close it, like so:</p>
<pre class="brush: css noskimlinks noskimwords">	/* Here's how you comment CSS */</pre>
<h3>12. Understand the Difference Between Block and Inline Elements</h3>
<p>Block elements are elements that naturally clear each line after they're declared, spanning the whole width of the available space. Inline elements take only as much space as they need, and don't force a new line after they're used.</p>
<p>Here are the lists of elements that are typically inline:</p>
<pre class="brush: css noskimlinks noskimwords">span, a, strong, em, img, br, input, abbr, acronym</pre>
<p>And the block elements:</p>
<pre class="brush: css noskimlinks noskimwords">div, h1...h6, p, ul, li, table, blockquote, pre, form</pre>
<h3>13. Alphabetize Your Properties</h3>
<p>While this is more of a frivolous tip, it can come in handy for quick scanning.</p>
<pre class="brush: css noskimlinks noskimwords">	#cotton-candy {
		color: #fff;
		float: left;
		font-weight:
		height: 200px;
		margin: 0;
		padding: 0;
		width: 150px;
	}</pre>
<p>This is a bit controversial because you have to sacrifice speed for slightly improved readability<strong>. </strong>However, you should not hesitate in trying it out if you think it will help you.</p>
<h3>14. Use CSS Compressors</h3>
<p>CSS compressors help shrink CSS file size by removing line breaks, white spaces, and combining elements. This combination can greatly reduce the file size, which speeds up browser loading. <a href="https://cssminifier.com/" target="_self">CSS Minifier</a> and <a href="https://htmlcompressor.com/compressor/" target="_blank" rel="noopener">HTML Compressor</a> are two excellent online tools that can shrink CSS.</p>
<p>It should be noted that shrinking your CSS can provide gains in performance, but you lose some of the readability of your CSS.</p>
<h3>15. Make Use of Generic Classes</h3>
<p>You'll find that there are certain styles that you're applying over and over. Instead of adding that particular style to each ID, you can create generic classes and add them to the IDs or other CSS classes (using tip #8).</p>
<p>For example, I find myself using <code>float:right</code> and <code>float:left</code> over and over in my designs. So I simply add the classes <code>.left</code> and <code>.right</code> to my stylesheet, and reference it in the elements.</p>
<pre class="brush: css noskimlinks noskimwords">	.left {float:left}
	.right {float:right}

	&lt;div id="coolbox" class="left"&gt;...&lt;/div&gt;</pre>
<p>This way, you don't have to constantly add <code>float:left</code> to all the elements that need to be floated.</p>
<h3>16. Use <code>margin: 0 auto</code> to Center Layouts</h3>
<p>Many beginners to CSS can't figure out why you can't simply use <code>float: center</code> to achieve that centered effect on block-level elements. If only it were that easy! Unfortunately, you'll need to use this method to center a <code>div</code>, paragraphs, or other elements in your layout:</p>
<pre class="brush: css noskimlinks noskimwords">	margin: 0 auto; // top, bottom - and left, right values, respectively.</pre>
<p>By declaring that both the left <em>and</em> the right margins of an element must be identical, the browsers have no choice but to center the element within its containing element.</p>
<h3>17. Don't Just Wrap a <code>div</code> Around It</h3>
<p>When starting out, there's a temptation to wrap a <code>div</code> with an ID or class around an element and create a style for it.</p>
<pre class="brush: css noskimlinks noskimwords">	&lt;div class="header-text"&gt;&lt;h1&gt;Header Text&lt;/h1&gt;&lt;/div&gt;</pre>
<p>Sometimes it might seem easier to just create unique element styles like the above example, but you'll start to clutter your stylesheet. This would have worked just fine:</p>
<pre class="brush: css noskimlinks noskimwords">	&lt;h1&gt;Header Text&lt;/h1&gt;</pre>
<p>Then you can easily add a style to the <code>h1</code> instead of a parent <code>div</code>.</p>
<h3>18. Use Browser Developer Tools</h3>
<p>Modern web browsers come bundled with some vital tools that are must-haves for any web developer. These developer tools are now part of all the major browsers, including Chrome, Firefox, Safari, and Edge. Among the many features that come bundled with the Chrome and Firefox developer tools (like debugging JavaScript, inspecting HTML, and viewing errors), you can also visually inspect, modify, and edit CSS in real time.</p>
<h3>19. Hack Less</h3>
<p>Avoid using browser-specific hacks if at all possible. There is a tremendous pressure to make sure that designs look consistent across all browsers, but using hacks only makes your designs harder to maintain in the future. Plus, using a reset file (see #4) can eliminate nearly all of the rendering irregularities between browsers.</p>
<h3>20. Use Absolute Positioning Sparingly</h3>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/position" target="_self">Absolute positioning</a> is a handy aspect of CSS that allows you to define where <em>exactly</em> an element should be positioned on a page to the exact pixel. However, because of absolute positioning's disregard for other elements on the page, the layouts can get quite hairy if there are multiple absolutely positioned elements running around the layout.</p>
<h3>21. Use Text-transform</h3>
<p><a href="https://developer.mozilla.org/en/docs/Web/CSS/text-transform" target="_self"><code>text-transform</code></a> is a highly useful CSS property that allows you to "standardize" how text is formatted on your site. For example, say you want to create some headers that only have lowercase letters. Just add the <code>text-transform</code> property to the header style like so:</p>
<pre class="brush: css noskimlinks noskimwords">text-transform: lowercase;</pre>
<p>Now all of the letters in the header will be lowercase by default. <code>text-transform</code> allows you to modify your text (first letter capitalized, all letters capitalized, or all lowercase) with a simple property.</p>
<h3>22. Don't Use Negative Margins to Hide Your <code>h1</code>
</h3>
<p>Often, people will use an image for their header text and then either use <code>display:none</code> or a negative margin to float the <code>h1</code> off the page. Matt Cutts, then head of Google's Webspam team, has officially said that this is a bad idea, as Google might think it's spam.</p>
<p>As Cutts explicitly says, avoid hiding your logo's text with CSS. Just use the alt tag. While many claim that you can still use CSS to hide a <code>h1</code> tag as long as the <code>h1</code> is the same as the logo text, I prefer to err on the safe side.</p>
<h3>23. Validate Your CSS and XHTML</h3>
<p>Validating your CSS and XHTML does more than give a sense of pride: it helps you quickly spot errors in your code. If you're working on a design and for some reason things just aren't looking right, try running the <a href="http://validator.w3.org/">markup</a> and <a href="http://jigsaw.w3.org/css-validator/">CSS validator</a> and see what errors pop up. Usually you'll find that you forgot to close a div somewhere or missed a semi-colon in a CSS property.</p>
<h3>24. Rems and Ems vs. Pixels</h3>
<p>There's always been a strong debate as to whether it's better to use pixels (<code>px</code>) or <code>em</code>s and <code>rem</code>s when defining font sizes. Pixels are a more static way to define font sizes, and ems are more scalable with different browser sizes and mobile devices. With the advent of many different types of web browsing (laptop, mobile, etc.), <code>em</code>s and <code>rem</code>s are increasingly becoming the default for font size measurements as they allow the greatest form of flexibility.</p>
<h3>25. Don't Underestimate the List</h3>
<p>Lists are a great way to present data in a structured format whos style is easy to modify. Thanks to the display property, you don't have to just use the list as a text attribute. Lists are also great for creating navigation menus and things of the sort.</p>
<p>Many beginners use <code>div</code>s to make each element in the list because they don't understand how to properly use lists. It's well worth the effort to use brush up on learning list elements to structure data in the future.</p>
<h3>26. Avoid Extra Selectors</h3>
<p>It's easy to unknowingly add extra selectors to our CSS that clutters the stylesheet. One common example of adding extra selectors is with lists.</p>
<pre class="brush: css noskimlinks noskimwords">body #container .someclass ul li {....}</pre>
<p>In this instance, just the <code>.someclass li</code> would have worked just fine.</p>
<pre class="brush: css noskimlinks noskimwords">.someclass li {...}</pre>
<p>Adding extra selectors won't bring Armageddon or anything of the sort, but they do keep your CSS from being as simple and clean as possible.</p>
<h3>27. Add Margins and Padding to All Elements</h3>
<p>Modern browsers are fairly uniform in the way they render elements, but legacy browsers tend to render elements differently. For example, Internet Explorer renders certain elements differently than Firefox or Chrome, and different versions of Internet Explorer render differently from one another.</p>
<p>One of the main differences between versions of older browsers is how padding and margins are rendered. If you're not already using a reset, you might want to define the margin and padding for all elements on the page, to be on the safe side. You can do this quickly with a global reset, like so:</p>
<pre class="brush: css noskimlinks noskimwords">	* {margin:0;padding:0;}</pre>
<p>Now <em>all</em> elements have a padding and margin of 0, unless defined by another style in the stylesheet.</p>
<h3>28. Use Multiple Stylesheets</h3>
<p>Depending on the complexity of the design and the size of the site, it's sometimes easier to make smaller, multiple stylesheets instead of one giant stylesheet. Aside from being easier for the designer to manage, multiple stylesheets allow you to leave out CSS on certain pages that don't need them.</p>
<p>For example, I might having a polling program that would have a unique set of styles. Instead of including the poll styles to the main stylesheet, I could just create a <strong>poll.css</strong> and the stylesheet only to the pages that show the poll.</p>
<p>However, be sure to consider the number of HTTP requests that are being made. Many designers prefer to develop with multiple stylesheets, and then combine them into one file. This reduces the number of HTTP requests to one. Also, the entire file will be cached on the user's computer.</p>
<h3>29. Check for Closed Elements First When Debugging</h3>
<p>If you're noticing that your design looks a tad wonky, there's a good chance it's because you've left off a closing <code>&lt;/div&gt;</code>. You can use the <a href="http://validator.w3.org/">XHTML validator</a> to help sniff out all sorts of errors like this.</p>
<h3>30. Try to Use Flexbox and Grid Layout Instead of Floats</h3>
<p>In the past, it was very common and necessary to use floats to create any kind of layout. Unfortunately, floats come with a lot of problems. You can instead start using the much more powerful layout modules called flexbox and grid layout. Flexbox will help you create one-dimensional layouts, and grid will help you with two-dimensional layouts.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/flexbox-vs-css-grid-which-should-you-use--cms-30184"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/30184/preview_image/vs-png.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Grid Layout</div>
<div class="roundup-block__content-title">Flexbox vs. CSS Grid: Which Should You Use and When?</div>
<div class="roundup-block__author">Anna Monus</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-build-a-full-screen-responsive-page-with-flexbox--cms-32086"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/32086/preview_image/pre.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">Flexbox</div>
<div class="roundup-block__content-title">How to Build a Full-Screen Responsive Page With Flexbox</div>
<div class="roundup-block__author">George Martsoukos</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/new-course-a-quick-introduction-to-css-grid-layout--cms-31912"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31912/preview_image/grid400-1.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Grid Layout</div>
<div class="roundup-block__content-title">New Course: A Quick Introduction to CSS Grid Layout</div>
<div class="roundup-block__author">Andrew Blackman</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/css-grid-layout-quick-start-guide--cms-27238"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/27238/preview_image/grid-pre-1.png" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">CSS Grid Layout</div>
<div class="roundup-block__content-title">CSS Grid Layout: A Quick Start Guide</div>
<div class="roundup-block__author">Ian Yates</div></a></li>
</ul>
<h3>31. Use !important Sparingly</h3>
<p>The keyword <code>!important</code> is used to bypass any styling rules specified elsewhere for an element. This allows you to use less specific selectors to change the appearance of an element. As a beginner, this might seem like an easy way to style elements without worrying about what selectors you should be using. However, you should avoid that because using !<code>important</code> with a lot of elements will ultimately result in <code>!important</code> losing its meaning, as every CSS rule will now bypass the selector specificity.</p>
<p>One possible use for <code>!important</code> is to specify the style of third-party elements added to a webpage where you cannot alter the original stylesheet, its loading order, etc.</p>
<h3>You Might Also Enjoy...</h3>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/20-html-forms-best-practices-for-beginners--net-6593"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/426_formsBestPractices/200x200.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">HTML &amp; CSS</div>
<div class="roundup-block__content-title">20+ HTML Forms Best Practices for Beginners</div>
<div class="roundup-block__author">Andrew Burgess</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/30-php-best-practices-for-beginners--net-6194"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/407_php/200x200.png" loading="lazy"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">30+ PHP Best Practices for Beginners</div>
<div class="roundup-block__author">Glen Stansberry</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/24-javascript-best-practices-for-beginners--net-5399"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/350_bestPractices/Optimized.200x200.png" loading="lazy"><div class="roundup-block__primary-category topic-code">Web Development</div>
<div class="roundup-block__content-title">24 JavaScript Best Practices for Beginners</div>
<div class="roundup-block__author">Jeffrey Way</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/30-html-best-practices-for-beginners--net-4957"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/327_30Musts/200x200.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">HTML &amp; CSS</div>
<div class="roundup-block__content-title">30 HTML Best Practices for Beginners</div>
<div class="roundup-block__author">Jeffrey Way</div></a></li>
</ul>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/monty-shokeen" target="_self">Monty Shokeen</a>. Monty is a full-stack developer who also loves to write tutorials and to learn about new JavaScript libraries.</em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-02-25T05:50:18+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Create a Custom WordPress Plugin From Scratch]]></title>
      <link>//shineyrock.com/blog/read/how-to-create-a-custom-wordpress-plugin-from-scratch</link>
      <guid>https://shineyrock.com/blog/read/how-to-create-a-custom-wordpress-plugin-from-scratch#When:16:51:48Z</guid>
      <description><![CDATA[<div content-block-type="Wysi" class="content-block-wysi">
<p>Every WordPress site needs a theme to pull content from the database and display that in a design. And theoretically you could run a site with just a theme and nothing else. But that site would be very limited without the addition of plugins.</p>
<p>Plugins add extra functionality to your WordPress site over and above what comes with WordPress core. Everything from a booking calendar or animated slider to a full-featured learning management system or online marketplace—you can add them all to your site with plugins. </p>
<p>In this guide, I’ll show you how to create your own WordPress plugin. I’ll show you how to use best practice in plugin development, how to get the code in your plugin to run, and how to structure your plugin’s code and files. I’ll also walk you through the process of creating your first plugin and answer some FAQs.</p>
<h2>Free and Paid WordPress Plugins</h2>
<p>If you want to add some specific features to your website, there are plenty of places you can buy or download plugins. The WordPress plugin directory includes thousands of free plugins that’ll help you create the site you need. But if you’re looking for more advanced features, a better user interface, or improved support, it’s worth buying premium plugins from authors on <a href="https://codecanyon.net/category/wordpress">CodeCanyon</a>.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/Codecanyon%20shortcode%20plugins.jpg" alt="CodeCanyon WordPress Plugins" loading="lazy"></a></figure>
<p>But sometimes you might need to code your own plugin! This can be more efficient than using a third-party plugin, as you might only need a part of the code provided by those. It also means you can develop a plugin that meets your needs more precisely, or you can customise an existing plugin to adapt it for your site.</p>
<h2>What Do You Need to Make a Plugin?</h2>
<p>To build your own plugin and run it on your WordPress site, you’ll need:</p>
<ul>
<li>a code editor</li>
<li>a development WordPress installation with a copy of your live site for testing</li>
</ul>
<p>Don't test your plugin on your live site until you know it works!</p>
<p>If you don’t already have a local WordPress installation, follow our guide to <a href="https://code.tutsplus.com/articles/how-to-set-up-a-killer-wordpress-testing-environment-locally--net-5065">copying your site to a local install</a>. Or if you can’t install WordPress locally, use a duplicate of your site on a testing installation on your server. Find out <a href="https://webdesign.tutsplus.com/tutorials/how-to-migrate-a-wordpress-site--cms-34827">how to copy your site</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/how-to-set-up-a-killer-wordpress-testing-environment-locally--net-5065"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/net/uploads/legacy/331_ultimateWP/200x200.png" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Set Up a Killer WordPress Testing Environment Locally</div>
<div class="roundup-block__author">Harley Alexander</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/how-to-migrate-a-wordpress-site--cms-34827"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/227/posts/34827/preview_image/migrating%20wordpress.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">How to Migrate a WordPress Site</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
</ul>
<h2>Types of WordPress Plugin</h2>
<p>Plugins can carry out lots of tasks. What they all have in common is that they add extra functionality to your site. Types of WordPress plugin include:</p>
<ul>
<li>
<strong>site maintenance plugins</strong> for things like security, performance, or backups</li>
<li>
<strong>marketing and sales plugins</strong> for things like SEO, social media, or eCommerce</li>
<li>
<strong>content plugins</strong> such as custom post types, widgets, shortcodes, forms, galleries, and video feeds</li>
<li>
<strong>API plugins</strong> that work with the WordPress REST API or pull in external content from services like Google Maps</li>
<li>
<strong>community plugins</strong> that add social networking features</li>
</ul>
<p>… and lots more! For an idea of what plugins can do, check out the <a href="https://wordpress.org/plugins/">WordPress plugin directory</a> and the <a href="https://codecanyon.net/category/wordpress">CodeCanyon</a> marketplace.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/WordPress%20plug-in%20directory.jpg" alt="WordPress plugin directory" loading="lazy"></figure>
<h2>What Goes Into a Plugin? </h2>
<p>Before you get started building your plugin, it’s worth knowing what goes into a plugin. Exactly what the plugin code will look like will depend on your plugin: some are small, with just one plugin file, while others are massive, with multiple include files, scripts, stylesheets, and template files. And there are plenty that fall somewhere in the middle.</p>
<p>The elements you’ll probably have in your plugin are:</p>
<ul>
<li>the main plugin file (this is essential)</li>
<li>folders for different file types</li>
<li>scripts</li>
<li>stylesheets</li>
<li>include files to organise the code</li>
</ul>
<p>Let’s have a look at each of these.</p>
<h3>The Main Plugin File</h3>
<p>The main plugin file is essential. It will always be a PHP file, and it will always contain commented-out text that tells WordPress about your plugin.</p>
<p>Here’s an example, from the Akismet plugin:</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

/**

 * @package Akismet

 */

/*

Plugin Name: Akismet Anti-Spam

Plugin URI: https://akismet.com/

Description: Used by millions, Akismet is quite possibly the best way in the world to &lt;strong&gt;protect your blog from spam&lt;/strong&gt;. It keeps your site protected even while you sleep. To get started: activate the Akismet plugin and then go to your Akismet Settings page to set up your API key.

Version: 4.1.7

Author: Automattic

Author URI: https://automattic.com/wordpress-plugins/

License: GPLv2 or later

Text Domain: akismet

*/</pre>
<p>This tells WordPress what your plugin does, where to find out more about it, and who developed it. It also gives information about the version number and the text domain and path for internationalisation, as well as the license.</p>
<p>WordPress takes this information and uses it to populate the plugins screen in your site. Here’s how Akismet looks on that screen:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/Akismet%20in%20the%20plugins%20admin%20screen.jpg" alt="Akismet in the plugins admin screen" loading="lazy"></figure>
<p>You can see that the information provided in the plugin file is used to populate this entry and provide links.</p>
<p>Other information about the plugin is contained in the <strong>README.txt</strong> file, which is used to populate the plugin's page in the plugin directory:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/Akismet%20in%20the%20plugins%20directory.jpg" alt="Akismet in the plugins directory" loading="lazy"></figure>
<p>The main plugin file will also contain the code that makes the plugin run. Sometimes that will be all the PHP for the plugin, but for larger plugins, there’ll be calls to include files containing extra code. This helps you organise your code and means you don’t have one long, disorganised file that’s difficult to work with. I’ll show you how to use include files later in this guide.</p>
<h3>Folder Structure</h3>
<p>While there are no hard and fast rules on how you organise the folders in your plugin, it makes sense to adopt the same structure that other plugin developers use. This will familiarise you with the way other plugins are built and mean that if you share your code in future, it will make sense to other people.</p>
<p>Folders in your plugin might include:</p>
<ul>
<li>
<strong>css</strong> or <strong>styles</strong> for stylesheets</li>
<li>
<strong>scripts</strong> for JavaScript</li>
<li>
<strong>includes</strong> for include files</li>
<li>
<strong>templates</strong> for template files that your plugin outputs</li>
<li>
<strong>assets</strong> for media and other asset files</li>
<li>
<strong>i18n</strong> for internationalisation files</li>
</ul>
<p>You might find you need to use more folders if your plugin is large or complex. For example, WooCommerce has folders for packages, sample data, and more. These in turn include subfolders for things like blocks and admin files.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/WooCommerce%20files.jpg" alt="WooCommerce files" loading="lazy"></figure>
<h3>Scripts and Stylesheets</h3>
<p>If your plugin outputs content that needs styling, either in the front-end or in the admin screens, you may need stylesheets. And if your plugin will use scripts, you’ll need files for these.</p>
<p>It makes sense to keep these in their own folder, even if you only have one of each. You’ll need to enqueue these scripts and stylesheets using a dedicated function in your main plugin file. I’ll show you how to do this when we’re building the plugin.</p>
<h3>Include Files</h3>
<p>If your plugin needs organisation, you can do this by splitting your code into multiple files, called include files. You then put these files into their own folder and call them in your main plugin file using an <code>include</code> or <code>require</code> function.</p>
<p>This way, you can keep the bulk of your code in a well-organised file structure while your main plugin file remains lean and minimal.</p>
<p>If your plugin isn’t all that big, you don’t need to use include files: just add your code to the main plugin file. But you might find you need to organise this file and reorder functions within it as you add them, to maintain a logical structure.</p>
<p>These are the most common elements of a plugin. We’ve seen in the WooCommerce example that there can be many more. Or in smaller plugins there can be many fewer. But as you develop more plugins, you’ll find yourself using these elements more and more.</p>
<h2>How to Run Your Plugin Code: Options</h2>
<p>When you add code to your plugin, it won’t do anything until you activate it in some way. There are a few methods you can use to activate your code or pull in code from WordPress:</p>
<ul>
<li>functions</li>
<li>action and filter hooks</li>
<li>classes</li>
</ul>
<p>Let’s take a look at each of these.</p>
<h3>Functions</h3>
<p>Functions are the building blocks of WordPress code. They’re the easiest way to get started writing your own plugins and the quickest to code. You’ll find plenty of them in your themes' files too.</p>
<p>Each function will have its own name, followed by braces and the code inside those braces.</p>
<p>The code inside your plugin won’t run unless you call the function somehow. The simplest (but least flexible) way to do that is by directly calling the code in your theme or somewhere else in your plugin.</p>
<p>Here’s an example function:</p>
<pre class="brush: php noskimlinks noskimwords">tutsplus_myfunction {

// code goes here

}</pre>
<p>To directly call that function in your theme, you’d simply type <code>tutsplus_myfunction()</code> in the place in your theme template files where you want it to run. Or you might add it somewhere in your plugin... but you’d also need to activate the code that calls it!</p>
<p>There are a few limitations to this:</p>
<ul>
<li>If the function does something that isn’t just adding content somewhere in a theme template file, you can’t activate it this way.</li>
<li>If you want to call the function in multiple places, you’ll have to call it again and again.</li>
<li>It can be hard to keep track of all the places you’ve manually called a function.</li>
</ul>
<p>It’s much better practice to call functions by attaching them to a hook.</p>
<h3>Action and Filter Hooks</h3>
<p>By attaching your function to a hook, you run its code whenever that hook is fired. There are two types of hook: action hooks and filter hooks.</p>
<p>Action hooks are empty. When WordPress comes to them, it does nothing unless a function has been hooked to that hook.</p>
<p>Filter hooks contain code that will run <em>unless</em> there is a function hooked to that hook. If there is a function, it’ll run the code in that function instead. This means you can add default code to your plugin but override it in another plugin, or you can write a function that overrides the default code that’s attached to a filter hook in WordPress itself.</p>
<p>Hooks are fired in three ways:</p>
<ul>
<li>By WordPress itself. The WordPress core code includes hundreds of hooks that fire at different times. Which one you hook your function to will depend on what your function does and when you want its code to run. You can find a list of <a href="https://developer.wordpress.org/plugins/hooks/">WordPress hooks</a> in the developer handbook.</li>
<li>By your theme. Many themes include action and filter hooks that you can use to add extra content in key places in your website’s design. And all themes will include a <code>wp_head</code> and <code>wp_footer</code> hook. Combine these with conditional tags, and you can run specific code on certain types of pages in your site.</li>
<li>By your plugin or other plugins. You might add an action hook to your plugin and then add functions in your include files that attach code to that hook. Or you might write a filter hook and then have a function that overrides its contents under certain circumstances. Alternatively, if you’re creating a plugin to complement another plugin, you can hook your functions to the existing hook in the third-party plugin. I’ve done this with WooCommerce, for example, to customise what’s output on product pages.</li>
</ul>
<p>Some of this is more advanced, but with your first plugin, you’ll probably be hooking your functions to an action or filter hook output by WordPress itself, most likely an action hook.</p>
<h3>Classes</h3>
<p>Classes are a way of coding more complex features, such as widgets and customizer elements, that make use of the existing WordPress APIs. </p>
<p>When you write a class in your plugin, you’ll probably be extending an existing class that’s coded into WordPress. This way, you can make use of the code provided by the class and tweak it to make it your own. An example would be the customizer, where you might write a class including a color picker, making use of the color picker UI that’s provided in the existing class for the customizer.</p>
<p>Using classes is more advanced than functions, and it’s unlikely you’ll do it in your first plugin. To find out more, see our guide to <a href="https://code.tutsplus.com/tutorials/object-oriented-programming-in-wordpress-classes--cms-20021">classes in WordPress</a>.</p>
<p>If you do write classes, you’ll still have to use actions or filters to get them to run.</p>
<h2>Plugin Best Practices</h2>
<p>Before you start coding your plugin, it helps to understand <a href="https://developer.wordpress.org/plugins/plugin-basics/best-practices/">best practices</a> for plugins so your code can be high quality right from the start. </p>
<p>These include:</p>
<ul>
<li>Write your code according to <a href="https://make.wordpress.org/core/handbook/best-practices/coding-standards/">WordPress coding standards</a>. If you want to submit your plugin to the plugin directory, you’ll have to do this.</li>
<li>Use comments throughout your code so other people can work with it—and so you remember how your code works when you come back to it in the future.</li>
<li>Name your functions, hooks, and classes using prefixes so they are unique to your plugin. You don’t want to give a function the same name as another function in a different plugin or in WordPress core.</li>
<li>Organise your folders logically, and keep your code separated so other people can understand it and so you can add to it over time without it becoming a mess.</li>
</ul>
<p>You might think that using best practice isn’t necessary because it’s just you working with the plugin. But your plugin might grow over time, you might let other people use it, or you might sell it. Or you might come back to it in two years and not be able to remember how the code is organised!</p>
<h2>Creating Your First Plugin in 4 Steps</h2>
<p>At last! You have a grounding in how plugins work, and it’s time to roll your sleeves up and create your first plugin. I’m going to take you through the process of creating a simple plugin that registers a custom post type.</p>
<p>This is a very common use of a plugin, and something you might then build on over time to add custom template files for your custom post type or other functionality.</p>
<p>I’ll show you the basic code for the plugin and give you an introduction to how you might add to it over time.</p>
<h3>1. Create the Plugin Folder and File</h3>
<p>Even if your plugin is starting out small with just one file, it’s good practice to give it its own folder. Start by creating a folder in your <strong>wp-content/plugins</strong> directory. Inside that, create a PHP file for your plugin.</p>
<p>Give them both a name that makes sense and includes a prefix. I’m calling my folder <strong>tutsplus-register-post-types</strong> and my file <strong>tutsplus-register-post-types.php</strong>.</p>
<p>Now open your plugin file and add the commented-out information at the top. You can take mine below and edit it to reflect the fact that this is your plugin, not mine.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php

/*

Plugin Name: Tuts+ Register Post Types

Plugin URI: https://tutsplus.com/

Description: Plugin to accompany tutsplus guide to creating plugins, registers a post type.

Version: 1.0

Author: Rachel McCollin

Author URI: https://rachelmccollin.com/

License: GPLv2 or later

Text Domain: tutsplus

*/</pre>
<p>Now, if you save your file and go to the <strong>Plugins</strong> screen in your development site, you’ll see the plugin on the screen:</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/New%20plugin%20in%20the%20plugins%20admin%20screen.jpg" alt="New plugin in the plugins admin screen" loading="lazy"></figure>
<p>You can activate it if you want, but it won’t do anything yet because you haven’t added any code to it. Let’s do that.</p>
<h3>2. Add Functions</h3>
<p>Now it’s time to write the first function in our plugin. Start by making your plugin and adding the braces which will contain the code. Here’s mine:</p>
<pre class="brush: php noskimlinks noskimwords">function tutsplus_register_post_type() {

    // movies

    $labels = array(

        'name' =&gt; __( 'Movies' , 'tutsplus' ),

        'singular_name' =&gt; __( 'Movie' , 'tutsplus' ),

        'add_new' =&gt; __( 'New Movie' , 'tutsplus' ),

        'add_new_item' =&gt; __( 'Add New Movie' , 'tutsplus' ),

        'edit_item' =&gt; __( 'Edit Movie' , 'tutsplus' ),

        'new_item' =&gt; __( 'New Movie' , 'tutsplus' ),

        'view_item' =&gt; __( 'View Movie' , 'tutsplus' ),

        'search_items' =&gt; __( 'Search Movies' , 'tutsplus' ),

        'not_found' =&gt;  __( 'No Movies Found' , 'tutsplus' ),

        'not_found_in_trash' =&gt; __( 'No Movies found in Trash' , 'tutsplus' ),

    );

    $args = array(

        'labels' =&gt; $labels,

        'has_archive' =&gt; true,

        'public' =&gt; true,

        'hierarchical' =&gt; false,

        'supports' =&gt; array(

            'title',

            'editor',

            'excerpt',

            'custom-fields',

            'thumbnail',

            'page-attributes'

        ),

        'rewrite'   =&gt; array( 'slug' =&gt; 'movies' ),

        'show_in_rest' =&gt; true

    );

}</pre>
<p>This includes all the labels and arguments for your post type and (crucially) the <code>register_post_type()</code> function which is provided by WordPress.</p>
<p>I’ve used movies as my post type here as I’m creating an imaginary movie review site. You might want to use something different.</p>
<p>Now, if you save your file and go back to your site, you’ll see that nothing has changed. That’s because you haven’t activated your code. The method we use to activate the function here is by hooking it to an action hook provided by WordPress, the <code>init</code> hook. When you use a function provided by WordPress (such as <code>register_post_type</code>), you’ll find that there’s a hook that you should use. You can find details in the WordPress handbook entry for <a href="https://developer.wordpress.org/reference/functions/register_post_type/">registering custom post types</a>.</p>
<p>So let’s add the hook. Under your code, and outside the braces, add this line:</p>
<pre class="brush: php noskimlinks noskimwords">add_action( 'init', 'tutsplus_register_post_type' );</pre>
<p>We use the <code>add_action()</code> function to hook our code to an action hook, with two parameters: the name of the action hook and the name of our function.</p>
<p>Now try saving your files and going back to your site. You’ll see that the custom post type has been added to your admin menu (assuming you’ve activated the plugin).</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/New%20post%20type%20in%20admin%20menu.jpg" alt="New post type in admin menu" loading="lazy"></figure>
<p>Nice!</p>
<p>Now let’s add an extra function, to register a custom taxonomy. Below the code you’ve written so far, add this:</p>
<pre class="brush: php noskimlinks noskimwords">function tutsplus_register_taxonomy() {

    // books
    $labels = array(
        'name' =&gt; __( 'Genres' , 'tutsplus' ),
        'singular_name' =&gt; __( 'Genre', 'tutsplus' ),
        'search_items' =&gt; __( 'Search Genres' , 'tutsplus' ),
        'all_items' =&gt; __( 'All Genres' , 'tutsplus' ),
        'edit_item' =&gt; __( 'Edit Genre' , 'tutsplus' ),
        'update_item' =&gt; __( 'Update Genres' , 'tutsplus' ),
        'add_new_item' =&gt; __( 'Add New Genre' , 'tutsplus' ),
        'new_item_name' =&gt; __( 'New Genre Name' , 'tutsplus' ),
        'menu_name' =&gt; __( 'Genres' , 'tutsplus' ),
    );

    $args = array(
        'labels' =&gt; $labels,
        'hierarchical' =&gt; true,
        'sort' =&gt; true,
        'args' =&gt; array( 'orderby' =&gt; 'term_order' ),
        'rewrite' =&gt; array( 'slug' =&gt; 'genres' ),
        'show_admin_column' =&gt; true,
        'show_in_rest' =&gt; true

    );

    register_taxonomy( 'tutsplus_genre', array( 'tutsplus_movie' ), $args);

}
add_action( 'init', 'tutsplus_register_taxonomy' );</pre>
<p>Again, you might want to change the name of your custom taxonomy. Here, I’ve made the taxonomy apply to the post type I’ve just registered (the third parameter of the <code>register_taxonomy</code> function). If you gave your post type a different name, make sure to edit that bit.</p>
<p>Now save your file and take a look at your admin screens. When you hover over your post type in the admin menu, you’ll see the new taxonomy.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/36390/image-upload/New%20taxonomy%20inn%20WordPress%20admin.jpg" alt="New taxonomy inn WordPress admin" loading="lazy"></figure>
<p>You now have a working plugin. Well done!</p>
<p>Let’s take a look at how you might add to it.</p>
<h3>3. Enqueue Stylesheets and Scripts</h3>
<p>If you need to use custom styling or scripts in your plugin, you could add them right into your plugin file—but that’s not best practice. Instead, you should create stylesheets and scripts as separate files in your plugin folder and enqueue those, using a function provided by WordPress.</p>
<p>Let’s imagine you want to add styling for your custom post type. You could add this to your theme, but you might want to add some specific styling to the plugin to make the post type stand out from other post types in any theme.</p>
<p>To do this, you create a new folder inside your plugin folder called <strong>css</strong> (or <strong>styles</strong>, it’s up to you). Inside that folder, create a stylesheet called <strong>style.css</strong>, or you can give it a more specific name for clarity. I’m going to call mine <strong>movies.css</strong>.</p>
<p>You then need to enqueue that file in your plugin so that it can be used by WordPress. Add this to your main plugin file, above the functions you already have. I like to add enqueuing and includes first in my plugin file so I can see what other files are being activated.</p>
<pre class="brush: plain noskimlinks noskimwords">function tutsplus_movie_styles() {
    wp_enqueue_style( 'movies',  plugin_dir_url( __FILE__ ) . ‘/css/movies.css’ );
}
add_action( 'wp_enqueue_scripts', ‘tutsplus_movie_styles' );</pre>
<p>If you save your file, you won’t see any difference in your admin screens—but if you’ve added posts of the custom post type and your stylesheet includes styling for them, you’ll now see that in the front-end of your site.</p>
<p>Note that the hook used for enqueuing both stylesheets and scripts is the same: they both use <code>wp_enqueue_scripts</code>. There isn’t a separate hook for styles.</p>
<p>Enqueuing scripts works in a very similar way. Follow these steps:</p>
<ul>
<li>Add a <strong>scripts</strong> or <strong>js</strong> folder to your plugin folder.</li>
<li>Save your script files in that folder.</li>
<li>Enqueue the script in the same way as the stylesheet above, replacing the <code>wp_enqueue_style()</code> function with <code>wp_enqueue_script()</code>.</li>
</ul>
<h3>4. Using Include Files</h3>
<p>Another option as you develop your plugin is to create extra PHP files, known as include files. If you have a lot of these, you might create multiple folders for different types of include file, or you might just create one folder called <strong>includes</strong>.</p>
<p>There are a few functions you can use to include files, which you’ll find in our comprehensive guide to <a href="https://code.tutsplus.com/articles/how-to-include-and-require-files-and-templates-in-wordpress--wp-26419">including and requiring files</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/how-to-include-and-require-files-and-templates-in-wordpress--wp-26419"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/wp/authors/legacy/Japh/2012/08/27/preview.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">Creative Coding</div>
<div class="roundup-block__content-title">How to Include and Require Files and Templates in WordPress</div>
<div class="roundup-block__author">Tom McFarlin</div></a></li></ul>
<p>For example, in our custom post type plugin, we might create some code to vary the way the content of the page is output, using the <code>the_content</code> filter hook to amend the code being run each time the content is output on a product page.</p>
<p>Instead of adding this code to the main plugin file, you could add it to a separate file called <strong>movie-content.php</strong> and then write the code in that file for the way the content is output for movies.</p>
<p>To include this file in your plugin, you add a folder called <strong>includes</strong> to your plugin, and then inside that folder you add the <strong>content-movie.php</strong> file.</p>
<p>To include that file in your plugin, you add this code at the beginning for the main plugin file:</p>
<pre class="brush: php noskimlinks noskimwords">include( plugin_dir_path( __FILE__ ) . ‘includes/movie-content.php' );</pre>
<p>You don’t need to hook this to an action or filter hook—just use the <code>include_once()</code> function in your plugin file. That will then call the code from the include file as if it was in your main plugin file at that point.</p>
<h2>How to Extend or Edit an Existing Plugin</h2>
<p>Sometimes you might find a plugin in the plugin directory or from a plugin vendor that does most of what you need a plugin to do, but not quite all. Or you might be running a plugin and want to make some tweaks and customisations.</p>
<p>The fact that WordPress is open source makes this possible. You can take another plugin’s code and extend or edit it to make it work the way you want it to.</p>
<p>There are two ways to do this:</p>
<ul>
<li>Take an existing plugin and fork it—i.e. edit it so it works differently, is more reliable, or has extra features.</li>
<li>Write your own plugin that extends the original plugin.</li>
</ul>
<p>Taking an existing plugin and editing it is fairly straightforward: you make your own copy on a development site (never live!) and make edits to it as needed. Make sure you use version control to track your changes in case something goes wrong.</p>
<p>Extending a plugin by writing your own plugin is slightly more complicated, and won’t work with every plugin, but is a more robust way of doing things in my opinion.</p>
<p>Many of the most popular plugins will make extensive use of hooks and classes in their code. You can hook into action and filter hooks and extend classes to write your own code, which uses the existing plugin’s code as a base but then adds to or edits it.</p>
<p>For example, WooCommerce has so many functions, hooks, and classes that it has its own <a href="https://docs.woocommerce.com/documentation/plugins/woocommerce/woocommerce-codex/" target="_self">API and developer documentation</a>. Each part of the WooCommerce system is powered by one or more of these functions, hooks, or classes. To make changes, you need to identify which code is driving the part of the system you want to change, and then write your own plugin which either attaches to the same hook(s) or extends the classes.</p>
<p>You’ll find you can create significant customisations to a plugin like WooCommerce in this way: I once used it to power a listings site that didn’t even include a checkout. I used hooks to remove all the elements I didn’t want and add new ones.</p>
<p>For some examples of how you can hook into WooCommerce and extend or edit it with your own plugin, see our guide to <a href="https://code.tutsplus.com/tutorials/woocommerce-adding-the-product-short-description-to-archive-pages--cms-25435">adding product descriptions to archive pages</a> and to <a href="https://code.tutsplus.com/tutorials/create-a-blog-for-each-category-or-department-in-your-woocommerce-store--cms-26154">adding a product-based blog to your store</a>. These examples just scratch the surface of what you can achieve, but they'll give you an idea of how to start.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/woocommerce-adding-the-product-short-description-to-archive-pages--cms-25435"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/227/posts/25435/preview_image/getting-started-with-woocommerce-preview.png" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">WooCommerce: Adding the Product Short Description to Archive Pages</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-a-blog-for-each-category-or-department-in-your-woocommerce-store--cms-26154"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/preview_image/getting-started-with-woocommerce-preview.png" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Create a Blog for Each Category or Department in Your WooCommerce Store</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
</ul>
<h2><strong>Taking It Further: Plugin Features</strong></h2>
<p>In this guide, I’ve shown you how plugins are coded and how to get started building a simple plugin.</p>
<p>Once you’ve got the hang of plugin development, you can build more complex and full-featured plugins to carry out more complex tasks on your site.</p>
<p>Let’s take a look at some examples.</p>
<h3><strong>Widget Plugins</strong></h3>
<p>Widget plugins involve working with classes but are a good introduction to the topic. Our guide to <a href="https://code.tutsplus.com/tutorials/creating-your-own-widgets-using-various-wordpress-apis-introduction--cms-22460">creating a widget plugin</a> will help you do it.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/creating-your-own-widgets-using-various-wordpress-apis-introduction--cms-22460"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/411/posts/22460/preview_image/Creating_Your_Own_Widgets_400px.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress Widgets</div>
<div class="roundup-block__content-title">Creating Your Own Widgets Using Various WordPress APIs: Introduction</div>
<div class="roundup-block__author">Bonang Salemane</div></a></li></ul>
<p>You can also find plenty of <a href="https://codecanyon.net/category/wordpress/widgets">widget plugins</a> on CodeCanyon, which will save you coding them yourself. On our blog, we’ve identified the <a href="https://code.tutsplus.com/tutorials/wordpress-widgets-to-watch--cms-27752">best widget plugins for 2021</a>, the <a href="https://webdesign.tutsplus.com/tutorials/10-best-wordpress-facebook-widgets--cms-27289">best Facebook widgets</a>, and the <a href="https://code.tutsplus.com/tutorials/10-best-wordpress-twitter-widgets--cms-27127">best Twitter widgets</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/wordpress-widgets-to-watch--cms-27752"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27752/preview_image/wordpress%20ness.png" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Best WordPress Widgets for 2021</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/35454/image/Code%20Canyon%20widget%20plugins.jpg" alt="Code Canyon widget plugins" loading="lazy"></figure>
<h3><strong>Shortcode Plugins</strong></h3>
<p>Creating a shortcode is a great place to start creating plugins as they’re relatively simple and very useful. Find out how to create them with our guide to <a href="https://code.tutsplus.com/articles/getting-started-with-wordpress-shortcodes--wp-21197">coding shortcodes in WordPress</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/getting-started-with-wordpress-shortcodes--wp-21197"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/wp/uploads/legacy/049_GettingStartedWPShortcodes/preview.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">Plugins</div>
<div class="roundup-block__content-title">Getting Started With WordPress Shortcodes</div>
<div class="roundup-block__author">Rohan Mehta</div></a></li></ul>
<p>CodeCanyon also has a bunch of useful <a href="https://codecanyon.net/category/wordpress?term=wordpress%20shortcodes&amp;view=grid#content">shortcode plugins</a> you can use to add extra functionality to your site.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=wordpress%20shortcodes&amp;view=grid#content" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/35454/image/Code%20Canyon%20shortcode%20plugins.jpg" alt="Code Canyon shortcode plugins" loading="lazy"></a></figure>
<h3><strong>Social Media Plugins</strong></h3>
<p>Social media plugins are incredibly popular as they let you display your Facebook, Twitter, or Instagram feed on your site and let your visitors share your content via their own social media accounts.</p>
<p>CodeCanyon has dozens of <a href="https://codecanyon.net/category/wordpress?term=wordpress%20social%20media&amp;view=grid">social media plugins</a>. Learn about the <a href="https://code.tutsplus.com/tutorials/best-wordpress-social-media-plugins--cms-32781">best social media plugins</a> and how to <a href="https://code.tutsplus.com/tutorials/add-an-online-community-to-your-wordpress-site-with-userpro--cms-33606">create an online community for your WordPress site</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/best-wordpress-social-media-plugins--cms-32781"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/32781/preview_image/Untitled-1.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">Best WordPress Social Media Plugins of 2019</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/add-an-online-community-to-your-wordpress-site-with-userpro--cms-33606"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/369/posts/33606/preview_image/create-your-own-online-community-with-userpro.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Create an Online Community for Your WordPress Site With UserPro</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
</ul>
<h3><strong>Gallery and Media Plugins</strong></h3>
<p>If you want to optimise the media on your site and display galleries or video feeds, a plugin will make everything look more professional. Find out how to find the <a href="https://code.tutsplus.com/tutorials/how-to-find-the-best-wordpress-gallery-plugin-for-images-or-video--cms-33638">best gallery plugins for images or video</a> and how to <a href="https://code.tutsplus.com/tutorials/create-a-wordpress-image-gallery-code-the-plugin--cms-32093">code your own gallery plugin</a>. Or browse the professional <a href="https://codecanyon.net/category/wordpress?term=wordpress%20image%20video&amp;view=grid">gallery and video plugins</a> on CodeCanyon.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-find-the-best-wordpress-gallery-plugin-for-images-or-video--cms-33638"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33638/preview_image/galleries.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Find the Best WordPress Gallery Plugins for Images or Video</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-a-wordpress-image-gallery-code-the-plugin--cms-32093"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/227/posts/32093/preview_image/child%20pages.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Create a WordPress Image Gallery: Code the Plugin</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
</ul>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=wordpress%20image%20video&amp;view=grid" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/35454/image/media%20plugins%20on%20Code%20Canyon.jpg" alt="media plugins on Code Canyon" loading="lazy"></a></figure>
<h3><strong>Form Plugins</strong></h3>
<p>Adding forms to your site lets your visitors get in touch and helps build a relationship. CodeCanyon has plenty of <a href="https://codecanyon.net/category/wordpress?term=wordpress%20form&amp;view=grid">premium form plugins</a> that will make it easy for your visitors to contact you. Learn <a href="https://code.tutsplus.com/tutorials/how-to-create-a-form-with-the-quform-wordpress-plugin--cms-33602">how to create a form with the bestselling QuForm plugin</a>.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-create-a-form-with-the-quform-wordpress-plugin--cms-33602"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33602/preview_image/forms.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">How to Create a Form With the Quform WordPress Plugin </div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul>
<h2><strong>FAQs</strong></h2>
<p>Here are the answers to some of the most frequently asked questions about WordPress plugins.</p>
<p><strong>Why can’t I just add the code I need to my theme functions file?</strong></p>
<p>It’s tempting to simply keep on adding code to the <strong>functions.php</strong> file, and there is some code that should be there.</p>
<p>But if your code is related to functionality in your site, rather than the design or the output of content, then you should code it into a plugin. This means that if you switch themes in the future, you still have that functionality. And you can use the plugin on another site running a different theme.</p>
<p><strong>I’ve added code to my plugin. Why is nothing happening?</strong></p>
<p>This is probably because you haven’t hooked your code to an action or filter hook. Until you do that, nothing will happen.</p>
<p><strong>When I edit my plugin and check my site, I get a white screen. Help!</strong></p>
<p>You’ve probably added some code that’s got an error in it somewhere. PHP is an unforgiving language, and this might be as minor as a semicolon in the wrong place.</p>
<p>Try <a href="https://code.tutsplus.com/tutorials/fixing-the-wordpress-white-screen-of-death--cms-21008">turning on <code class="inline">WP_DEBUG</code></a> in your <strong>wp-config.php</strong> file, and you’ll see a message telling you where the error is. Then you can fix it.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/fixing-the-wordpress-white-screen-of-death--cms-21008"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/21008/preview_image/wp-error.jpg" loading="lazy"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Fixing the WordPress White Screen of Death</div>
<div class="roundup-block__author">Sam B.</div></a></li></ul>
<p><strong>When I activate my plugin, I get an error message telling me too many headers have been output. What does this mean?</strong></p>
<p>All this normally means is that there are too many empty lines in your plugin file. Go back and check there are no empty lines at the beginning of the file.</p>
<p>If that doesn’t fix it, try <a href="https://code.tutsplus.com/tutorials/fixing-the-wordpress-white-screen-of-death--cms-21008" target="_self">turning on </a><code class="inline"><a href="https://code.tutsplus.com/tutorials/fixing-the-wordpress-white-screen-of-death--cms-21008" target="_self">WP_DEBUG</a></code>.</p>
<p><strong>Where can I find out more about developing plugins?</strong></p>
<p>We have lots of tutorials and courses helping you to <a href="https://code.tutsplus.com/tutorials/search/wordpress+plugin">build all kinds of plugins</a> here on Envato Tuts+. See if you can find anything that inspires you.</p>
<figure class="post_image"><img src="https://cms-assets.tutsplus.com/uploads/users/227/posts/35454/image/tutsplus%20plugins%20courses.jpg" alt="tutsplus plugins courses" loading="lazy"></figure>
<p>Where can I download plugins for my site?</p>
<p>You can choose from thousands of free plugins in the WordPress plugin directory. You can also buy third-party plugins from <a href="https://codecanyon.net/category/wordpress">CodeCanyon</a>. Always buy plugins from a reputable supplier so you can be sure they follow WordPress coding standards and don’t contain malicious code.</p>
<h2><strong>Summary</strong></h2>
<p>Plugins will turn your site from a simple blog into a powerful website that includes advanced features and is secure and robust. Try adding plugins to your site today and coding your own to see how you can use plugins to improve your WordPress site.</p>
<h2>The Best WordPress Themes and Plugins on Envato Market</h2>
<p>Explore thousands of the <a href="https://themeforest.net/popular_item/by_category?category=wordpress" target="_self">best WordPress themes ever created on ThemeForest</a> and <a href="https://codecanyon.net/popular_item/by_category?category=wordpress" target="_self">leading WordPress plugins on CodeCanyon</a>. Purchase these high-quality WordPress themes and plugins and improve your website experience for you and your visitors. </p>
<figure class="post_image"><a href="https://themeforest.net/popular_item/by_category?category=wordpress" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34347/image/themeforest%20popular%20wordpress%20themes.jpg" alt="Popular WordPress themes on ThemeForest" loading="lazy"></a></figure>
<p>Here are a few of the best-selling and up-and-coming WordPress themes and plugins available for 2020.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/15-best-wordpress-portfolio-themes-for-creatives--cms-26277"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/26277/preview_image/wp_portfolio.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">Inspiration</div>
<div class="roundup-block__content-title">23+ Best WordPress Portfolio Themes for Creatives</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/8-best-wordpress-slider-carousel-plugins-of-2017--cms-28592"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/28592/preview_image/slider.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">25 Best WordPress Slider &amp; Carousel Plugins of 2021</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/20-best-wordpress-calendar-plugins-and-widgets--cms-25906"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/769/posts/25906/preview_image/calendar-c.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">20 Best WordPress Calendar Plugins and Widgets (+5 Free Plugins)</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-responsive-wordpress-themes--cms-29973"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29973/preview_image/wordpress-responsive-themes.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">31+ Best Responsive WordPress Themes (For Sites in 2021)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-visual-composer-addons-extensions-of-2017--cms-28733"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WPBakery Page Builder (Visual Composer) Addons and Extensions of 2021</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-wordpress-themes-for-consultants-coaches--cms-29404"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29404/preview_image/consultant.jpg" loading="lazy"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">30 Best Coaching &amp; Consulting WordPress Themes for 2021</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
</ul>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2021-02-22T16:51:48+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[10 Best Responsive HTML5 Sliders for Images and Text&#8230; and 3 Free Options]]></title>
      <link>//shineyrock.com/blog/read/10-best-responsive-html5-sliders-for-images-and-text...-and-3-free-options</link>
      <guid>https://shineyrock.com/blog/read/10-best-responsive-html5-sliders-for-images-and-text...-and-3-free-options#When:14:50:57Z</guid>
      <description><![CDATA[<p>In this post, I'll show you some of the best free and paid HTML5 sliders. We'll see responsive text sliders, responsive image sliders with text, banner sliders, and more. All built with HTML5 and CSS.</p><h2>Why Use a Responsive HTML5 Slider?</h2><p>HTML5 enables users to have a better and more consistent web experience across several devices. Now that smart devices are the number one way that people access the web, your site needs to be responsive. That is, it needs to work on varying screen sizes and resolutions—from a smartphone right up to a full-size computer.<br></p><p>A professional, responsive HTML5 and CSS slider will look great and work great on all these devices. If you have image-rich content or want to present key text in an interesting way on your website, then you just can't go wrong by using an HTML5 slider.</p><h2>HTML5 Sliders on CodeCanyon</h2><p>There are currently over <a href="https://codecanyon.net/tags/carousel,slider?sort=sales&amp;term=sliders&amp;view=grid" rel="external" target="_blank">230 premium HTML5 based content sliders</a> available on CodeCanyon. You can start using them on your website right away. Once you purchase a plugin, you will be eligible for free lifetime updates and six months of free support.</p><figure class="post_image"><a href="https://codecanyon.net/tags/carousel,slider?sort=sales&amp;term=sliders&amp;view=grid" target="_self"><img alt="HTML5 Sliders on Codecanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/html_carousel_codecanyon.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/html_carousel_codecanyon.png"></a></figure><p>The large variety of scripts, widgets, and plugins available in the market should meet almost all your needs. You can use them to create sliders for your most popular posts, your best products, or customer testimonials. They are easy to use and look great on all devices.</p><h2>The Best HTML5 Sliders on CodeCanyon for 2020</h2><p>Because there are so many sliders out there to choose from, I've pulled together a list of the ten best HTML5 sliders for images and text available at <a href="https://codecanyon.net/category/html5?page=1&amp;sort=sales&amp;term=slider" title="Link: https://codecanyon.net/category/html5?page=1&amp;sort=sales&amp;term=slider">CodeCanyon</a>.<br></p><h3>1. <a href="https://codecanyon.net/item/ultimate-3d-carousel/18847366">Ultimate 3D Carousel</a>
</h3><p>If you’ve ever seen or used an actual slide carousel, you’ll appreciate the design and aesthetics of the <a href="https://codecanyon.net/item/ultimate-3d-carousel/18847366">Ultimate 3D Carousel</a>. This carousel slider allows you to display multimedia content with a unique 3D layout that mimics the carousels of film photography days. </p><p>There are a number of effects you can apply to your carousel style if you choose, and if you prefer a more traditional slide effect, you can also opt for that instead of the carousel style.</p><figure class="post_image"><a href="https://codecanyon.net/item/ultimate-3d-carousel/18847366" target="_self"><img alt="Ultimate 3D Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/Ultimate-3D-Carousel.jpg" class="loaded"></a></figure><p>The carousel supports images, MP4 videos, MP3 audio, Google Maps, and more. It runs on all major browsers and uses a responsive layout with auto-scale function so that it works well on all mobile devices.<span class="sectionnum"><br></span></p><h3>2. <a href="https://codecanyon.net/item/simple-3d-coverflow/20099515" rel="external" target="_blank">Simple 3D Coverflow</a>
</h3><p>Simple 3D Coverflow is a fully 3D multimedia slider plugin. You can use the plugin to display multimedia content on the website in an original and catchy layout that uses 3D perspective.</p><p>You can include all kinds of content in a single slide. This includes images, videos from YouTube and Vimeo, etc.</p><figure class="post_image"><a href="https://codecanyon.net/item/simple-3d-coverflow/20099515" target="_self"><img alt="Simple 3D Coverflow" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/simple_3d_coverflow.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/simple_3d_coverflow.jpg"></a></figure><p>Here are some of its awesome features:</p><ul>
<li>responsive image slider with text that looks great on mobiles as well as desktops<br>
</li>
<li>navigation support for mouse wheel and the left/right arrow keys on the keyboard</li>
<li>ability to classify thumbnails into categories in a slideshow</li>
<li>two skins, with nine different layouts for each of them</li>
</ul><p>The plugin comes with the Revolution lightbox, which can display all kinds of content like images, videos, iFrames, Google maps, etc.</p><p>Make sure you go and see the <a href="https://www.webdesign-flash.ro/p/s3dcov/index-allsizes-black.html" rel="external" target="_blank" title="Link: http://www.webdesign-flash.ro/p/s3dcov/index-allsizes-black.html">live preview</a> of this fantastic plugin.<br></p><h3>3. <a href="https://codecanyon.net/item/creative-bs4-carousel-slider/22486644" rel="external" target="_blank" title="Link: https://codecanyon.net/item/creative-bs4-carousel-slider/22486644">Creative BS-4 Carousel Slider</a>
</h3><p>This slider is ideal for anyone who is already using Bootstrap 4 on their website. The framework already provides a lot of features and capabilities. It makes sense to take advantage of this fact and create a multi-functional slider.</p><figure class="post_image"><a href="https://codecanyon.net/item/creative-bs4-carousel-slider/22486644" target="_self"><img alt="Creative BS-4 Carousel Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/creative_bs_4_slider.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/creative_bs_4_slider.png"></a></figure><p>This is a fully responsive HTML5 slider and has great cross-browser compatibility.</p><p>You will be getting 33 different carousels with their own animations. This plugin can create carousels for everything from products to testimonials and portfolios to video carousels.</p><p>The <a href="https://preview.codecanyon.net/item/creative-bs4-carousel-slider/full_screen_preview/22486644" rel="external" target="_blank">live preview</a> of the plugin covers all these use cases, so do check it out.<br></p><h3>4. <a href="https://codecanyon.net/item/vertical-ultimate-3d-carousel/21667524" rel="external" target="_blank" title="Link: https://codecanyon.net/item/vertical-ultimate-3d-carousel/21667524">Vertical Ultimate 3D Carousel</a>
</h3><p>This ultimate vertical 3D carousel offers a unique solution when it comes to sliders and carousels. Instead of presenting the carousel content horizontally, the slides are laid out vertically. This makes it a better option for mobile devices because they have more space available vertically.</p><figure class="post_image"><a href="https://codecanyon.net/item/vertical-ultimate-3d-carousel/21667524" target="_self"><img alt="Virtual Ultimate 3D Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/vertical_ultimate_3d_carousel.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/vertical_ultimate_3d_carousel.png"></a></figure><p>The responsive HTML5 text and image slider is incredibly user friendly. It has implemented drag-and-swipe-based navigation for desktop and mobile devices. It also lets you navigate through all the slides using a mouse wheel or with the left and right keyboard keys.</p><p>It offers a bunch of parameters to control the alignment and separation of different slides in both horizontal and vertical directions. There are three different skins, each of which can be used with three unique layouts to create a slider.</p><p>You can see how all the skins and parameters look and work in this <a href="http://www.webdesign-flash.ro/p/vu3dcar/index.html" rel="external" target="_blank">live preview</a>.<br></p><h3>5. <a href="https://codecanyon.net/item/css3-cube-slider-jquery-3d-slider/2751468?s_rank=11" title="Link: https://codecanyon.net/item/css3-cube-slider-jquery-3d-slider/2751468?s_rank=11">CSS3 Cube Slider</a>
</h3><p>If you’re looking for a slider with a bit of a difference, check out the <a href="https://codecanyon.net/item/css3-cube-slider-jquery-3d-slider/2751468?s_rank=11">CSS3 Cube Slider</a>. This slider shows off your images in a gorgeous slider like the other sliders here, but it does so with one of six cool 3D cube transition effects. </p><figure class="post_image"><a href="https://codecanyon.net/item/css3-cube-slider-jquery-3d-slider/2751468" target="_self"><img alt="CSS3 Cube Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34476/image/cubes.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/769/posts/34476/image/cubes.jpg"></a></figure><p>The plugin works best in Chrome, Firefox, or Safari, but if the browser doesn’t support CSS3 then the slider falls back to the standard vertical or horizontal slide transition. The plugin is responsive and will adapt to any screen size for the user’s devices.</p><p>This is one of the best CSS sliders you will find!</p><h3>6. <a href="https://codecanyon.net/item/simple-image-slider-carousel/20486428" rel="external" target="_blank" title="Link: https://codecanyon.net/item/simple-image-slider-carousel/20486428">Simple Image Slider Carousel</a>
</h3><p>This simple image slider carousel actually comes with a lot of awesome layouts that you can use to showcase all your images. It's "simple" because it's easy to integrate into your own website.</p><figure class="post_image"><a href="https://codecanyon.net/item/simple-image-slider-carousel/20486428" target="_self"><img alt="Simple Image Slider Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/simple_image_slider_carousel.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/simple_image_slider_carousel.png"></a></figure><p>It comes with quite a few important features. The responsive image slider with text layout has multiple display types to fit with all kinds of website designs. You can add lazy loading to the slider so that it only loads images when the user is about to scroll to the slider in the visible area.</p><p>You can create the image playlist using either HTML markup or JSON data. There are a lot of other features such as navigation based on swipe gestures and keyboard arrow keys. You can read about all of them on the <a href="https://codecanyon.net/item/simple-image-slider-carousel/20486428" rel="external" target="_blank">product description</a> page.</p><h3>7. <a href="https://codecanyon.net/item/html5-canvas-carousel/2018225?s_rank=51" title="Link: https://codecanyon.net/item/html5-canvas-carousel/2018225?s_rank=51">HTML5 Canvas Carousel</a>
</h3><p>The <a href="https://codecanyon.net/item/html5-canvas-carousel/2018225?s_rank=51" title="Link: https://codecanyon.net/item/html5-canvas-carousel/2018225?s_rank=51">HTML5 Canvas Carousel</a> gives you another great option to display images on your website. This 3D photo gallery offers six different options for presenting your images. </p><p>Features include touch-screen navigation support for mobile, support for PNG, JPEG, and GIF image files, ability to set the carousel position, and the possibility of featuring multiple carousels on the same page of your website. </p><figure class="post_image"><a href="https://codecanyon.net/item/html5-canvas-carousel/2018225?s_rank=51" target="_self"><img alt="HTML5 Canvas Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/HTML5-Canvas-Carousel.jpg" class="loaded" title="Image: https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/HTML5-Canvas-Carousel.jpg"></a></figure><p>This responsive HTML5 carousel is highly customizable, and all options can be modified inside the XML file. It is optimized for both Android and iOS mobile devices, and the download file comes with a comprehensive help file explaining all configuration tags and installation.</p><h3>8. <a href="https://codecanyon.net/item/ultimate-media-gallery/20285056?s_rank=29" title="Link: https://codecanyon.net/item/ultimate-media-gallery/20285056?s_rank=29">Ultimate Media Gallery</a>
</h3><p>The <a href="https://codecanyon.net/item/ultimate-media-gallery/20285056?s_rank=29">Ultimate Media Gallery</a> is unique among the sliders in this list because it can display not just images but also video and audio files from a number of external content sources, including YouTube, Vimeo, Google Drive media, Podcast, and SoundCloud.  </p><figure class="post_image"><a href="https://codecanyon.net/item/ultimate-media-gallery/20285056?s_rank=29" target="_self"><img alt="Ultimate Media Gallery" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/Ultimate-Media-Gallery.jpg" class="loaded" title="Image: https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/Ultimate-Media-Gallery.jpg"></a></figure><p>This highly customizable gallery is fully responsive and mobile friendly. It takes full advantage of Font Awesome Library icons, and all demo examples are included in the download package for quick and easy setup.</p><h3>9. <a href="https://codecanyon.net/item/html5-canvas-cover-flow/2123748?s_rank=10" title="Link: https://codecanyon.net/item/html5-canvas-cover-flow/2123748?s_rank=10">HTML5 Canvas Cover Flow</a>
</h3><p>The <a href="https://codecanyon.net/item/html5-canvas-cover-flow/2123748?s_rank=10">HTML5 Canvas Cover Flow</a> slider is a 3D photo gallery that takes its inspiration from the Mac Finder viewer of the same name. The slider has tons of features and allows you to present your images in any way you want: horizontal, vertical, oblique, etc. Alternatively, you can make use of the predefined movements and styles if you prefer.</p><figure class="post_image"><a href="https://codecanyon.net/item/html5-canvas-cover-flow/2123748?s_rank=10" target="_self"><img alt="HTML5 Canvas Cover Flow" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/HTML5-Canvas-Cover-Flow.jpg" class="loaded" title="Image: https://cms-assets.tutsplus.com/uploads/users/1631/posts/29995/image/HTML5-Canvas-Cover-Flow.jpg"></a></figure><p>In addition, almost every aspect of the slider, including colors and graphic elements, can be customized to fit your site, and all the options can be easily modified from the configuration XML file, making maintaining the carousel much easier.</p><p>Optimized for mobile devices, it acts like a native app where you can touch, drag, and rotate the controls.</p><h3>10. <a href="https://codecanyon.net/item/shopping-html5-banners-with-interactive-slider-gwd/21533087" rel="external" target="_blank" title="Link: https://codecanyon.net/item/shopping-html5-banners-with-interactive-slider-gwd/21533087">Shopping HTML5 Banners With Interactive Slider</a>
</h3><p>These HTML5 banner sliders are meant to be used for creating HTML5 banner ad templates for AdWords, DoubleClick Studio, AdRoll and other ad platforms. This is the perfect plugin for people who want to create interactive ad banners to sell different products.</p><figure class="post_image"><a href="https://codecanyon.net/item/shopping-html5-banners-with-interactive-slider-gwd/21533087" target="_self"><img alt="HTML5 Banners with Interactive Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/html5_interactive_ad_slider.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34476/image/html5_interactive_ad_slider.png"></a></figure><p>It is created with and fully editable in <a href="https://webdesigner.withgoogle.com/" rel="external" target="_blank" title="Link: https://webdesigner.withgoogle.com/">Google Web Designer</a>. You can also change the colors and background with just a few clicks.</p><p>You can create ad banners in seven popular sizes: 160×600, 250×250, 336×280, 300×250, 728×90, 200×200, and 300×600. See them all in action in the <a href="https://y-n.studio/portfolio/shopping-accessories-interactive-item-slider/" rel="external" target="_blank" title="Link: https://y-n.studio/portfolio/shopping-accessories-interactive-item-slider/">live preview</a> of the plugin.</p><p>The detailed documentation included with the plugin will provide a step-by-step guide to editing the template and creating your own interactive banner ads with sliders.</p><h2>Free HTML5 Sliders for Images and Text</h2><p>Some of the best HTML5 and CSS sliders are found on CodeCanyon. However, if you just want something simple, you can try out some of the free options first. Here are some of the most popular free HTML5 sliders for images and text.</p><h3><a href="https://github.com/stevenwanderski/bxslider-4" target="_self">bxSlider 4</a></h3><p>This is a fully loaded, responsive slider built with jQuery. The slides can contain images, video, or other HTML content. You can get all the <a href="https://github.com/stevenwanderski/bxslider-4" target="_self" title="Link: https://github.com/stevenwanderski/bxslider-4">bxSlider 4</a> files from its GitHub page.</p><h3><a href="https://github.com/nolimits4web/swiper" target="_self">Swiper</a></h3><p><a href="https://github.com/nolimits4web/swiper" target="_self">Swiper</a> is a free and modern responsive HTML5 slider which is designed as a mobile-based touch slider. It is usable on desktops as well. However, it does not implement keyboard- and mouse-based navigation.</p><h3><a href="https://github.com/kenwheeler/slick" target="_self">Slick</a></h3><p><a href="https://github.com/kenwheeler/slick" target="_self" title="Link: https://github.com/kenwheeler/slick">Slick</a> calls itself "the last carousel you'll ever need." It relies on jQuery and works in browsers as old as IE8. There are plenty of attributes to precisely control how the carousel behaves.</p><h2>Tips for Using Sliders on Your Website</h2><p>Here are a few tips to keep in mind to help you get the most value out of any slider carousels that you use on your website.</p><h3>1. Use Sliders to Showcase Important Products and Services</h3><p>Sliders and carousels will take up a large portion of the user's screen when they visit your website. This makes them ideal for pitching your best product or service. Also, make sure that you avoid clutter. Each slide in the carousel should focus on just one aspect of the product and do it well.</p><h3>2. Include Call to Action Buttons</h3><p>It is also important to include a direct call to action button somewhere on the carousel itself. If a visitor likes one of your products, they should not have to go somewhere else to make the purchase.<br></p><h2>Other HTML5 Scripts and Templates<br>
</h2><p>These ten best responsive HTML5 sliders are<b> </b>by no means the only ones available at <a href="https://codecanyon.net/category/html5?page=1&amp;sort=sales" target="_self" title="Link: https://codecanyon.net/category/html5?page=1&amp;sort=sales">CodeCanyon</a>. You can find HTML5 widgets, scripts, and templates of every kind!</p><figure class="post_image"><a href="https://codecanyon.net/category/html5?sort=sales" target="_self"><img alt="HTML5 templates at CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34476/image/codecanyon%20html5.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/769/posts/34476/image/codecanyon%20html5.jpg"></a></figure><p></p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/20-best-html5-and-javascript-game-engines-and-templates--cms-26070"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26070/preview_image/html5%20game%20templates%20image.png"><div class="roundup-block__primary-category topic-code">HTML5</div>
<div class="roundup-block__content-title">19 Best HTML5 and JavaScript Game Engines and Templates</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/15-best-html5-audio-players--cms-28796"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28796/preview_image/html5.jpg"><div class="roundup-block__primary-category topic-code">HTML5</div>
<div class="roundup-block__content-title">19 Best HTML5 Audio Players</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/20-best-html5-game-templates-of-2017--cms-28892"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/28892/preview_image/html5.png"><div class="roundup-block__primary-category topic-code">HTML5</div>
<div class="roundup-block__content-title">20 Best HTML5 Game Templates of 2020 With Source Code</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-use-easy-video-player-for-javascript--cms-33898"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/33898/preview_image/tutsplus_easy_video_player.jpg"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">How to Use Easy Video Player for JavaScript</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-05-14T14:50:57+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[16 Best Tab and Accordion Widget Plugins for WordPress]]></title>
      <link>//shineyrock.com/blog/read/16-best-tab-and-accordion-widget-plugins-for-wordpress</link>
      <guid>https://shineyrock.com/blog/read/16-best-tab-and-accordion-widget-plugins-for-wordpress#When:15:35:19Z</guid>
      <description><![CDATA[<p>Your website's content should be organized and beautiful. By adding a tab or accordion widget plugin to your WordPress website, you will be able to display your website's content in an elegant way. </p><p>An interactive accordion and tab plugin can tidy up the design and readability of your webpages. <br></p><figure class="post_image"><a href="https://codecanyon.net/search/accordion" target="_self"><img alt="WooCommerce Category Accordion" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/acc.jpg"></a><figcaption>One of the many fully customizable WordPress tab &amp; accordion plugins and widgets on CodeCanyon</figcaption></figure><p>Accordions and tabs are great ways to communicate text-heavy information in a stylish and condensed way. Keeping your website clutter-free and interactive should be the main priority for your website, and accordions and tabs help you accomplish this. <br></p><p>At <a href="https://codecanyon.net/search/accordion" target="_self">CodeCanyon</a>, you will be able to choose from a library of premium plugins available and find a tab and accordion plugin and widget that will fit your website's theme and allow you to display your website's information without crowding your page's designs. </p><h2>The Best WordPress Tab and Accordion Plugins on CodeCanyon<br>
</h2><p>Discover CodeCanyon's extensive library of the best tab and accordion WordPress widgets and plugins ever created. With a cheap one-time payment, you can purchase these high-quality WordPress widgets and plugins and draw in more traffic to your website. <br></p><p>Here are a few of the best-selling tab and accordion WordPress widgets available on CodeCanyon for 2020.</p><figure class="post_image"><a href="https://codecanyon.net/search/accordion?sort=sales#content" target="_self"><img alt="Best-Selling WordPress Tab  Accordion Widgets  Plugins" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/accord.jpg"></a><figcaption>Best-selling tab and accordion widgets and plugins available on CodeCanyon </figcaption></figure><p>These powerful tab and accordion plugins allow you to display your website's text and media in a systematic order that fits your particular website. These widgets and plugins come with plenty of features that can enhance your website, including:<br></p><ul>
<li>pagination</li>
<li>animated layers</li>
<li>customizable columns and rows</li>
<li>touch-enabled mobile functionality </li>
<li>lightboxes</li>
</ul><p>Head on over to <a href="https://codecanyon.net/search/accordion?sort=sales#content" target="_self">CodeCanyon</a> and choose from the premium tab and accordion plugins available now! </p><h2>11 Best Tab and Accordion WordPress Widgets for 2020</h2><p>Here are 11 of the top-rated WordPress tab and accordion widgets and plugins that are available for you to download on CodeCanyon:</p><h3>1. <a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a>
</h3><p>The Accordion Slider plugin combines two great functions in one handy plugin. First it functions as an accordion, and secondly it functions as a slider.</p><figure class="post_image"><a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1" target="_self"><img alt="Accordion Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Accordion-Slider-Responsive-WordPress-Plugin.jpg"></a></figure><p>Best features:</p><ul>
<li>add as many panels as you want, without worrying about screen space</li>
<li>touch-enabled to work well with mobile screens  </li>
<li>loads images and content from posts, galleries, and Flickr</li>
<li>accordions are automatically cached to improve the load time</li>
<li>can be placed anywhere: in posts/pages, template PHP code, or widgets</li>
</ul><p><a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a> is a great two-in-one plugin that will appeal to those looking for a great way to present images or text.<br></p><h3>2. <a href="https://codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/7788530?s_rank=10">Grid Accordion—Responsive WordPress Plugin</a>
</h3><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/32853/image/grid_accordion.jpg" class="loaded"></figure><p>One of the best-looking accordions out there, Grid Accordion adds a fresh feel to your site by offering a feature not found in other plugins: an accordion that works in two directions. While most plugins let you open and close tabs or similar UI elements either horizontally or vertically, with this plugin, you can do both. Not only does it handle text content well within its accordion grid, but you can even fill your content areas with images and other media for a more stunning effect.</p><p>Make sure to check out <a href="https://preview.codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/full_screen_preview/7788530">the demo for Grid Accordion here</a>.</p><p>This plugin also comes with a host of other features, such as:</p><ul>
<li>a fully responsive and touch-enabled design</li>
<li>support for dynamic content from posts and galleries</li>
<li>available hooks for actions and filters</li>
<li>JavaScript API endpoints for maximum customization</li>
</ul><h3>3. <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ With Category</a>
</h3><p>The WP Responsive FAQ With Category plugin is specifically designed for users who have or want to add a Frequently Asked Questions area to their site and don’t want their visitors to have to scroll through an endless stream of text to get to the questions and answers that are relevant to them.</p><figure class="post_image"><a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5" target="_self"><img alt="WP Responsive FAQ With Category" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/WP-Responsive-FAQ-with-Category.jpg"></a></figure><p>Best features:</p><ul>
<li>FAQs can be arranged by category</li>
<li>15 customizable different designs to choose from</li>
<li>compatible with Visual Composer page builder and WooCommerce</li>
<li>two types of FAQ toggle icons: arrow or plus sign</li>
</ul><p>There’s no question that <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a> is the answer to all your FAQ needs.</p><h3>4. <a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a>
</h3><p>The WooCommerce Category Accordion is designed specifically for WooCommerce users. It can be used as a widget or shortcode to list product categories and subcategories.</p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4" target="_self"><img alt="WooCommerce Category Accordion" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/WooCommerce-Category-Accordion.jpg"></a></figure><p>Best features:</p><ul>
<li>supports unlimited categories and subcategories</li>
<li>14 Font Awesome icons included</li>
<li>ability to highlight current category option</li>
<li>sort by ascending or descending order</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a> is ideal for users who want to organize their products or services into categories and subcategories to make it easier for customers to navigate their site.</p><h3>5. <a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion</a>
</h3><p>Responsive Searchable 3 Level Accordion is a simple plugin that can be used anywhere on your WordPress site. It will appeal to users who are looking to arrange content in accordion style within a post, sidebar, footer, etc.</p><figure class="post_image"><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10" target="_self"><img alt="Responsive Searchable 3 Level Accordion" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Responsive-Searchable-3-Level-Accordion-For-Wordpress.jpg"></a></figure><p>Best features:</p><ul>
<li>can be used as a widget or shortcode</li>
<li>three nesting levels available</li>
<li>five ready-made styling options</li>
<li>allows users to type in searched phrase</li>
</ul><p><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion For WordPress</a> is a low-fuss plugin, and its standout features like three-level support and searchable content really set it apart.<br></p><h3>6. <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9">Accordion FAQ WordPress Plugin</a>
</h3><p>FAQ pages are an important part of almost any website, and with this plugin, you can fit a mountain of text behind a sleek and easily digestible display. This accordion plugin focuses on doing one thing, creating FAQ-style content easily, and it does it well.</p><figure class="post_image"><a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9" target="_self"><img alt="Accordion FAQ WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/accordion_faq-plugin.jpg"></a></figure><p>Here’s what you can expect to get with this plugin:</p><ul>
<li>ability to quickly add multiple FAQ accordions throughout your site</li>
<li>easy drag-and-drop interface for reordering</li>
<li>color, icon, and font customization</li>
<li>built-in generator for creating shortcodes</li>
</ul><p>If you’re looking to add an FAQ section to your existing design, then the Accordion FAQ WordPress Plugin has you covered.</p><h3>7. <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a>
</h3><p>WordPress Tabs and Accordions DZS is another plugin that gives users access to both tab and accordion functions.</p><figure class="post_image"><a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11" target="_self"><img alt="WordPress Tabs and Accordions" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/WordPress-Tabs-and-Accordions.jpg"></a></figure><p>Best features:</p><ul>
<li>full skins to fit every brand</li>
<li>WYSIWYG editor</li>
<li>unlimited color options for customization</li>
<li>iPhone, iPad, and Android optimized</li>
<li>and more</li>
</ul><p>So if StackTabs doesn’t appeal, <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a> is another great two-for-one option.</p><h3>8. <a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self">Side Tabs—Layered Popups Add-on</a>
</h3><p>A little different than most of the plugins on this list, Side Tabs delivers the features you’d expect from a tab plugin, but instead of existing within your site’s content, they live at the edge of your screen. This unique presentation creates a number of unusual uses.</p><figure class="post_image"><a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19" target="_self"><img alt="Side TabsLayered Popups Add-on" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Side%20Tabs.jpg"></a></figure><p>One of the most interesting ways you can use Side Tabs is to present a constant access point to content throughout an entire page (or several pages). Besides that, it also makes a great tool for offering Calls to Action and similar content without being too intrusive.</p><p>With a ton of customization and animation options available out of the box, this plugin works brilliantly for anyone looking to add a fresh way of presenting information to their site.</p><h3>9. <a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>
</h3><p>If you have a WooCommerce site, the WooCommerce Tab Pro plugin will allow you to create and manage 11 different types of tabs to display your products.</p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4" target="_self"><img alt="WooCommerce Tabs Pro Extra Tabs for Product Page" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Woocommerce-Tabs-Pro.jpg"></a></figure><p>Best features:</p><ul>
<li>ability to add unlimited tabs to a single product page</li>
<li>WYSIWYG editor for editing custom content</li>
<li>ability to enable or disable tabs</li>
<li>ability to create a global tab that can be used with all products</li>
</ul><p>When you have an eCommerce site, making improvements to your layout can really boost sales. With <a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>, the tills will soon be ringing.</p><h3>10. <a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs for Visual Composer</a>
</h3><p>Elegant Tabs for Visual Composer is an add-on for the WPBakery WordPress plugin (formerly Visual Composer). It lets you add any shortcode to multiple tabs and offers loads of customization like different colors, icons, and backgrounds for different sections or tabs.</p><figure class="post_image"><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26" target="_self"><img alt="Elegant Tabs for Visual Composer" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Elegant-Tabs-for-Visual-Composer.jpg"></a></figure><p>Best features:</p><ul>
<li>vertical tabs</li>
<li>drag and drop any WPBakery elements inside the tab content</li>
<li>supports deep linking</li>
<li>ten different styles of tabs and unlimited variations</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs</a> is also available for <a href="https://codecanyon.net/item/elegant-tabs-for-fusion-builder/18795917?s_rank=1">Fusion Builder</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-woocommerce/9846605?s_rank=2">WooCommerce</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-cornerstone/16825384?s_rank=5">Cornerstone</a>, and <a href="https://codecanyon.net/item/elegant-tabs-for-beaver-builder/17965885?s_rank=7">Beaver Builder</a>.</p><h3>11. <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a>
</h3><p>Like the Social Network Tabs for WordPress, the PullOut Widgets is a different take on tabs. It is specifically designed to turn any widget on your site into a pullout tab.</p><figure class="post_image"><a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7" target="_self"><img alt="PullOut Widgets for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28677/image/Pullout.jpg"></a></figure><p>Best features:</p><ul>
<li>289 icons for pullout tabs</li>
<li>32 sliding animation effects</li>
<li>unlimited pullout widget positioning on the top, right, bottom, or left side</li>
<li>unlimited widget colors</li>
</ul><p>The most successful websites are interactive, and <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a> gives your visitors plenty of chances to engage with your content.</p><h2>5 Free Tab and Accordion WordPress Widgets and Plugins for Download in 2020</h2><p>The best features and most beautiful interfaces are found in the premium plugins from CodeCanyon. But, if you're on a budget or just want something simple, check out these free tab and accordion plugins for WordPress.</p><h3>1. <a href="https://wordpress.org/plugins/arconix-shortcodes/" target="_self">Arconix Shortcodes</a>
</h3><figure class="post_image"><a href="https://wordpress.org/plugins/arconix-shortcodes/" target="_self"><img alt="Arconix Shortcodes" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/screenshot-2.png"></a></figure><p>Arconix Shortcodes is a very versatile plugin and is a must-have if you cannot afford any of the premium plugins. With this plugin, you can add not only accordions but styled boxes, buttons, tabs, unordered lists, columns, and much more.</p><h3>2. <a href="https://wordpress.org/plugins/easy-accordion-free/" target="_self">Easy Accordion</a><br>
</h3><p>Easy Accordion is a responsive drag-and-drop accordion builder that will help you to display multiple accordions on your WordPress website. No coding is necessary to add the accordions to your website as everything is added through shortcodes.</p><h3>3. <a href="https://wordpress.org/plugins/accordions/" target="_self">Accordion</a>
</h3><figure class="post_image"><img alt="Accordion" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/end.png"></figure><p>This Accordion plugin can help you create different sections of your website, including but not limited to FAQs, a knowledge base, and a question &amp; answer section. You can change colors, font size, and icons for each accordion.<br></p><h3>4. <a href="https://wordpress.org/plugins/squelch-tabs-and-accordions-shortcodes/" target="_self">Squelch Tabs and Accordions Shortcodes</a>
</h3><p>With the use of shortcodes, you can add horizontal accordions, vertical accordions, and tabs. This free plugin will help you save space on your webpages, make your website look more professional, and add an interactive component to your website.</p><h3>5. <a href="https://wordpress.org/plugins/shortcodes-ultimate/" target="_self">Shortcodes Ultimate</a>
</h3><p>Shortcodes Ultimate allows you to add many tools to your website. You can easily create tabs, buttons, boxes, sliders and carousels, and responsive videos. The plugin comes with over 50 shortcodes for you to implement. </p><h2>How to Add an FAQ Accordion to Your Website</h2><p>In this example, we are going to create an FAQ section for our online store.<strong> </strong><br></p><p>First, we need to create a category for our FAQ accordion so the plugin knows what content to add to each specific accordion. Once you have installed the <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363" target="_self">Accordion FAQ WordPress plugin</a>, head on over to <strong>WP Dashboard &gt; FAQ &gt; Categories. </strong>In the name field, we will type "<strong>Online Store</strong>" and click the <strong>Add New Category</strong> button. </p><p>Next, we will click on <strong>WP Dashboard &gt; FAQ &gt; Add New. </strong>We will add our three FAQ entries this way. We will include the question in the title and the answer in the text editor. </p><figure class="post_image"><img alt="Creating FAQ Entry" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/dunnn.png"></figure><p>For each of our entries, we will make sure to click the checkbox next to the category, <strong>Online Store</strong>, that we created to make sure we group the entries together. </p><p>Once we have added our three FAQ entries for our online store, it is time to add the accordion widget to a page. On an existing or new page or post, click on the <strong>Add Shortcode</strong> button on the top of the text editor. Choose <strong>Insert FAQs</strong> from the <strong>Select a Shortcode</strong> drop-down menu. From here we will be given a basic group of settings for us to change. We will choose the <strong>Online Store</strong> category from the <strong>Faq Category </strong>option and change the <strong>Icon Background Color</strong> to blue. </p><figure class="post_image"><img alt="Changing Accordion Settings" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/850.png"></figure><p>Click the <strong>Insert Shortcode</strong> button, and the shortcode will be added to the text editor. The FAQ accordion will now be displayed on your webpage for all your users to see!</p><figure class="post_image"><img alt="Online Store Accordion FAQ" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34415/image/Screen%20Shot%202019-12-21%20at%2019.58.45.png"></figure><h2>Install a Tab or Accordion WordPress Widget Now! </h2><p>By adding a <a href="https://codecanyon.net/search/accordion?sort=sales#content" target="_self">premium tab or accordion plugin</a> to your website, you will be able to simplify your web page's design and display your text and media in an easy-to-understand way. </p><p>These handy widgets and plugins allow you to integrate interactive displays for your website's content that can be styled to fit your website's theme. </p><p>In addition to all the high-quality tab and accordion widgets available, there are also thousands of other <a href="https://codecanyon.net/category/wordpress" target="_self">high-quality WordPress plugins</a> on CodeCanyon that can help enhance your website. Take look through this massive collection of plugins and you will find all types of plugins, including gallery, newsletter, eCommerce, and marketing plugins.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-05-13T15:35:19+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[18 Best WordPress Membership Plugins and 5 Free Plugins]]></title>
      <link>//shineyrock.com/blog/read/18-best-wordpress-membership-plugins-and-5-free-plugins</link>
      <guid>https://shineyrock.com/blog/read/18-best-wordpress-membership-plugins-and-5-free-plugins#When:11:53:59Z</guid>
      <description><![CDATA[<p>Do you want to start earning money from your WordPress website?<br></p><p>There are lots of ways that you can turn your site into an additional revenue stream, but many of these options revolve around one-off payments. You could<em> </em>build an online store, <a href="https://code.tutsplus.com/tutorials/adning-advertising-create-adverts-for-your-wordpress-site--cms-33657?_ga=2.244278661.1624392625.1575963500-1280144257.1574810364" target="_self">sell advertising space</a>, or <a href="https://code.tutsplus.com/tutorials/how-to-build-an-amazon-affiliate-website-with-a-woocommerce-affiliate-plugin--cms-33154?_ga=2.244278661.1624392625.1575963500-1280144257.1574810364" target="_self">fill your website with affiliate links</a>—or you could sell membership subscriptions that'll guarantee you a steady income for the next few weeks, months, or potentially even years.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/membership" target="_self"><img alt="You can find a wide range of premium membership plugins over at CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/369/posts/34344/image/20-Best-Membership-Plugins-for-%20WordPress.jpg"></a><figcaption>You can find a wide range of premium membership plugins, over at CodeCanyon.</figcaption></figure><p>In this article, I'll be sharing my favourite free and premium plugins that you can use to transform your WordPress website into a thriving online community. </p><figure class="post_image"><a href="https://codecanyon.net/item/armember-complete-wordpress-membership-system/17785056" target="_self"><img alt="ARMember" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/member.png"></a><figcaption>ARMember is one of the best-selling membership plugins available on CodeCanyon.</figcaption></figure><p>Integrating a membership plugin into your WordPress website gives you the power to lock certain sections of your website and charge recurring payments for access to these members-only sections. Whether you are running a fitness website or looking to offer videos for your tutoring business, a premium WordPress membership plugin will help you grow and scale your business.</p><h2>The Best WordPress Membership Plugins on CodeCanyon<br>
</h2><p>Discover over 7,000 of the best WordPress plugins ever created on Envato Market's CodeCanyon. With a cheap one-time payment, you can purchase one of these high-quality WordPress plugins. <br></p><p>Here are a few of the best membership WordPress plugins available on CodeCanyon for 2020.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/membership" target="_self"><img alt="Best-Selling WordPress Membership Plugins" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/123ff.jpg"></a></figure><p>Without these WordPress membership plugins, you will have to hire a web developer to implement this functionality. This can be very expensive and time-consuming. By purchasing the premium membership plugins available on CodeCanyon, you will be able to create a membership website in no time. </p><p>Here are some of the features that you can expect from the WordPress membership plugins:<br></p><ul>
<li>WooCommerce integration</li>
<li>paid and free membership levels</li>
<li>periodic billing</li>
<li>email opt-ins</li>
<li>multiple payment gateways</li>
</ul><p>Now let's take a look at some of the best-selling membership plugins on CodeCanyon. <br></p><h2>Top 18 WordPress Membership Plugins (From CodeCanyon for 2020)</h2><h3>1. <a href="https://codecanyon.net/item/ultimate-membership-pro-wordpress-plugin/12159253" rel="external" target="_blank">Ultimate Membership Pro WordPress Plugin</a>
</h3><p>Ultimate Membership Pro WordPress Plugin doesn't get its name solely for marketing purposes.</p><p>It really is the <em>ultimate</em>.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/ultimate-membership-pro-wordpress-plugin/12159253" target="_self"><img alt="Ultimate Membership Pro WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/01.jpg" class="loaded"></a></figure><p>This WordPress membership plugin offers a wide variety of options, making it very agile. Some of the options include:</p><ul>
<li>multiple login, register, and locker templates</li>
<li>multiple payment options</li>
<li>conditional logic</li>
<li>social login</li>
<li>and much, much more<br>
</li>
</ul><p>You can also create multiple levels, drip content, restrict pages, create custom account pages, and the list goes on.<br></p><p>No matter what kind of membership site you're trying to build, <a href="https://codecanyon.net/item/ultimate-membership-pro-wordpress-plugin/12159253" rel="external" target="_blank">Ultimate Membership Pro WordPress Plugin</a> should deliver without a problem.</p><p>No wonder it's the #1 selling membership plugin!<br></p><h3>2. <a href="https://codecanyon.net/item/marketplace-seller-membership-plugin-for-woocommerce/22701390" target="_self">Multi-Vendor Marketplace Membership for WooCommerce</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/marketplace-seller-membership-plugin-for-woocommerce/22701390" target="_self"><img alt="Multi-Vendor Marketplace Membership for WooCommerce" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/we.jpg"></a></figure><p>Marketplace Seller Membership Plugin for WooCommerce allows you to create memberships on the basis of time and or products. You will need to have the <a href="https://codecanyon.net/item/wordpress-woocommerce-marketplace-plugin/19214408" target="_self">WordPress WooCommerce Multi Vendor Marketplace</a> in order for this plugin to work. Adding this membership plugin to your already existing marketplace will help you bring in recurring revenue, so don't miss out on this plugin!</p><h3>3. <a href="https://codecanyon.net/item/sumo-memberships-woocommerce-membership-system/16642362" target="_self">SUMO Memberships</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/sumo-memberships-woocommerce-membership-system/16642362" target="_self"><img alt="SUMO Memberships" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/sumo.jpg"></a></figure><p>SUMO Memberships is a complete WooCommerce membership system. It allows you to sell memberships from your existing WooCommerce store and give your members access to pages, posts, content blocks, and certain products. </p><p>Here are a few important features of this plugin:</p><ul>
<li>content and product restriction</li>
<li>transferrable memberships</li>
<li>multiple membership plans</li>
<li>free trial of membership</li>
</ul><h3>4. <a href="https://codecanyon.net/item/ultimate-learning-pro-wordpress-plugin/21772657" target="_self">Ultimate Learning Pro</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/ultimate-learning-pro-wordpress-plugin/21772657" target="_self"><img alt="Ultimate Learning Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/lp.jpg"></a></figure><p>Ultimate Learning Pro is a membership plugin that was specifically designed for businesses providing courses. You can easily sell courses and have instructors manage your students with this powerful plugin. </p><p>Here are some of the plugin's top features:</p><ul>
<li>intuitive course builder</li>
<li>control enrollment</li>
<li>Stripe, WooCommerce, and PayPal payments</li>
<li>student grade books</li>
</ul><h3>5. <a href="https://codecanyon.net/item/privatecontent-wordpress-bundle-pack/20352295" target="_self">PrivateContent</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/privatecontent-wordpress-bundle-pack/20352295" target="_self"><img alt="PrivateContent" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/pc.jpg"></a></figure><p>PrivateContent has one of the best restriction engines on the market. In addition to the standard account locking that membership plugins provide, there are many other powerful features that will help improve your membership website. Here are a few of the features that differentiate this plugin from others:</p><ul>
<li>multilanguage support</li>
<li>Google Analytics integration</li>
<li>Mailchimp integration</li>
<li>discount coupon support</li>
</ul><h3>6. <a href="https://codecanyon.net/item/userpro-user-profiles-with-social-login/5958681" rel="external" target="_blank">UserPro—User Profiles With Social Login</a><br>
</h3><p>Not all WordPress membership plugins are about making revenue on your content.</p><p>UserPro—User Profiles with Social Login does include content restriction, but focuses on the community aspects of a membership website.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/userpro-user-profiles-with-social-login/5958681" target="_self"><img alt="UserPro - User Profiles with Social Login" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/07.jpg" class="loaded"></a></figure><p>Features include:</p><ul>
<li>unlimited membership custom fields</li>
<li>set up badges and achievements</li>
<li>manually approve new users</li>
<li>well-designed user profiles</li>
<li>and more!</li>
</ul><p>There's also some great integration with WooCommerce, BuddyPress, Mailchimp, and others.</p><p>And if <a href="https://codecanyon.net/item/userpro-user-profiles-with-social-login/5958681" rel="external" target="_blank">UserPro—User Profiles with Social Login</a> doesn't have enough features for you, there are over a dozen different User Pro add-ons that are worth a look.<br></p><h3>7. <a href="https://codecanyon.net/item/user-profiles-made-easy-wordpress-plugin/4109874" rel="external" target="_blank">User Profiles Made Easy—WordPress Plugin</a>
</h3><p>The User Profiles Made Easy WordPress plugin is an excellent plugin for membership directories and user profiles.</p><figure class="post_image"><a href="https://codecanyon.net/item/user-profiles-made-easy-wordpress-plugin/4109874" target="_self"><img alt="User Profiles Made Easy - WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/08.jpg" class="loaded"></a></figure><p>Features include:</p><ul>
<li>full-featured membership directory</li>
<li>private content and custom fields</li>
<li>front-end login and registration</li>
<li>well-designed user profiles</li>
<li>and more!</li>
</ul><p>There are also content restriction options, but the membership user profile management is where this really shines. It also includes the ability to search users based on built-in custom field types or custom search filters.<br></p><p><a href="https://codecanyon.net/item/user-profiles-made-easy-wordpress-plugin/4109874" rel="external" target="_blank">User Profiles Made Easy</a> is one of the best WordPress user profile membership plugins you'll find.<br></p><h3>
<span class="sectionnum">8.</span> <a href="https://codecanyon.net/item/youzer-new-wordpress-user-profiles-era/19716647" target="_self">Youzer—BuddyPress User Profiles</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/youzer-new-wordpress-user-profiles-era/19716647" target="_self"><img alt="Youzer - Buddypress User Profile" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/yozer.jpg"></a></figure><p>Youzer is one of the best WordPress user profiles and membership plugins on the market. It has all the features you need and more to build a community where users can express themselves and interact with each other. Here are just a few of the many features that this plugin offers:</p><ul>
<li>public and private profiles</li>
<li>14 header styles</li>
<li>fully customizable membership and profiles</li>
<li>custom tabs</li>
<li>custom widgets</li>
</ul><p>See for yourself just how feature-rich this plugin is by viewing the <a href="https://preview.codecanyon.net/item/youzer-new-wordpress-user-profiles-era/full_screen_preview/19716647?_ga=2.121622923.227469188.1578855934-1533195312.1578794662" target="_self">live preview.</a></p><h3>9. <a href="https://codecanyon.net/item/armember-complete-wordpress-membership-system/17785056" target="_self">ARMember</a> </h3><figure class="post_image"><a href="https://codecanyon.net/item/armember-complete-wordpress-membership-system/17785056" target="_self"><img alt="ARMember " data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/ar.jpg"></a></figure><p>ARMember is a one-stop solution to sell WordPress subscriptions without having to type in a single line of code. This plugin has many advanced features such as conditional redirection, IP-based restrictions, and URL-based locking. The level of control that you have over the membership is unparalleled. This powerhouse plugin is a must-have if you are serious about creating a membership website.  </p><h3>10. <a href="https://codecanyon.net/item/good-lms-learning-management-system-wp-plugin/9033850" rel="external" target="_blank">Good LMS—Learning Management System WordPress Plugin</a>
</h3><p>Unlike some of the previous WordPress membership plugins, Good LMS focuses on online learning.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/good-lms-learning-management-system-wp-plugin/9033850" target="_self"><img alt="Good LMS - Learning Management System WP Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/11.jpg" class="loaded"></a></figure><p>With Good LMS you can:</p><ul>
<li>create online and onsite courses and quizzes<br>
</li>
<li>set up commission rates for instructors</li>
<li>sell learning courses via PayPal</li>
<li>course ratings<br>
</li>
<li>and more!<br>
</li>
</ul><p><a href="https://codecanyon.net/item/good-lms-learning-management-system-wp-plugin/9033850" rel="external" target="_blank">Good LMS</a> includes everything you need to develop an online education system, from payment and registration to quizzes and certificates.<br></p><h3>11. <a href="https://codecanyon.net/item/member-cards-gallery-extention-ultimate-member-community-plugin/19621795" target="_self">Ultimate Member Community Plugin</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/member-cards-gallery-extention-ultimate-member-community-plugin/19621795" target="_self"><img alt="Ultimate Member Community Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/pro.jpg"></a></figure><p>UM Profiler enables you to create new designs for your member cards. The plugin comes with nine template designs to ensure that you find a design that works with the theme of your website. What's even better about this plugin is that it's free if you own the Ultimate Member plugin. The UM Profiler is sure to create a stunning-looking profile system for your membership website. View the <a href="https://preview.codecanyon.net/item/member-cards-gallery-extention-ultimate-member-community-plugin/full_screen_preview/19621795?_ga=2.144481461.1436351795.1578854145-1533195312.1578794662" target="_self">live preview</a> of this plugin to see if it's right for you! </p><h3>12. <a href="https://codecanyon.net/item/-wpgym-wordpress-gym-management-system/13352964" rel="external" target="_blank">WPGYM—Wordpress Gym Management System</a>
</h3><p>Developed by the same author as the previous plugin, WPGYM works in the same fashion, but with a focus on gym memberships.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/-wpgym-wordpress-gym-management-system/13352964" target="_self"><img alt="WPGYM - Wordpress Gym Management System" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/13.jpg" class="loaded"></a></figure><p>Features include:</p><ul>
<li>workout, activity, nutrition, and other modules for members<br>
</li>
<li>full-featured dashboard<br>
</li>
<li>membership payment</li>
<li>member profiles</li>
<li>and much, much more</li>
</ul><p><a href="https://codecanyon.net/item/-wpgym-wordpress-gym-management-system/13352964" rel="external" target="_blank">WPGYM—Wordpress Gym Management System</a> is nothing short of impressive.<br></p><h3>13. <a href="https://codecanyon.net/item/woocommerce-membership/8746370" target="_self">WooCommerce Membership</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-membership/8746370" target="_self"><img alt="WooCommerce Membership" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/or.jpg"></a></figure><p>This simple but effective membership plugin gives you a quick and affordable way to convert your website into a membership site. The admin dashboard allows you to add as many plans as you see fit for your business, and a dedicated support team will help you with any questions or concerns that you have about the plugin. </p><p>Here are the features you can expect with this plugin:</p><ul>
<li>create unlimited online membership plans</li>
<li>add or remove members manually<br>
</li>
<li>convert any product to a membership product<br>
</li>
<li>restrict access to any post or page, including custom WordPress post types</li>
</ul><h3>14. <a href="https://codecanyon.net/item/custom-login-access-wordpresss-plugin/7874646" rel="external" target="_blank">Custom Login and Access WordPress Plugin</a>
</h3><p>Easily restrict content, but add some style with the Custom Login and Access WordPress Plugin. It's simple and easy to use.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/custom-login-access-wordpresss-plugin/7874646" target="_self"><img alt="Custom Login  Access WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/15.jpg" class="loaded"></a></figure><p>Block users from pages, posts, post types, categories, and taxonomies. Redirect users when they log in and log out. You can also:</p><ul>
<li>add login, registration, and forgotten forms to a page</li>
<li>style the default WordPress login page</li>
<li>allow users to set their own password</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/custom-login-access-wordpresss-plugin/7874646" rel="external" target="_blank">Custom Login and Access WordPress Plugin</a> is a great way to simply restrict content to registered users, and it also includes helpful redirects and design.<br></p><h3>15. <a href="https://codecanyon.net/item/modal-login-register-forgotten-wordpress-plugin/5433514" rel="external" target="_blank">Modal Login Register Forgotten WordPress Plugin</a>
</h3><p>Modal Login Register Forgotten WordPress Plugin is much like the previous offering, but comes in modal form.</p><figure class="post_image"><a href="https://codecanyon.net/item/modal-login-register-forgotten-wordpress-plugin/5433514" target="_self"><img alt="Modal Login Register Forgotten WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/16.jpg" class="loaded"></a></figure><p>Features include:</p><ul>
<li>custom register email<br>
</li>
<li>unlimited color styles<br>
</li>
<li>login widget</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/modal-login-register-forgotten-wordpress-plugin/5433514" rel="external" target="_blank">Modal Login Register Forgotten WordPress Plugin</a> is an excellent way to extend any WordPress membership plugin, helping users recover their forgotten logins in style.<br></p><h3>16. <a href="https://codecanyon.net/item/wordpress-expire-passwords/11392369" rel="external" target="_blank">WordPress Expire Passwords</a><br>
</h3><p>Membership websites can often be subject to security risks, as users neglect to update their passwords.</p><p>That's where WordPress Expire Passwords can be a lifesaver.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/wordpress-expire-passwords/11392369" target="_self"><img alt="WordPress Expire Passwords" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26660/image/18.jpg" class="loaded"></a></figure><p>You can easily:</p><ul>
<li>select password expirations based on user roles<br>
</li>
<li>option to prevent users from using the same password</li>
<li>select how long before a password expires</li>
<li>view last password reset</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/wordpress-expire-passwords/11392369" rel="external" target="_blank">WordPress Expire Passwords</a> is a great plugin not just for membership sites, but also for any WordPress site with multiple users.<br></p><h3>17. <a href="https://codecanyon.net/item/wp-private-content-pro/19888627" target="_self">WP Private Content Pro</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/wp-private-content-pro/19888627" target="_self"><img alt="WP Private Content Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/wp%20content.jpg"></a></figure><p>WP Private Content Pro gives you a simple and easy-to-use interface for protecting your important site content. This plugin allows you to restrict content on your website based on various types of users including guests, members, user roles, user groups, and Mailchimp subscriptions. Unlike other membership plugins, it can provide additional restrictions on menus, widgets, searches, private groups, and products. </p><h3>18. <a href="https://codecanyon.net/item/institute-management-pro/22471824" target="_self">Institute Management Pro</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/institute-management-pro/22471824" target="_self"><img alt="Institute Management Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/institute.jpg"></a></figure><p>This cheap membership plugin has plenty of powerful features that make this a must buy. Institute Management Pro helps you manage the multiple institute-related activities such as courses, batches, enquirers, registrations, fees, students, and staff. </p><p>Here are a few notable features of this plugin: </p><ul>
<li>exam results management</li>
<li>generated receipts, reports, and ID cards</li>
<li>institute noticeboard widget</li>
<li>send notifications to students</li>
<li>accepts PayPal or Razorpay</li>
</ul><p>Feel free to check out how this plugin works by viewing the <a href="https://preview.codecanyon.net/item/institute-management-pro/full_screen_preview/22471824?_ga=2.186750568.1533389771.1578854102-1533195312.1578794662" target="_self">live preview</a>.</p><h2>5 Free Membership Plugins for Download in 2020</h2><p>By purchasing a premium WordPress membership plugin, you will receive the highest quality plugins available on the market. The number of advanced features that these plugins will have and the overall user experience for both you and your customers will much higher than with free membership plugins.  </p><p>If you are on a budget and still need to add membership functionality to your WordPress website, then take a look at these five free membership plugins.</p><h3>1. <a href="https://wordpress.org/plugins/s2member/" target="_self">s2Member</a>
</h3><figure class="post_image"><img alt="s2Member" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/1free.png"></figure><p>Protect your WordPress posts, pages, tags, categories, and URLs with this free plugin. s2Member is powered almost entirely by WordPress shortcodes, making it quick and easy to add member features.</p><h3><strong>2. <a href="https://wordpress.org/plugins/mini-membership/" target="_self">Mini Membership</a></strong></h3><p>If you're looking for a basic membership plugin without any advanced features, this is the plugin for you. All this plugin does is lock specific content on your website to users who are not part of the membership. </p><h3>
<strong>3. </strong><a href="https://wordpress.org/plugins/wp-members/" target="_self">WP-Members Membership Plugin</a>
</h3><p>The WP-Members plugin puts the registration process on the site's front end so it is part of your content instead of the WP login page. This is a great tool for sites offering premium content to subscribers.</p><h3>
<strong>4. </strong><a href="https://wordpress.org/plugins/simple-membership/" target="_self">Simple Membership</a>
</h3><figure class="post_image"><img alt="Simple Membership" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34493/image/mem.png"></figure><p>This plugin allows you to set up unlimited membership levels and protect your posts and pages through the different membership levels that you create. You can also configure it to have free and/or paid memberships on your site. </p><h3>
<strong>5. </strong><a href="https://wordpress.org/plugins/paid-memberships-pro/" target="_self">Paid Memberships</a>
</h3><p>Paid Memberships features an all-in-one solution for your membership site needs. The back-end dashboard is filled with features that will help tailor your membership needs to your specific business. It even includes six popular payment gateways!</p><h2>Take Your Membership Website to the Next Level</h2><p>The premium and free membership plugins mentioned in this article are guaranteed to get your membership site up and running. However, just installing the plugins is not enough to create a profitable business. You need to retrofit your WordPress website to draw in potential customers and customize the membership plugin to fit your business's needs. Below are three Envato Tuts+ tutorials that will help you implement membership plugins into your WordPress website. </p><p>In addition to the three tutorials below, feel free to check out the <a href="https://code.tutsplus.com/tutorials/search/membership+plugins" target="_self">membership plugin tutorials</a> available on Envato Tuts+.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/monetize-your-content-create-a-membership-wordpress-site-with-ump--cms-33801"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33801/preview_image/wordpress%20page%20builders.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Monetize Your Content: Create a Membership WordPress Site With UMP</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/how-to-design-the-front-page-of-a-subscription-website--cms-33966"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/33966/preview_image/wordpress-subscription-themes.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">How to Design the Front Page of a Subscription Website</div>
<div class="roundup-block__author">Stelian Subotin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/protect-paid-content-on-your-wordpress-site-using-a-free-membership-plugin--cms-33120"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/413/posts/33120/preview_image/wordpress-plugins.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Protect Paid Content on Your WordPress Site Using a Free Membership Plugin</div>
<div class="roundup-block__author">Sajal Soni</div></a></li>
</ul><h2>Add a Premium WordPress Membership Plugin to Your Website Now!</h2><p>Transforming your WordPress website into a fully functional membership website will be very costly and time-consuming if you hire a web developer. CodeCanyon offers you a quick and affordable solution by hosting a marketplace full of membership plugins for you to choose from. <br></p><p>Whether you need to lock certain pages on your website or create cyclical payments through the WooCommerce payment gateways, CodeCanyon has plenty of high-quality membership plugins that can help you grow your business. </p><p>While you are on CodeCanyon, feel free to browse through the best-selling WordPress plugins. New plugins are added weekly and can help you improve your website's functionality not only for you but also for your customers. </p><p>Dive into CodeCanyon's library of <a href="https://codecanyon.net/category/wordpress" target="_self">premium WordPress plugins </a>today! With a low-cost, one-time payment, you can purchase one of these high-quality WordPress plugins and improve your website experience for you and your visitors. </p><figure class="post_image"><a href="https://codecanyon.net/popular_item/by_category?category=wordpress" target="_self"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg"></a></figure><p>Here are a few of the best-selling and hot new WordPress plugins available on CodeCanyon for 2020.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-visual-composer-addons-extensions-of-2017--cms-28733"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WPBakery Page Builder (Visual Composer) Addons &amp; Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/8-best-wordpress-slider-carousel-plugins-of-2017--cms-28592"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28592/preview_image/sliders%20(Case%20Conflict).jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">17 Best WordPress Slider &amp; Carousel Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/20-best-wordpress-calendar-plugins-and-widgets--cms-25906"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/25906/preview_image/calendar-c.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">20 Best WordPress Calendar Plugins and Widgets</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-popup-opt-in-wordpress-plugins--cms-28617"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28617/preview_image/opt-in.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">25+ Best Popup &amp; Opt-In WordPress Plugins</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-04-28T11:53:59+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[25 Best WooCommerce Plugins for Products, Pricing, Payments and More]]></title>
      <link>//shineyrock.com/blog/read/25-best-woocommerce-plugins-for-products-pricing-payments-and-more</link>
      <guid>https://shineyrock.com/blog/read/25-best-woocommerce-plugins-for-products-pricing-payments-and-more#When:14:36:59Z</guid>
      <description><![CDATA[<p>Take your WooCommerce online store to the next level by adding extra features with WooCommerce WordPress plugins. </p><figure><a href="https://codecanyon.net/item/woocommerce-product-filter/8514038" target="_self"><img alt="WooCommerce Product Filter" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/skill.png"></a><figcaption>WooCommerce Product Filter is one of the premium plugins offered on CodeCanyon.</figcaption></figure><p>WooCommerce is a free solution for all of your WordPress eCommerce needs. This free eCommerce platform has all the basic functions needed for an online store, but to tailor the store to your specific business you need plugins. The WooCommerce plugins available on <a href="https://codecanyon.net/category/wordpress/ecommerce/woocommerce" target="_self">CodeCanyon</a> give you the power to extend out the platform's functionality and give your customers a specialized online store.</p><h2>The Best WooComerce Plugins on CodeCanyon<br>
</h2><p>Discover CodeCanyon's extensive library of the best WooCommerce WordPress plugins ever created. With a low-cost one-time payment, you can purchase these high-quality WordPress plugins and draw in more traffic to your website. </p><p>Here are a few of the best-selling WooCommerce WordPress plugins available on CodeCanyon for 2020.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/ecommerce/woocommerce?sort=sales" target="_self"><img alt="Best Selling WooCommerce Plugins On CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/asdfe.jpg"></a><figcaption>Best selling WooCommerce plugins on CodeCanyon.</figcaption></figure><p>These diverse and powerful WooCommerce plugins allow you to add valuable eCommerce features to your online store such as:<br></p><ul>
<li>email service provider integration</li>
<li>currency switchers</li>
<li>affiliate marketing add ons</li>
<li>product filters</li>
<li>product designers</li>
</ul><p>CodeCanyon has a whole library of full WooCommerce plugins. At least one of these plugins will help you improve your online store and help generate more sales so head on over to <a href="https://codecanyon.net/category/wordpress/ecommerce/woocommerce?sort=sales" target="_self">CodeCanyon</a> now!</p><h2><figure class="post_image">Top 20 WooCommerce Plugins (From CodeCanyon for 2020)</figure></h2><p>Here are 20 of the best-selling WooCommerce plugins that are available for you to download on CodeCanyon:</p><h3>1. <a href="https://codecanyon.net/item/fancy-product-designer-woocommerce-plugin/6318393" rel="external" target="_blank">Fancy Product Designer—WooCommerce Plugin</a>
</h3><p>There are many product printing services on the web whereby users upload images, add text, and create their own unique t-shirt, mug, or just about any other product that can be printed on.<br></p><p>With WooCommerce and the Fancy Product Designer, you can do the same thing and build your own custom eCommerce storefront.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/fancy-product-designer-woocommercewordpress/6318393" target="_self"><img alt="Fancy Product Designer - WooCommerce Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/01%20-%20Fancy%20Product%20Designer%20-%20WooCommerce%20Plugin-image.jpg" class="loaded"></a></figure><p>This is one of the best online solutions for custom printing businesses:</p><ul>
<li>customers can create text layers or upload images—even images from social media accounts</li>
<li>customers can color individual layers or choose those set by the store owner</li>
<li>smart pricing based on layers, layer types, product types, etc.</li>
<li>sell just about any type of product</li>
<li>and much, much more!<br>
</li>
</ul><p>This HTML5 WordPress WooCommerce plugin works with many themes and is easy to translate.</p><p>You can't get much fancier than the <a href="https://codecanyon.net/item/fancy-product-designer-woocommerce-plugin/6318393" rel="external" target="_blank">Fancy Product Designer </a>.</p><h2>2. <a href="https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279" rel="external" target="_blank">WooCommerce Dynamic Pricing &amp; Discounts</a>
</h2><p>This WordPress WooCommerce plugin is a must have for anyone interested in offering discount pricing.</p><p>The WooCommerce Dynamic Pricing &amp; Discounts plugin lets you determine pricing rules and cart discounts with ease.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279" target="_self"><img alt="WooCommerce Dynamic Pricing Discounts" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/02%20-%20WooCommerce%20Dynamic%20Pricing%20&amp;%20Discounts-image.png" class="loaded"></a></figure><p>Whether you're selling shippable or digital products, you'll find everything you need:</p><ul>
<li>provide quantity discounts, special offers, percentage discounts and more</li>
<li>create an almost unlimited number of discount pricing types<br>
</li>
<li>conditional cart discounts</li>
<li>customer loyalty pricing</li>
<li>and much more<br>
</li>
</ul><p>Start boosting your sales and increasing customer loyalty with the <a href="https://codecanyon.net/item/woocommerce-dynamic-pricing-discounts/7119279" rel="external" target="_blank">WooCommerce Dynamic Pricing &amp; Discounts</a>.</p><h2>3. <a href="https://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656" rel="external" target="_blank">Table Rate Shipping for WooCommerce</a>
</h2><p>For wholesalers and retailers shipping products, you know how complicated shipping can be. Multiply the number of different products with the number of shipping destinations and you'll quickly realize how crazy it can get.<br></p><p>With the Table Rate Shipping for WooCommerce WordPress plugin, however, you can set up a system that will help you charge less for shipping and sell more product.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656" target="_self"><img alt="Table Rate Shipping for WooCommerce" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/03%20-%20Table%20Rate%20Shipping%20for%20WooCommerce%20-image.png" class="loaded"></a></figure><p>This WordPress WooCommerce plugin is one of the best-selling WooCommerce extensions for good reason:</p><ul>
<li>set up zones based on country, state, or postal codes</li>
<li>base rates on price, quantity, weight or dimensions</li>
<li>generate one or multiple shipping cost options<br>
</li>
<li>supports volumetric shipping</li>
<li>and much more<br>
</li>
</ul><p>The fact that this plugin is also WPML compatible and has a tax inclusion option makes this a stellar choice.<br></p><p>Need to ship? <a href="https://codecanyon.net/item/table-rate-shipping-for-woocommerce/3796656" rel="external" target="_blank">Table Rate Shipping for WooCommerce</a> delivers.<br></p><h2>4. <a href="https://codecanyon.net/item/woocommerce-extra-product-options/7908619" rel="external" target="_blank">WooCommerce Extra Product Options</a>
</h2><p>WooCommerce Extra Product Options is a great plugin for eCommerce stores that need to offer extra product options.</p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-extra-product-options/7908619" target="_self"><img alt="WooCommerce Extra Product Options" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/04%20-%20WooCommerce%20Extra%20Product%20Options-image.jpg" class="loaded"></a></figure><p>This WordPress WooCommerce plugin offers:</p><ul>
<li>check-boxes, radio buttons, select boxes, textareas, input boxes, upload, date, range picker, and color picker</li>
<li>the ability to replace check-boxes, radio buttons, and select boxes with images</li>
<li>hide or show prices<br>
</li>
<li>form fields builder</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-extra-product-options/7908619" rel="external" target="_blank">WooCommerce Extra Product Options</a> is a solid and simple way to bring extra product options to your WooCommerce-powered storefront.<br></p><h2>5. <a href="https://codecanyon.net/item/woocommerce-product-filter/8514038" rel="external" target="_blank">WooCommerce Product Filter</a>
</h2><p>If you're selling many products using WooCommerce, you're going to need a good way for customers to search, sort, and find what they're looking for.</p><p>A product not found is a sale lost.</p><p>The WooCommerce Product Filter is one of the best plugins for searching, sorting, and filtering products.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-product-filter/8514038" target="_self"><img alt="WooCommerce Product Filter" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/05%20-%20WooCommerce%20Product%20Filter-image.jpg" class="loaded"></a></figure><p>This WooCommerce product plugin is impressive:</p><ul>
<li>filter using taxonomies, price, range, and in-stock filters<br>
</li>
<li>unlimited filters and easy integration</li>
<li>widget filters and filter layouts</li>
<li>impressive design options</li>
<li>and much more<br>
</li>
</ul><p>My favorite feature has to be the filter analytics. Track your customer search behavior to improve your storefront or develop new products.<br></p><p>The <a href="https://codecanyon.net/item/woocommerce-product-filter/8514038" rel="external" target="_blank">WooCommerce Product Filter</a> is one of the best product search filters you'll find.<br></p><h2>6. <a href="https://codecanyon.net/item/woocommerce-advanced-shipping/8634573" rel="external" target="_blank">WooCommerce Advanced Shipping</a>
</h2><p>Here's another nice option for those shipping products.<br></p><p>The WooCommerce Advanced Shipping plugin is very advanced, but also easy to use.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-advanced-shipping/8634573" target="_self"><img alt="WooCommerce Advanced Shipping" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/06%20-%20WooCommerce%20Advanced%20Shipping-image.png" class="loaded"></a><a href="https://codecanyon.net/item/woocommerce-advanced-shipping/8634573" target="_self">WooCommerce Advanced Shipping</a></figure><p>Features include:</p><ul>
<li>customize with cart, user, and product based conditions</li>
<li>volume based pricing and table shipping</li>
<li>create unlimited shipping methods</li>
<li>set up worldwide shipping zones<br>
</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-advanced-shipping/8634573" rel="external" target="_blank">WooCommerce Advanced Shipping</a> also includes conditional logic.<br></p><h2>7. <a href="https://codecanyon.net/item/woocommerce-pdf-invoice/5951088" rel="external" target="_blank">WooCommerce PDF Invoice</a>
</h2><p>Providing a PDF invoice with your eCommerce sales is not only a nice service to the customer, but adds a really professional touch.<br></p><p>The WooCommerce PDF Invoice WordPress plugin is the perfect WooCommerce add-on to do that.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-pdf-invoice/5951088" target="_self"><img alt="WooCommerce PDF Invoice" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/07%20%20-%20WooCommerce%20PDF%20Invoice%20-image.jpg" class="loaded"></a></figure><p>It's hard to find any other option with all these features:</p><ul>
<li>supports custom checkout fields and multiple custom content blocks<br>
</li>
<li>offers regular and proforma invoices</li>
<li>complies with accounting standards</li>
<li>excellent design layout and style</li>
<li>automatic invoicing</li>
<li>and much, much more<br>
</li>
</ul><p>It's feature rich and well designed, and you'd be hard pressed to find anything better.<br></p><p><a href="https://codecanyon.net/item/woocommerce-pdf-invoice/5951088" rel="external" target="_blank">WooCommerce PDF Invoice</a> is made by professionals, and it shows.<br></p><h2>8. <a href="https://codecanyon.net/item/woochimp-woocommerce-mailchimp-integration/6044286" rel="external" target="_blank">WooChimp—WooCommerce MailChimp Integration</a>
</h2><p>Automatically build your customer email list by connecting WooCommerce and MailChimp with the WooChimp mailing list plugin for WooCommerce.</p><p>It's pretty nifty.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woochimp-woocommerce-mailchimp-integration/6044286" target="_self"><img alt="WooChimp - WooCommerce MailChimp Integration" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/08%20-%20WooChimp%20-%20WooCommerce%20MailChimp%20Integration-image.png" class="loaded"></a></figure><p>You'll find just about every option you could ever want in a WooCommerce MailChimp  plugin.</p><ul>
<li>subscribe customers automatically and sign up on checkout</li>
<li>includes widget and shortcode support</li>
<li>campaign-to-order tracking<br>
</li>
<li>Ecommerc360 support<br>
</li>
<li>and much, much more<br>
</li>
</ul><p>Leveraging the power of MailChimp with your WooCommerce storefront extends your reach and marketing in a powerful way.<br></p><p>And you'll “go bananas” over the great support, documentation, and clean code the <a href="https://codecanyon.net/item/woochimp-woocommerce-mailchimp-integration/6044286" rel="external" target="_blank">WooChimp</a> plugin offers.<br></p><h2>9. <a href="https://codecanyon.net/item/woocommerce-advanced-bulk-edit/8011417" rel="external" target="_blank">WooCommerce Advanced Bulk Edit</a>
</h2><p>If you want to do bulk editing  of your WooCommerce products, or to export your WooCommerce product list to a CSV file, you need to take a look at WooCommerce Advanced Bulk Edit.</p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-advanced-bulk-edit/8011417" target="_self"><img alt="WooCommerce Advanced Bulk Edit" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/09%20-%20WooCommerce%20Advanced%20Bulk%20Edit-image.jpg" class="loaded"></a></figure><p>Some of the features include:</p><ul>
<li>bulk edit, add, and remove attributes</li>
<li>create, duplicate, and delete products<br>
</li>
<li>many ways to filter products</li>
<li>supports 40+ fields<br>
</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-advanced-bulk-edit/8011417" rel="external" target="_blank">WooCommerce Advanced Bulk Edit</a> is simple, straightforward, and gets the job done.<br></p><h2>10. <a href="https://codecanyon.net/item/subscriptio-woocommerce-subscriptions/8754068" rel="external" target="_blank">Subscriptio—WooCommerce Subscriptions</a>
</h2><p>The Subscriptio WooCommerce subscription plugin gives you everything you need to give your WordPress WooCommerce website the ability to sell and manage subscriptions.</p><figure class="post_image"><a href="https://codecanyon.net/item/subscriptio-woocommerce-subscriptions/8754068" target="_self"><img alt="Subscriptio - WooCommerce Subscriptions" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/10%20-%20Subscriptio%20-%20WooCommerce%20Subscriptions-image.png" class="loaded"></a></figure><p>This feature-rich solution is all you'll need:</p><ul>
<li>options for cancellation warnings, suspended subscriptions, and more<br>
</li>
<li>PayPal and Stripe payment gateways are built in<br>
</li>
<li>recurring payments with any billing cycle</li>
<li>set up free trials or set-up fees<br>
</li>
<li>and much, much more<br>
</li>
</ul><p>For magazine subscriptions, online memberships, or e-learning packages, there's hardly a better WordPress WooCommerce plugin solution.<br></p><p><a href="https://codecanyon.net/item/subscriptio-woocommerce-subscriptions/8754068" rel="external" target="_blank">Subscriptio</a> is solid.<br></p><h2>11. <a href="https://codecanyon.net/item/woocommerce-customer-relationship-manager/5712695" rel="external" target="_blank">WooCommerce Customer Relationship Manager</a>
</h2><p>This is a cool WordPress WooCommerce plugin.<br></p><p>WooCommerce Customer Relationship Manager turns your eCommerce site into a <a href="https://en.wikipedia.org/wiki/Customer_relationship_management" rel="external" target="_blank">CRM</a> (Customer Relationship Management) solution.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-customer-relationship-manager/5712695" target="_self"><img alt="WooCommerce Customer Relationship Manager" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/11%20-%20WooCommerce%20Customer%20Relationship%20Manager-image.png" class="loaded"></a></figure><p>Track all your customer interactions:</p><ul>
<li>create new customers and place orders by taking orders over the phone</li>
<li>easily search and filter through your customers</li>
<li>send emails individually or bulk</li>
<li>assign customer status</li>
<li>log calls and emails</li>
<li>and much, much more<br>
</li>
</ul><p>This plugin makes it possible to sell products and services online, over the phone, or even face-to-face, making it a solution for both online and brick-and-mortar businesses.<br></p><p>The <a href="https://codecanyon.net/item/woocommerce-customer-relationship-manager/5712695" rel="external" target="_blank">WooCommerce Customer Relationship Manager</a> plugin is impressive and unique.<br></p><h2>12. <a href="https://codecanyon.net/item/wordpress-meta-data-taxonomies-filter/7002700" rel="external" target="_blank">Wordpress Meta Data &amp; Taxonomies Filter</a>
</h2><p>The WordPress Meta Data &amp; Taxonomies Filter WooCommerce plugin gives you the ability to query multiple taxonomies and meta fields at the same time.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/wordpress-meta-data-taxonomies-filter/7002700" target="_self"><img alt="Wordpress Meta Data Taxonomies Filter" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/12%20-%20Wordpress%20Meta%20Data%20&amp;%20Taxonomies%20Filter-image.jpg" class="loaded"></a></figure><p>Features also include:</p><ul>
<li>create new meta fields with checkboxes, drop-downs, range-sliders, and more<br>
</li>
<li>includes widgets and shortcodes</li>
<li>AJAX searching support</li>
<li>and more<br>
</li>
</ul><p>If you need a simple and flexible search plugin for your WooCommerce store, take a look at the <a href="https://codecanyon.net/item/wordpress-meta-data-taxonomies-filter/7002700" rel="external" target="_blank">WordPress Meta Data &amp; Taxonomies Filter</a> plugin.<br></p><h2>13. <a href="https://codecanyon.net/item/woocommerce-currency-switcher/8085217" rel="external" target="_blank">WooCommerce Currency Switcher</a>
</h2><p>If your customers are international or even if you're selling to one other country, you're going to need the WooCommerce Currency Switcher plugin.</p><p>This is a great way for users to change the currency being used and for the price to be converted in real time.<br></p><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-currency-switcher/8085217" target="_self"><img alt="WooCommerce Currency Switcher" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/13%20-%20WooCommerce%20Currency%20Switcher-image.png" class="loaded"></a></figure><p>You'll find just the right features:</p><ul>
<li>rate conversion using Yahoo, Google Appspot Aggregators, or manually</li>
<li>display currency switcher via widget or shortcode</li>
<li>five UI currency switcher options</li>
<li>GeoLocation by IP</li>
<li>and much more<br>
</li>
</ul><p>The <a href="https://codecanyon.net/item/woocommerce-currency-switcher/8085217" rel="external" target="_blank">WooCommerce Currency Switcher</a> is simple, powerful, and well designed.<br></p><h2>14. <a href="https://codecanyon.net/item/woocommerce-upload-files/11442983" target="_self">WooCommerce Upload Files</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-upload-files/11442983" target="_self"><img alt="WooCommerce Upload Files" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/590x300%20(1).jpg"></a></figure><p>This WooCommerce file upload plugin allows you to upload any file at any size from the product, cart, checkout, or order details pages! This is a must-have plugin if you are offering any sort of digital download!</p><p>Here are a few of the features of this powerful plugin:</p><ul>
<li>Dropbox support</li>
<li>email notification and attachments</li>
<li>add additional costs base on files</li>
<li>file restrictions</li>
</ul><p>Check out the <a href="https://codecanyon.net/item/woocommerce-upload-files/11442983" target="_self">live demo</a> of this plugin to see if it is right for you!</p><h2>15. <a href="https://codecanyon.net/item/woocommerce-custom-fields/11332742" target="_self">WooCommerce Custom Fields</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-custom-fields/11332742" target="_self"><img alt="WooCommerce Custom Fields" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/WCCF_LEAD_590x300.jpeg"></a></figure><p>The WooCommerce Custom Fields plugin allows you to create a custom product, checkout, and user fields. Depending on the product you are selling, these extra fields may be necessary. These custom fields can also be used to help upsell a product as well and increase your revenue. <br></p><p>Here is what you can expect from this plugin:</p><ul>
<li>create unlimited product fields</li>
<li>selectable product options</li>
<li>charge customers for selected options</li>
<li>provide additional user fields on checkout</li>
</ul><p>View this plugin in action by checking out the <a href="https://preview.codecanyon.net/item/woocommerce-custom-fields/full_screen_preview/11332742?_ga=2.198964783.1237801578.1579239888-1533195312.1578794662" target="_self">live preview</a>.</p><h2>16. <a href="https://codecanyon.net/item/woocommerce-pdf-vouchers-wordpress-plugin/7392046" target="_self">WooCommerce PDF Vouchers</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/woocommerce-pdf-vouchers-wordpress-plugin/7392046" target="_self"><img alt="WooCommerce PDF Vouchers" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/wooCommerce-pdf-vouchers-banner.jpeg"></a></figure><p>Gift vouchers can be a great way to bring in new customers. You can use this plugin to create gift vouchers, rewards, and promotions that fit your business model. The WooCommerce PDF Vouchers plugin is ideal for connecting your online business with your on the ground business by providing a redeemable voucher system that you control. </p><p>Not sure if this is the right plugin for you? Take a look at the <a href="https://codecanyon.net/item/woocommerce-pdf-vouchers-wordpress-plugin/7392046" target="_self">back- and front-end demo</a>.</p><h2>17. <a href="https://codecanyon.net/item/sumo-reward-points-woocommerce-reward-system/7791451" rel="external" target="_blank">SUMO Reward Points—WooCommerce Reward System</a>
</h2><p>Build your own loyalty reward program using the SUMO Reward Points plugin.</p><p>This is a unique and powerful WooCommerce WordPress plugin to help increase customer engagement.<br></p><figure class="post_image"><img alt="SUMO Reward Points - WooCommerce Reward System" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/17%20-%20SUMO%20Reward%20Points%20-%20WooCommerce%20Reward%20System-image.png" class="loaded"></figure><p>Reward customers for:</p><ul>
<li>social media shares</li>
<li>product purchases</li>
<li>writing reviews</li>
<li>signing up</li>
<li>referrals</li>
</ul><p>You can then offer points at a product, category, or global level. Points can have set expiration dates and much, much more.<br></p><p>There are many different ways to configure <a href="https://codecanyon.net/item/sumo-reward-points-woocommerce-reward-system/7791451" rel="external" target="_blank">SUMO Reward Points</a>!<br></p><h2>18. <a href="https://codecanyon.net/item/woocommerce-recover-abandoned-cart/7715167" rel="external" target="_blank">WooCommerce Recover Abandoned Cart</a>
</h2><p>Stop losing sales from abandoned carts and start recovering them with the WooCommerce Recover Abandoned Cart plugin.</p><p>Send an email—and even follow-up emails—to recover abandoned carts.<br></p><figure class="post_image"><img alt="WooCommerce Recover Abandoned Cart" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/18%20-%20WooCommerce%20Recover%20Abandoned%20Cart-image.png" class="loaded"></figure><blockquote>"Recover Abandoned Cart monitors carts that are abandoned by Members and Guests to capture Abandoned Carts. It automatically sends mails using the mail templates at specified times to Recover the Abandoned Carts."</blockquote><p>Create and customize your email follow-ups. Add coupons, and schedule how many, how often, and when emails are sent.<br></p><p>Using the <a href="https://codecanyon.net/item/woocommerce-recover-abandoned-cart/7715167" rel="external" target="_blank">WooCommerce Recover Abandoned Cart</a> plugin is a great way to follow up and salvage sales that are otherwise already lost.<br></p><h2>19. <a href="https://codecanyon.net/item/woo-badge-designer/23995345" target="_self">Woo Badge Designer</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/woo-badge-designer/23995345" target="_self"><img alt="Woo Badge Designer" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/woo-badge-designer-banner.jpg"></a></figure><p>Woo Badge Designer is the most feature-rich badge plugin on the market. You can insert unique and attractive badges to liven up your product listings. This plugin is sure to help you boost your sales. </p><p>Here are the plugins most notable features:</p><ul>
<li>countdown timer badge</li>
<li>auto-calculated discount percentages</li>
<li>set multiple badges</li>
<li>complete styling customization of badges</li>
</ul><h2>20. <a href="https://codecanyon.net/item/woocommerce-bulk-edit-variable-products-prices/6822726" rel="external" target="_blank">WooCommerce Bulk Edit Variable Products &amp; Prices</a><br>
</h2><p>The WooCommerce Bulk Edit Variable Products &amp; Prices plugin makes it super easy to make bulk edits.<br></p><figure class="post_image"><img alt="WooCommerce Bulk Edit Variable Products  Prices" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26338/image/20%20-%20Woocommerce%20Bulk%20Edit%20Variable%20Products%20&amp;%20Prices-image.jpg" class="loaded"></figure><blockquote>“You can edit as many products as you want in just one step and edit fields such as SKU, Stock, Regular Price, Sale Price, Weight, Height, etc. You can even increase or decrease all prices in a category by a set percentage % or dollar value $ for quick sales or product price increases/decreases all in one step.”<br>
</blockquote><p>Make big changes quickly and easily with <a href="https://codecanyon.net/item/woocommerce-bulk-edit-variable-products-prices/6822726" rel="external" target="_blank">WooCommerce Bulk Edit Variable Products &amp; Prices</a> and its easy-to-use Admin interface.</p><h2>5 Free WooCommerce Plugins for Download in 2020</h2><p>The premium WooCommerce plugins available on CodeCanyon will give your store the most advanced set of features. If your business is on a limited budget, though, you might not be able to afford to purchase these premium plugins. </p><p>This should not stop you from upgrading your WooCommerce store and giving your customers the eCommerce shopping experience they need. </p><p>Below are a collection of the five best free WooCommerce WordPress plugins available.</p><h3>1. <a href="https://wordpress.org/plugins/woocommerce-gateway-stripe/" target="_self">WooCommerce Stripe Payment Gateway</a>
</h3><p>Stripe is one of the most popular payment gateways.  This WooCommerce Stripe plugin extends the WooCommerce payment gateway functionality to allow you to take payments directly on your store via Stripe’s API. If you are using Stripe to collect payments, then this is a must-have!</p><h3><figure class="post_image"><strong>2. </strong><a href="https://wordpress.org/plugins/woocommerce-direct-checkout/" target="_self">Direct Checkout </a></figure></h3><figure class="post_image"><img alt="Direct Checkout " data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/feaf.png"></figure><p>Direct Checkout lets you simplify the checkout process by skipping the shopping cart page. The <strong>Add to Cart</strong> button is added to each product which then redirects customers to the checkout page. This simple addition of the button and redirect can help increase sales tremendously.<br></p><h3>
<strong>3. </strong><a href="https://wordpress.org/plugins/woocommerce-menu-bar-cart/" target="_self">WooCommerce Menu Cart</a>
</h3><p>This plugin installs a shopping cart button in the navigation bar. You will be able to display price, the number of items, and the cart menu. This simple menu will help encourage your customers to check out sooner. </p><h3>
<strong>4. </strong><a href="https://wordpress.org/plugins/ti-woocommerce-wishlist/" target="_self">TI WooCommerce Wishlist</a>
</h3><figure class="post_image"><img alt="YITH WooCommerce Zoom Magnifier" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/exp.png"></figure><p>The free WooCommerce Wishlist plugin can help you convert your website visitors into loyal customers.  You will be able to add wishlist buttons next to each product to give your customers a chance to return to your website and remember what products they were considering buying. This is another great plugin to help you generate sales.</p><h3>
<strong>5. </strong><a href="https://wordpress.org/plugins/yith-woocommerce-zoom-magnifier/" target="_self">YITH WooCommerce Zoom Magnifier</a><br>
</h3><p>Online shoppers are used to having many features on webstores. One important feature that is not present on the default WooCommerce plugin are zoom magnifiers. Zoom magnifiers help your customers see the quality of your product and make informed purchasing decisions.  </p><h2>Take Your WooCommerce Store to the Next Level!</h2><p>By making use of the premium and free plugins available, you can start to create an eCommerce store that users will love to visit and shop on. However, there is more running a successful WooCommerce site than just adding on a few premium features. You must make sure that your website theme matches your business's brand identity, your payment gateway must be set up properly, and you must customize your store in a way that gives it the best possible chance to succeed. <br></p><p>Below is a list of articles that will help you get the most out of your WooCommerce store. Combining the premium WooCommerce plugins available on CodeCanyon and applying the knowledge in these articles, you will have an online store that you are confident in and an online store that gets you excited for the future of your business.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/top-ways-to-make-your-woocommerce-store-successful--cms-33232"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33232/preview_image/mobile%20business%20app%20template.jpg"><div class="roundup-block__primary-category topic-webdesign">WooCommerce</div>
<div class="roundup-block__content-title">Top 10 Tips for a Better WooCommerce Store</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-woocommerce-themes-to-make-a-better-online-store--cms-26819"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/26819/preview_image/woo.jpg"><div class="roundup-block__primary-category topic-webdesign">WooCommerce</div>
<div class="roundup-block__content-title">25+ Best WooCommerce Themes: To Make a Better Online Store </div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/add-payment-gateways-to-your-woocommerce-store--cms-32745"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/32745/preview_image/woocommerce%20paypal%20square.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Add Payment Gateways to Your WooCommerce Store</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/all-about-woocommerce-plugins-how-they-can-make-your-store-successful--cms-33294"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33294/preview_image/woocommerce.jpg"><div class="roundup-block__primary-category topic-code">WooCommerce</div>
<div class="roundup-block__content-title">Choosing a WooCommerce Plugin for WordPress eCommerce Success</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
</ul><h2>Take Advantage of the WooCommerce Plugins Available on CodeCanyon Now!<br>
</h2><p>WooCoomerce is a powerful online store solution for your WordPress website. While the basic installation of WooCommerce will help you get your store up and running, it won't contain all the necessary features and functionality that your online store will need. </p><p><a href="https://codecanyon.net/search/woocommerce" target="_self">CodeCanyon</a> offers the most flexible and feature-rich WooCommerce WordPress plugins on the market and will add another dimension of functionality to your online store that users are accustomed to.<br></p><p>Whether you need to implement custom fields and uploads, display multiple currencies, or offer memberships, the diverse WooCommerce plugins available on <a href="https://codecanyon.net/search/woocommerce" target="_self">CodeCanyon</a> can help you accomplish these tasks. </p><p>In addition to all the high-quality WooCommerce plugins available, there are also thousands of other <a href="https://codecanyon.net/category/wordpress" target="_self">high-quality WordPress plugins</a> on CodeCanyon that can help enhance your website. Take look through the extensive library of plugins and you will find all types of plugins including forum, media, and SEO plugins.<br></p><p>Take advantage of the massive library of <a href="https://codecanyon.net/category/wordpress" target="_self">high-quality WordPress plugins</a> on CodeCanyon now!</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/ecommerce/woocommerce?sort=sales" target="_self"><br><img alt="Best Selling WooCommerce Plugins On CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34525/image/asdfe.jpg"></a><figcaption>Best selling WooCommerce plugins on CodeCanyon.</figcaption></figure><p><br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-04-17T14:36:59+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[10 Best WordPress Twitter Widgets]]></title>
      <link>//shineyrock.com/blog/read/10_best_wordpress_twitter_widgets</link>
      <guid>https://shineyrock.com/blog/read/10_best_wordpress_twitter_widgets#When:13:52:51Z</guid>
      <description><![CDATA[<p>As a website owner, you should always try to use all the tools at your disposal to increase your website traffic. More traffic will usually drive up your revenue and allow you to further expand your business or improve the quality of the services you currently provide.</p><p>Social media can play an important role when it comes to driving traffic to your website. Proper use of social media will help your business in two ways. First, it will bring visitors or clients from sources other than search engines. Second, it will give your followers a way to interact with you in places other than your website.</p><p>One of the popular social media platforms that you can use to engage your followers and website visitors is Twitter. In this post, we will list the best WordPress Twitter widgets that you can start using today.</p><h2>WordPress Twitter Widgets on Codecanyon</h2><p>There are currently <a href="https://codecanyon.net/category/wordpress?term=twitter" rel="external" target="_blank">over 250 WordPress widgets related to Twitter</a> available on CodeCanyon. You can use them to do all kinds of things like showing tweet and follow buttons, fetching the feed of a Twitter user or hashtag, or automatically posting tweets about the latest article on your website.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=twitter" rel="external" target="_blank"><img alt="WordPress Twitter Widgets on Codecanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png"></a></figure><p>The price of these plugins starts from as low as $6. The best sellers offer regular updates and a lot of features. You also get six months of free support. This should be enough to help you get started with your website.<br></p><h2>Best WordPress Twitter Widgets and Plugins</h2><p>Here are the top seven WordPress widgets and plugins that you can buy on CodeCanyon and add to your website:<br></p><h3>1. <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" rel="external" target="_blank">Twitter Feed—WordPress Twitter Plugin</a>
</h3><p>This <a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" rel="external" target="_blank">Twitter feed plugin by Elfsight</a> allows you to easily display the Twitter feed for a specific profile or a hashtag directly on your website. As a result, people start engaging more with your website as well as your Twitter profile.</p><figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-wordpress-twitter-plugin/22951909" rel="external" target="_blank"><img alt="Elfsight Twitter Feed" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/elfsight-twitter-feed-preview.png"></a></figure><p>The plugin gives you multiple templates to display Twitter feeds on your website. You can display these feeds for any username you want or any hashtag that your website visitors and clients are likely to use.</p><p>Sometimes, visitors might not directly express their satisfaction with your service on your website. If your clients usually tweet good things about you on Twitter, you can use this plugin to display those tweets on your website as testimonials.</p><p>The plugin is fully compatible with WordPress and works with all WordPress themes, including many popular ones that you find on CodeCanyon.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-responsive-wordpress-themes--cms-29973"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29973/preview_image/rwd.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">28+ Best Responsive WordPress Themes (For Sites in 2020)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li></ul><h3>2. <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" rel="external" target="_blank">AccessPress Twitter Feed Pro</a>
</h3><p>The <a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" rel="external" target="_blank">AccessPress Twitter Feed Pro WordPress plugin</a> also allows you to showcase Twitter feeds on your website. The feed can come from a single user account, multiple user accounts, or specific hashtags.</p><figure class="post_image"><a href="https://codecanyon.net/item/accesspress-twitter-feed-pro/11029697" rel="external" target="_blank"><img alt="AccessPress Twitter Feed Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/access_press.jpg"></a></figure><p>The plugin has three different modes or layouts—called default mode, slider mode, and ticker mode—to display the latest tweets from your feed.</p><p>There are more than 20 different templates for displaying the feed, and they all look absolutely stunning. You can easily choose a template that looks great on your own website.</p><p>The plugin also added a lot of new features with its recent update. This includes things like showing user cards, displaying retweet information, and a shortcode generator to make the plugin as user-friendly as possible.</p><p>If users click on a video or image inside your Twitter feed, it will open in a nicely designed lightbox.</p><h3>3. <a href="https://codecanyon.net/item/twitter-plus/16852014" rel="external" target="_blank">Twitter Plus</a>
</h3><p>The <a href="https://codecanyon.net/item/twitter-plus/16852014" rel="external" target="_blank">Twitter Plus</a> WordPress plugin makes it incredibly easy for you to add Twitter buttons to any post or page on your website. It will automatically add Twitter buttons for tweet, follow, mention, or hashtags on all pages and posts that you select.</p><figure class="post_image"><a href="https://codecanyon.net/item/twitter-plus/16852014" rel="external" target="_blank"><img alt="Twitter Plus" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/twitter-plus.png"></a></figure><p>There are a couple of customization options that are available for each type of button. For example, you can set the tweet text to the page title or some other custom value for the tweet, hashtag, and mention buttons.</p><p>You can also choose to show either the username or the follower count (or both) on the follow buttons.</p><p>The plugin lets you choose the buttons that you want to show on different posts. You don't have to show all four of them everywhere. Just pick the ones you like and tell the plugin to add them either at the top or bottom of your page or post.<br></p><h3>4. <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" rel="external" target="_blank">WordPress to Twitter—Twitter Bot</a>
</h3><p>Running and maintaining a website takes a lot of work. Therefore, it makes sense to automate some simple tasks and use the time you saved to improve the website.</p><p>The <a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" rel="external" target="_blank">WordPress to Twitter</a> plugin allows you to do exactly that. Once you purchase and install the plugin, you can set it up to tweet different types of posts from categories that you select.</p><figure class="post_image"><a href="https://codecanyon.net/item/wordpress-to-twitter-one-click-to-share-many-of-posts-on-twitter/22112136" rel="external" target="_blank"><img alt="WordPress to Twitter - Twitter Bot" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/wp2twitter.png"></a></figure><p>You can specify the delay time that will determine the interval between different tweets. You can also tell the plugin if it should include the post title or link in the tweets. Each tweet can also contain some custom additional text, a mention, or hashtags.</p><p>It is possible to specify the time interval within which a post has been published to shortlist it for automated tweets.</p><p>All these features make this plugin a good tool to save time and automate some of your social media outreach workload.</p><h3>5. <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" rel="external" target="_blank">Twitter Feed Grid With Carousel for WordPress</a>
</h3><p>This is yet another plugin that you can use to show the Twitter feed for any particular user or hashtag. However, there are a few things that make this one different from the others.</p><figure class="post_image"><a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" rel="external" target="_blank"><img alt="Twitter Feed Grid with Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/twitter_feed_carousel.png"></a></figure><p>You can either show the Twitter feed as a grid or as a carousel. When shown as a grid, the plugin comes with a bunch of options to control things like the number of columns on desktops, tablets, and mobile devices. You can also choose to use a box layout or a full-width layout.</p><p>The plugin comes with seven different grid styles to display the feed. When visitors hover over any tweet in the feed, the plugin will display social share buttons to allow users to directly share the tweets on their favorite social media platform.</p><figure class="post_image"><img alt="Twitter feed displayed in grid style" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/twitter_feed_carousel_2.png"></figure><p>The Carousel also offers eight more completely different layouts to display a bunch of tweets on the website. You should definitely check out <a href="https://codecanyon.net/item/twitter-feed-grid-with-carousel-for-wordpress/21921137" rel="external" target="_blank">the live preview</a> of this plugin.<br></p><h3>6. <a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" rel="external" target="_blank">WP Tweet Selection—Twitter Highlighter</a>
</h3><p>The <a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" rel="external" target="_blank">WP Tweet Selection plugin</a> gives your users a way to share the articles from your website on Twitter by selecting the text that they like the most.</p><figure class="post_image"><a href="https://codecanyon.net/item/wp-tweet-selection-twitter-highlighter/24763427" rel="external" target="_blank"><img alt="WP Tweet Selection" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/wp_tweet_selection.jpg"></a></figure><p>For example, if a user likes a statistic that you mentioned in your article, they could select it using regular text selection, and then the plugin will show them a prompt to share the selected text on Twitter.</p><p>This is a great way to increase the engagement of visitors with your website and give them the ability to customize the tweet. It can also bring more traffic back to your website than simply displaying the title of the article with each share.</p><p>You can control the appearance of the prompt by setting values for options like its color, size, and the text that appears inside it—for example, "<strong>Share on Twitter</strong>".</p><h3>7. <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" rel="external" target="_blank">Social Locker for WordPress</a>
</h3><p>Almost every website places social share buttons somewhere on its pages in the hope that users will share the content that they like. While some people do click these share buttons, most visitors just ignore them.</p><figure class="post_image"><a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" rel="external" target="_blank"><img alt="Social Locker for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/sociallocker-wp-inline.jpg"></a></figure><p>This plugin, called <a href="https://codecanyon.net/item/social-locker-for-wordpress/3667715" rel="external" target="_blank">Social Locker for WordPress</a>, can actually help you get more people to share your articles. The basic idea is that some of the content on the webpage is hidden behind a message that asks people to either tweet about the article, like it, or follow you on Facebook. Whichever option they choose, it will help you get more visibility on social media platforms.</p><p>Besides articles, you can use it to lock all kinds of things like videos, PDFs, videos, and download files. Give the plugin a try, and see your Twitter followers go up!</p><h2>Free WordPress Twitter Plugins</h2><p>If you are not sure about buying premium plugins right now, there are also many free Twitter plugins for WordPress. However, they generally have some downsides like fewer features and slow support—if it's provided at all.</p><p>Now, here are some free WordPress Twitter plugins that you can try.<br></p><h3>Custom Twitter Feeds</h3><p>You can use <a href="https://wordpress.org/plugins/custom-twitter-feeds/" rel="external" target="_blank">the Custom Twitter Feeds plugin</a> to display customizable and responsive tweets. The content of these tweets is also crawlable by search engines. The source of the feed can be any user or a specific hashtag.</p><h3>WP to Twitter</h3><p>The <a href="https://wordpress.org/plugins/wp-to-twitter/" rel="external" target="_blank">WP to Twitter</a> plugin allows you to easily post tweets from WordPress to Twitter. You can also do a couple of other things with it, like displaying your recent tweets in the sidebar, etc.</p><h3>OnePress Social Locker</h3><p>The <a href="https://wordpress.org/plugins/social-locker/" rel="external" target="_blank">OnePress Social Locker WordPress plugin</a> is simply a free version of the premium Social Locker plugin on CodeCanyon. It has limited features, but it should give you an idea of its capabilities.</p><h2>Tips for Using Twitter Widgets and Plugins</h2><p>There are a couple of things that you should be aware of when using these WordPress Twitter plugins on your website.</p><h3>1. Don't Fill Your Website With Twitter Feeds</h3><p>It may sound tempting to add Twitter feeds from different accounts and hashtags on your webpages because you get automatically generated content. However, don't overdo it. The feeds have to add some value to the website. If the visitors only wanted to see the Twitter feeds, they would just go to Twitter!</p><h3>2. Don't Put All Your Content Behind Social Lockers</h3><p>It is also important to not put all your content behind a social locker. Use it only when you have something unique and useful to offer. If every article on your website is behind a social locker, people will just start visiting your competition.</p><h3>3. Don't Use Too Many Social Sharing Buttons</h3><p>Unless you are focusing your marketing campaign exclusively on Twitter, you should not put the tweet, follow, mention, and other such buttons on every page. This, when combined with like and follow buttons from other networks, will become very distracting.</p><h2>Final Thoughts</h2><p>I hope that this article helped you find the perfect WordPress Twitter plugin for your website.</p><p>This small list of plugins covers all the important things that you might want to do, like showing your Twitter feed on your website or giving users an easy way to share your content on Twitter.</p><p>If you're looking for something that isn't covered in this article, make sure you check out some of the other <a href="https://codecanyon.net/category/wordpress/social-networking" target="_self">best-selling WordPress social networking plugins and widgets</a> on CodeCanyon.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/social-networking" rel="external" target="_blank"><img alt="WordPress Twitter Widgets on Codecanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34473/image/Twitter%20WordPress%20Plugins%20from%20CodeCanyon.png"></a></figure><p>Which plugins do you use to increase your social media presence? Let us know in the comments below.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-04-09T13:52:51+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[12 Best Contact Form PHP Scripts for 2020]]></title>
      <link>//shineyrock.com/blog/read/12-best-contact-form-php-scripts-for-20201</link>
      <guid>https://shineyrock.com/blog/read/12-best-contact-form-php-scripts-for-20201#When:12:25:15Z</guid>
      <description><![CDATA[<p>Contact forms are a must-have for every website. They encourage your site visitors to engage with you, while potentially lowering the amount of spam you get. </p><p>For businesses, this engagement with visitors increases the chances of turning them into clients or customers and thus increasing revenue. </p><p>If you're looking for an easy and cost-effective contact form PHP script, read on!</p><h3>Why You Need a Form on Your Website</h3><p>Web forms contribute more than 60% of lead generation on a site, which means contact forms lead to higher conversions. Online forms also allow you as a business to collect data, which is crucial for any marketing success. </p><p>The good news is that forms are also easy to add to any website and can be customized to match your brand. Plus, they act as a security measure against spammers and bots.<br></p><h2>The Best Contact Form PHP Scripts on CodeCanyon in 2020<br>
</h2><p><a href="https://codecanyon.net/category/php-scripts/forms" target="_self">CodeCanyon features over 200 Form PHP Scripts that you can purchase today</a>. Below are some of the popular and best-selling PHP form scripts in the CodeCanyon library.</p><figure class="post_image"><a href="https://codecanyon.net/category/php-scripts/forms" target="_self"><img alt="best-selling PHP form scripts" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/php%20form%20scripts.jpg"></a></figure><p>Some of the features you are guaranteed to get from these PHP contact form scripts include:<br></p><ul>
<li>multiple file upload</li>
<li>ability to design any form</li>
<li>beautiful pre-designed templates</li>
<li>notifications</li>
<li>Ajax-enabled submission and validation</li>
<li>CAPTCHA options such as Google reCAPTCHA, Honeypot, etc.</li>
<li>auto-emailing</li>
<li>responsive design</li>
<li>form validation</li>
</ul><h2>12 Best Contact Form PHP Scripts at CodeCanyon</h2><h3>1. <a href="https://codecanyon.net/item/quform-responsive-ajax-contact-form/148273" target="_self">Quform: Responsive AJAX Contact Form</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/quform-responsive-ajax-contact-form/148273" target="_self"><img alt="Quform" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/quform.png"></a></figure><p>Quform is a versatile AJAX contact form that can be adapted to be a registration form, quote form, or any other form needed. It even has the option to save data to a database.</p><p>Best features:</p><ul>
<li>three ready-to-use themes with six variations</li>
<li>ability to integrate into your theme design</li>
<li>ability to create complex form layouts</li>
<li>file uploads supported</li>
<li>and more</li>
</ul><p>With tons of other customizations available, <a href="https://codecanyon.net/item/quform-responsive-ajax-contact-form/148273" target="_self">Quform: Responsive AJAX Contact Form</a> is bound to keep the most discerning user happy.  </p><h3>2. <a href="https://codecanyon.net/item/php-form-builder/8790160" target="_self">PHP Form Builder</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/php-form-builder/8790160" target="_self"><img alt="PHP Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/php-form-builder.png"></a></figure><p>A CodeCanyon top seller, PHP Form Builder includes the jQuery live validation plugin. It enables you to build any form and connect a database to insert, update, or delete records. It also allows you to send your emails using customizable HTML/CSS templates.</p><p>Best features:</p><ul>
<li>over 50 pre-built templates included</li>
<li>highly customizable layout</li>
<li>accepts any HTML5 form elements</li>
<li>default options ready for Bootstrap 4</li>
<li>email sending with advanced options</li>
<li>Material Design and Foundation forms</li>
<li>and more</li>
</ul><p>With loads of options for creating a variety of elegant contact forms and extensive documentation to help you on your way, <a href="https://codecanyon.net/item/php-form-builder/8790160" target="_self">PHP Form Builder</a> is a top choice for PHP site owners.</p><h3>3. <a href="https://codecanyon.net/item/easy-forms-advanced-form-builder-and-manager/14176957" target="_self">Easy Forms: Advanced Form Builder and Manager</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/easy-forms-advanced-form-builder-and-manager/14176957" target="_self"><img alt="Easy Forms" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/easy-forms.png"></a></figure><p>Easy Forms features an advanced drag-and-drop PHP form builder that lets you design and develop forms quickly without any coding or programming skills. It also features amazing themes and templates and the ability to send instant notifications. Easy Forms also includes a form analytics dashboard where you get to see an overview of form statistics, including conversions.</p><p>Other features include:</p><ul>
<li>multi-language support</li>
<li>double opt-in for users</li>
<li>password protected forms</li>
<li>ability to export data</li>
<li>submission reports</li>
<li>advanced field validation</li>
<li>auto-responder and email notifications</li>
</ul><h3>4. <a href="https://codecanyon.net/item/just-forms-full/11301529" target="_self">Just Forms Full Version</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/just-forms-full/11301529" target="_self"><img alt="Just Forms" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/just-forms.png"></a></figure><p>Just Forms is a PHP framework that helps you create any form quickly and painlessly, without any programming knowledge. It features 120+ fully-functional forms, which you can build on to create your form. It has advanced features like the ability to save form data to a PDF and even create order forms with calculations.<br></p><p>Other features include:</p><ul>
<li>fully responsive</li>
<li>social icons and buttons</li>
<li>120+ AJAX PHP forms with client-side and server-side validation</li>
<li>100+ ready-to-use templates</li>
<li>ability to export data to a CSV file and PDF document</li>
<li>ability to save data to a database </li>
<li>PHP CAPTCHA</li>
<li>protection against XSS, CSRF, and SQL injection attacks</li>
<li>jQuery enhancements such as date picker, date and time picker, color picker, numeric stepper, sliders, and many more</li>
</ul><h3>5. <a href="https://codecanyon.net/item/ultimate-php-html5-ajax-contact-form/10017468" target="_self">Ultimate PHP, HTML5 and AJAX Contact Form</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/ultimate-php-html5-ajax-contact-form/10017468" target="_self"><img alt="Ultimate PHP Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/ultimate-php-.png"></a></figure><p>The Ultimate PHP form script lets you create an AJAX-based contact form with built-in Google reCAPTCHA to protect against spam robots. It also lets you create both custom and mandatory fields, as well as adding multiple validations on custom fields. This system also supports file uploads for formats such as PNG, MS Word, and others.</p><p>Some of its best features include:</p><ul>
<li>easy to install and mobile-friendly</li>
<li>SMTP authentication for user verification</li>
<li>custom thank you messages</li>
<li>AJAX-enabled (no page reloads for validation)</li>
<li>CSS animations </li>
<li>cross-site scripting (XSS) attack prevention</li>
</ul><h3>6. <a href="https://codecanyon.net/item/contactme-responsive-ajax-contact-form-html5-php/20256608" target="_self">ContactMe: Responsive AJAX Contact Form</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/contactme-responsive-ajax-contact-form-html5-php/20256608" target="_self"><img alt="ContactMe Responsive Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/contact-form.png"></a></figure><p><a href="https://codecanyon.net/item/contactme-responsive-ajax-contact-form-html5-php/20256608" target="_self">ContactMe</a> is another bestseller that is extremely customizable and allows site owners to create different versions of contact forms to fit their needs. Besides, it is fully responsive and mobile-friendly. If you're looking for some inspiration, it features 28 combinations of ready-to-use forms and seven concrete examples to spark your creativity. </p><p>This is a script to consider for your next project.</p><p>Best features:</p><ul>
<li>beautiful themes</li>
<li>easy to install</li>
<li>no database required</li>
<li>file attachment supported</li>
<li>secure</li>
<li>ability to set different language messages for each form</li>
</ul><h3>7. <a href="https://codecanyon.net/item/zigaform-php-form-builder-contact-survey/14889427" target="_self">Zigaform PHP Form Builder: Contact and Survey</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/zigaform-php-form-builder-contact-survey/14889427" target="_self"><img alt="Zigaform PHP Form Builder Contact and Survey" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/zigaform.jpg"></a></figure><p>If you're looking for a universal PHP form builder, <a href="https://codecanyon.net/item/zigaform-php-form-builder-contact-survey/14889427" target="_self">Zigaform</a> is the right script for the job. It can be integrated with Joomla, Magento, PrestaShop, and any other PHP website. It lets you organize your form elements with a grid system and even enables you to assign conditional logic to your forms. When it comes to customizations, you are spoilt for choice as Zigaform comes with 42+ elements, over 650 fonts, and 769+ font icons, ensuring your forms are as attractive as you need them to be.</p><p>Other features include:</p><ul>
<li>ability to filter and search submitted data</li>
<li>graphic charts of submitted data</li>
<li>notification email for users </li>
<li>file upload support</li>
<li>export form data to CSV and PDF </li>
<li>AJAX powered</li>
<li>spam protection</li>
</ul><p>Zigaform is the perfect script to create a contact form for any website.</p><h3>8. <a href="https://codecanyon.net/item/universal-form-builder/6648154" target="_self">Universal Form Builder</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/universal-form-builder/6648154" target="_self"><img alt="Universal Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/universal%20form%20bulder.jpg"></a></figure><p><a href="https://codecanyon.net/item/universal-form-builder/6648154" target="_self">Universal Form Builder</a> is easy to use and can be integrated into any website, including Joomla, Magento, OpenCart, and so on. It is the perfect script to build your forms in seconds with the aid of a drag-and-drop system. It also lets you change the appearance of any element, thus ensuring your forms are consistent with your website theme.</p><p>Main features include:</p><ul>
<li>multi-language support </li>
<li>fully responsive design</li>
<li>full skin customizer</li>
<li>background images</li>
<li>live preview during customizing<br>
</li>
<li>support for all browsers, including older versions of Internet Explorer</li>
<li>form and visit statistics</li>
</ul><h3>9. <a href="https://codecanyon.net/item/multipurpose-form-generator-contact-forms-feedback-forms-event-registration-and-many-more/19472616" target="_self">Multi-Purpose Form Generator</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/multipurpose-form-generator-contact-forms-feedback-forms-event-registration-and-many-more/19472616" target="_self"><img alt="Multi-Purpose Form Generator" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/multipurpose%20form.jpg"></a></figure><p>Just like the name suggests, <a href="https://codecanyon.net/item/multipurpose-form-generator-contact-forms-feedback-forms-event-registration-and-many-more/19472616" target="_self">Multi-Purpose Form Generator</a> is an advanced web application that provides an easy drag-and-drop interface to build simple or complex forms in seconds. It also includes the ability to integrate your forms with Google reCAPTCHA to prevent spam submissions and bots.</p><p>Other features include:</p><ul>
<li>ability to export form data</li>
<li>customizations according to your needs</li>
<li>Ajax-enabled forms</li>
<li>5+ different types of validation support</li>
<li>file upload support</li>
<li>preview forms before publishing</li>
<li>fully responsive</li>
</ul><h3>10. <a href="https://codecanyon.net/item/multistepform-php-multi-step-multipurpose-ajax-form/20133890" target="_self">Multi-Step Form</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/multistepform-php-multi-step-multipurpose-ajax-form/20133890" target="_self"><img alt="Multi-Step Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/multistep.jpg"></a></figure><p>The <a href="https://codecanyon.net/item/multistepform-php-multi-step-multipurpose-ajax-form/20133890" target="_self">Multi-Step Form</a> responsive PHP form script is suited for any business or organization. It is the perfect form to ensure that your visitors or clients will submit their quotes and also get valuable information regarding your business. Multi-Step Form uses PHP, jQuery, and Ajax, so no page reload will occur between steps. It also has the option of capturing the IP of the user and includes an anti-spam check.<br></p><p>Main features:</p><ul>
<li>no database required</li>
<li>attractive design</li>
<li>popup alert for validation errors</li>
<li>file attachment support</li>
<li>calendar date picker</li>
<li>security guaranteed</li>
<li>multi-language support</li>
</ul><h3>11. <a href="https://codecanyon.net/item/kontako-ajax-contact-form-with-styled-map/19534214" target="_self">KONTAKTO: AJAX Contact Form with Styled Map</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/kontako-ajax-contact-form-with-styled-map/19534214" target="_self"><img alt="KONTAKTO" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/KONTAKTO---Ajax-Contact-Form-with-Styled-Map.jpg"></a></figure><p><a href="https://codecanyon.net/item/kontako-ajax-contact-form-with-styled-map/19534214" target="_self">KONTAKTO</a> has only been around for a few years, but has already won a name for itself as one of the top-rated scripts in this category. The standout feature of this beautifully designed contact form is the stylish map with location pin that comes integrated into the form.</p><p>Best features<b>:</b></p><ul>
<li>required field validation</li>
<li>anti-spam with simple CAPTCHA math</li>
<li>defaults to PHP mail but an SMTP option is available</li>
<li>repeat submission prevention</li>
<li>and more</li>
</ul><p>Simple yet stylish, the <a href="https://codecanyon.net/item/kontako-ajax-contact-form-with-styled-map/19534214" target="_self">KONTAKTO: AJAX Contact Form With Styled Map</a> can be easily integrated with your HTML or PHP page and will be a fast favorite with many PHP site owners.</p><h3>12. <a href="https://codecanyon.net/item/contactplus-php-contact-form/19247626" target="_self">ContactPLUS+ PHP Contact Form</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/contactplus-php-contact-form/19247626" target="_self"><img alt="ConcatPlus PHP Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34574/image/Screenshot-2017-04-30-19.08.23.jpg"></a></figure><p><a href="https://codecanyon.net/item/contactplus-php-contact-form/19247626" target="_self">ContactPlus+</a> is another clean and simple contact form. It comes in three styles: a blank slate, unstyled version that you can build to suit your taste, a normal form with just the essential information needed on a contact form, and a longer form to accommodate an address.</p><p>Best features<b>:</b></p><ul>
<li>CAPTCHA verification</li>
<li>successful submission message</li>
<li>two styled and one unstyled version</li>
<li>and more</li>
</ul><p>If you’re looking for a clean and simple contact form that will integrate easily on your PHP website, <a href="https://codecanyon.net/item/contactplus-php-contact-form/19247626" target="_self">ContactPLUS+ PHP Contact Form</a> is the one for you.</p><h2>The Best PHP Scripts on CodeCanyon</h2><p>Explore thousands of the <a href="https://codecanyon.net/popular_item/by_category?category=php-scripts" target="_self">best and most useful PHP scripts ever created on CodeCanyon</a>. With a low-cost one-time payment, you can purchase one of these high-quality PHP scripts and improve your website experience for you and your visitors.</p><figure class="post_image"><img alt="Best PHP Scripts on CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34452/image/codecanyon%20popular%20php%20scripts%202.jpg"></figure><p>Here are a few of the best-selling and up-and-coming PHP scripts available on CodeCanyon for 2020.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/15-best-php-calendar-booking-events-scripts--cms-28635"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28635/preview_image/calendar.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">14 Best PHP Event Calendar and Booking Scripts</div>
<div class="roundup-block__author">Kyle Sloka-Frey</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-php-url-shortener-scripts--cms-28675"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28675/preview_image/url-browser.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">10 Best PHP URL Shortener Scripts</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/best-contact-form-php-scripts--cms-30639"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/30639/preview_image/contact%20form.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">12 Best Contact Form PHP Scripts for 2020</div>
<div class="roundup-block__author">Esther Vaati</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/comparing-the-best-php-form-builders--cms-32273"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/32273/preview_image/PHP.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Comparing the 5 Best PHP Form Builders</div>
<div class="roundup-block__author">Nona Blackman</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/create-beautiful-forms-with-php-form-builder--cms-33267"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/362/posts/33267/preview_image/t1.jpeg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create Beautiful Forms With PHP Form Builder</div>
<div class="roundup-block__author">Ashraff Hathibelagal</div></a></li>
</ul><p><br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-03-05T12:25:15+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Using Bootstrap to Create Material Design Web Apps]]></title>
      <link>//shineyrock.com/blog/read/using-bootstrap-to-create-material-design-web-apps</link>
      <guid>https://shineyrock.com/blog/read/using-bootstrap-to-create-material-design-web-apps#When:15:24:11Z</guid>
      <description><![CDATA[{body}]]></description>
      <dc:subject><![CDATA[]]></dc:subject>
      <dc:date>2019-11-28T15:24:11+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[20 Popular WordPress User Interface Elements]]></title>
      <link>//shineyrock.com/blog/read/20_popular_wordpress_user_interface_elements</link>
      <guid>https://shineyrock.com/blog/read/20_popular_wordpress_user_interface_elements#When:14:05:02Z</guid>
      <description><![CDATA[<p>User interface elements are one of the most important elements of your website's design. They help your users understand what your website is about and provide a way for them to interact with it. 
</p><p>Add a high-quality <a href="https://codecanyon.net/category/wordpress/interface-elements" target="_self">user interface plugin</a> to your WordPress website from CodeCanyon to give your users an enjoyable website experience. <br></p>
<figure class="post_image"><a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" target="_self"><img alt="Uber Menu User Interface Element" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/uber.png"></a>
    <figcaption>UberMenu is the most advanced menu WordPress plugin available on CodeCanyon</figcaption>
</figure>
<p>Your user interface can make or break your website. Even if you have a great layout, colors, and content, a poor user interface will ultimately drive away your visitors, and your business will suffer. By taking advantage of the plugins available on <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a>, you will be able to implement professionally built user interface elements to your website quickly and easily. </p>
<h2>The Best WordPress User Interface Plugins on CodeCanyon<br>
</h2>
<p><b>Browse through over 7,000 of the highest-quality </b><b>WordPress plugins ever created on CodeCanyon. With a low-cost one-time payment, you can purchase these high-quality WordPress plugins and improve your website experience for you and your visitors. </b><br></p>
<p>Here are some of the weekly best-selling user interface WordPress plugins on <a href="https://codecanyon.net/search/email%20woocommerce?sort=sales#content" target="_self">CodeCanyon</a> for 2020.</p>
<figure class="post_image"><a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self"><img alt="Best Selling WordPress Interface Elements" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/UI.jpg"></a>
<figcaption><a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">Browse CodeCanyon for the best-selling WordPress user interface plugins available</a></figcaption>
</figure><p>In today's digital world, website users are accustomed to seeing and interacting with modern user interfaces. The feature-rich user interface plugins that are offered in CodeCanyon will help you to create a visually appealing and fully functional website. <br></p>
<p>With the premium plugins offered on CodeCanyon, you will be able to:</p>
<ul>
    <li>create nested menus</li>
    <li>add customizable popups</li>
    <li>create eye-catching timelines</li>
    <li>showcase your media through sliders and carousels </li>
</ul>
<p>Head on over to <a href="https://codecanyon.net/category/wordpress/interface-elements?sort=sales" target="_self">CodeCanyon</a> and find the right user interface plugin now!</p>
<h2>Top 20 WordPress User Interface Plugins (From CodeCanyon for 2020)</h2>

<h3>
<span class="sectionnum">1.</span> <a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863" rel="external" target="_blank">Responsive FlipBook Plugin</a>
</h3>
<p>Deliver web content within a beautiful UI with this incredible WordPress plugin.</p>
<p>At first glance, the Responsive FlipBook Plugin looks like a nice way to display content with its cool bookshelf design. But it's <em>so</em> much more.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863" target="_self"><img alt="Responsive FlipBook Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/001.jpg" class="loaded"></a></figure>
<blockquote>“Create any FlipBook with ease. Comes with: bookshelf, zoom, print, PDF to FlipBook, table of content, hard covers, flat design, custom styles, lazy load.”</blockquote>
<p>Features include:</p>
<ul>
    <li>mobile zoom</li>
    <li>PDF wizard</li>
    <li>easy print</li>
    <li>lazy load</li>
    <li>and more!</li>
</ul>
<p>Create and present a complete collection of online eBooks with the <a href="https://codecanyon.net/item/responsive-flipbook-plugin/2372863" rel="external" target="_blank">Responsive FlipBook Plugin</a>. It's pretty amazing.</p>
<h3>
<span class="sectionnum">2.</span> <a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163" rel="external" target="_blank">Content Timeline - Responsive WordPress Plugin</a>
</h3>
<p>This WordPress user interface is unique, and I love it! The Content Timeline plugin is the perfect solution for a large array of content presentation types.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163" target="_self"><img alt="Content Timeline - Responsive WordPress Plugin for Displaying PostsCategories in a Sliding Timeline" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/002.jpg" class="loaded"></a></figure>
<p>Included features:</p>
<ul>
    <li>fully responsive with swipe function</li>
    <li>7 embedded script control methods</li>
    <li>11 settings for easy customization</li>
    <li>keyboard bindings</li>
    <li>and more!</li>
</ul>
<p>Your timeline doesn't have to be a single string, either. This plugin allows for more than one element per spot in your timeline.</p>
<p>The <a href="https://codecanyon.net/item/content-timeline-responsive-wordpress-plugin-for-displaying-postscategories-in-a-sliding-timeline/3027163" rel="external" target="_blank">Content Timeline</a> plugin is unique, beautifully designed, and the perfect WordPress user interface for presenting in a timeline format.</p>
<h3>
<span class="sectionnum">3.</span> <a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662" rel="external" target="_blank">UberChart—WordPress Chart Plugin</a>
</h3>
<p>If you want to share data visually, you'd be hard-pressed to find a better way to build and present it than the UberChart plugin.</p>
<p>It's highly customizable and ready to drop into your WordPress install.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662" target="_self"><img alt="UberChart - WordPress Chart Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/003.jpg" class="loaded"></a></figure>
<blockquote>“UberChart is an advanced WordPress Chart Plugin which gives you the ability to create a great variety of charts with exceptional customizability.”</blockquote>
<p>Its feature set includes:</p>
<ul>
    <li>240 customizable options for each chart</li>
    <li>embedded spreadsheet editor</li>
    <li>import and export data</li>
    <li>fully responsive</li>
</ul>
<p>And it includes ten different chart types:<br></p>
<ol>
    <li>Line</li>
    <li>Area</li>
    <li>Bar</li>
    <li>Horizontal Bar</li>
    <li>Pie</li>
    <li>Doughnut</li>
    <li>Radar</li>
    <li>Polar Area</li>
    <li>Scatter</li>
    <li>Bubble</li>
</ol>
<p><a href="https://codecanyon.net/item/uberchart-wordpress-chart-plugin/18480662" rel="external" target="_blank">UberChart—WordPress Chart Plugin</a> is impressive.<br></p>
<h3>
<span class="sectionnum">4.</span> <a href="https://codecanyon.net/item/slider-pro-responsive-wordpress-slider-plugin/253501" target="_self">Slider Pro</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/slider-pro-responsive-wordpress-slider-plugin/253501" target="_self"><img alt="Slider Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/afeaew.jpg"></a></figure>
<p>Slider Pro was built with user experience in mind. This plugin is a fully responsive and touch-enabled WordPress slider plugin that allows you to create professional and elegant sliders. Slider Pro focuses on simplicity and performance, while still providing a wide range of customization possibilities.</p>
<p>Here are a few of the plugin's features:</p>
<ul>
    <li>animated layers</li>
    <li>carousel layout</li>
    <li>infinite scrolling</li>
    <li>SEO friendly</li>
</ul>
<p>Check out the <a href="https://preview.codecanyon.net/item/slider-pro-responsive-wordpress-slider-plugin/full_screen_preview/253501?_ga=2.60164077.134840165.1579214067-1533195312.1578794662" target="_self">live preview</a> of Slider Pro.</p>
<h3>
<span class="sectionnum">5.</span> <a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719" rel="external" target="_blank">Progress Map WordPress Plugin</a>
</h3>
<p>The Progress Map WordPress Plugin is feature-rich. I most certainly can't do it justice with this short summary. The vision behind this WordPress user interface plugin is this:</p>
<blockquote>“The aim is to help users having websites like hotel listings, real estate listings, restaurant listings, job listings, store listings &amp; more… to list their locations on Google map and to easily navigate through the map using a carousel.”</blockquote>
<figure class="post_image"><a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719" target="_self"><img alt="Progress Map Wordpress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/005.jpg" class="loaded"></a></figure>
<p>And it delivers:</p>
<ul>
    <li>search filter and distance search</li>
    <li>Custom Post Type support</li>
    <li>custom markers<br>
</li>
    <li>70+ map styles</li>
    <li>geo-targeting<br>
</li>
    <li>retina ready</li>
    <li>and much, much more</li>
</ul>
<p><a href="https://codecanyon.net/item/progress-map-wordpress-plugin/5581719" rel="external" target="_blank">Progress Map WordPress Plugin</a> is easily one of the most robust map plugins you're going to find. </p><p>This plugin is <em>all</em> over the map.</p>
<h3>
<span class="sectionnum">6.</span> <a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380" rel="external" target="_blank">Slider Revolution Responsive WordPress Plugin</a>
</h3>
<p>When you need a slider—especially if you want an easy way to build it—you have to consider the Slider Revolution Responsive WordPress Plugin.</p>
<p>Animations, color pickers, layers—it's got them all baked in.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380" target="_self"><img alt="Slider Revolution Responsive WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/006.jpg" class="loaded"></a></figure>
<p>Slide types include:</p>
<ul>
    <li>social media feeds<br>
</li>
    <li>media galleries</li>
    <li>hero blocks</li>
    <li>carousels</li>
    <li>sliders</li>
    <li>and more</li>
</ul>
<p>The number one feature that makes this slider appealing is the powerful visual editor. Sliders are sliders, but the <a href="https://codecanyon.net/item/slider-revolution-responsive-wordpress-plugin/2751380" rel="external" target="_blank">Slider Revolution Responsive WordPress Plugin</a> brings a complete, robust slide designer suite.<br></p>
<h3>
<span class="sectionnum">7.</span> <a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518" rel="external" target="_blank">Slick Menu—Responsive WordPress Vertical Menu</a>
</h3>
<p>Slick. Responsive. Vertical. Menu.</p>
<p>The Slick Menu is exactly that, with a little extra on the side.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518" target="_self"><img alt="Slick Menu - Responsive WordPress Vertical Menu" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/007.jpg" class="loaded"></a></figure>
<blockquote>“Slick Menu is more than just a menu plugin. It can be used to create unlimited multi level push menus or content sidebars with rich content, multiple style options and animation effects.”</blockquote>
<p>Customize your:</p>
<ul>
    <li>background colors</li>
    <li>custom fonts</li>
    <li>patterns</li>
    <li>overlays</li>
    <li>images<br>
</li>
    <li>videos</li>
    <li>and more</li>
</ul>
<p>Each level is independently customizable, making it super easy to build great WordPress user interfaces without expensive design apps or code knowledge. </p>
<p><a href="https://codecanyon.net/item/slick-menu-responsive-wordpress-vertical-menu/17723518" rel="external" target="_blank">Slick Menu—Responsive WordPress Vertical Menu</a> is an awesome option for vertical menus and more!<br></p>
<h3>
<span class="sectionnum">8.</span> <a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256" rel="external" target="_blank">Cool Timeline Pro—WordPress Timeline Plugin</a>
</h3>
<p>Add a timeline to blog posts, organization history pages, and more with the Cool Timeline Pro plugin. Create both horizontal and vertical timelines with its built-in designs and beautiful animation effects.
</p><figure class="post_image"><a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256" target="_self"><img alt="Cool Timeline Pro - WordPress Timeline Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/008.jpg" class="loaded"></a></figure>
<p>Features include:</p>
<ul>
    <li>convert any post type into a timeline</li>
    <li>pagination for long timelines</li>
    <li>create multiple timelines</li>
    <li>add icons<br>
</li>
    <li>and more</li>
</ul>
<p>Simple, clean, and flexible.</p>
<p>The <a href="https://codecanyon.net/item/cool-timeline-pro-wordpress-timeline-plugin/17046256" rel="external" target="_blank">Cool Timeline Pro—WordPress Timeline Plugin</a> is a great way to build a timeline from your current content or to create a new, standalone timeline to help communicate to your reader.<br></p>
<h3>
<span class="sectionnum">9.</span> <a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671" rel="external" target="_blank">LoftLoader Pro—Preloader Plugin for WordPress</a>
</h3>
<p>Sometimes you need more time for something to load. Videos? Lots of HD images?</p>
<p>Easily add a loading animation to your pages with the LoftLoader Pro Preloader Plugin for WordPress.</p>
<p>It's pretty fancy.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671" target="_self"><img alt="LoftLoader Pro - Preloader Plugin for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/009.jpg" class="loaded"></a></figure>
<p>Features include:</p>
<ul>
    <li>adjust minimum load time</li>
    <li>18 CSS3 animations</li>
    <li>works on all devices</li>
    <li>built-in editor<br>
</li>
    <li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/loftloader-pro-preloader-plugin-for-wordpress/17339671" rel="external" target="_blank">LoftLoader Pro</a> plugin makes it easy to add an animated loading screen—no coding required.<br></p>
<h3>
<span class="sectionnum">10.</span> <a href="https://codecanyon.net/item/superfly-responsive-wordpress-menu-plugin/8012790" rel="external" target="_blank">Superfly—Responsive WordPress Menu Plugin</a>
</h3>
<p>Replace your current WordPress menu or enhance it with the Superfly responsive menu plugin. This plugin is power packed and easy to use.
</p><figure class="post_image"><a href="https://codecanyon.net/item/superfly-responsive-wordpress-menu-plugin/8012790" target="_self"><img alt="Superfly Responsive WordPress Menu Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/010.jpg" class="loaded"></a></figure>
<blockquote>“Superfly is a responsive WordPress menu plugin that generates space efficient vertical push/sliding/static navigation, icon toolbar or fullscreen menu on your choice.”</blockquote>
<p>Menu design options include:</p>
<ul>
    <li>side, skewed, and fullscreen menus</li>
    <li>image backgrounds</li>
    <li>static or anchored</li>
    <li>icon bar</li>
    <li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/superfly-responsive-wordpress-menu-plugin/8012790" rel="external" target="_blank">Superfly—Responsive WordPress Menu Plugin</a> also includes display options, making it super easy to build the right menu for the right user interface.</p>
<h3>
<span class="sectionnum">11.</span> <a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673" rel="external" target="_blank">Ultra WordPress Admin Theme</a>
</h3>
<p>There's customizing the WordPress Admin. And then there's the Ultra WordPress Admin Theme.</p>
<p>This WordPress user interface takes Admin customizations to a <em>whole new level</em>.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673" target="_self"><img alt="Ultra WordPress Admin Theme" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/011.jpg" class="loaded"></a></figure>
<p>White label branding is just the start of it:</p>
<ul>
    <li>admin menu management</li>
    <li>create your own theme</li>
    <li>import/export settings</li>
    <li>and much, much more</li>
</ul>
<p>From the login screen to the top admin bar, the <a href="https://codecanyon.net/item/ultra-wordpress-admin-theme/9220673" rel="external" target="_blank">Ultra WordPress Admin Theme</a> makes the entire WordPress Admin experience fully customizable.</p>
<h3>
<span class="sectionnum">12.</span> <a href="https://codecanyon.net/item/different-menu-in-different-pages/7857908" rel="external" target="_blank">Different Menu in Different Pages</a>
</h3>
<p>If you need different menus in different pages, you'll want to use Different Menu in Different Pages.</p>
<p>It also supports bbPress, WPML, WooCommerce, and BuddyPress.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/different-menu-in-different-pages/7857908" target="_self"><img alt="Different Menu in Different Pages" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/012.jpg" class="loaded"></a></figure>
<p>Easily create multiple menus and locations based on:</p>
<ul>
    <li>custom taxonomies<br>
</li>
    <li>categories</li>
    <li>pages</li>
    <li>posts</li>
    <li>and tags</li>
</ul>
<p>It also includes a shortcode option to show your menu within content as well.</p>
<p>The <a href="https://codecanyon.net/item/different-menu-in-different-pages/7857908" rel="external" target="_blank">Different Menu in Different Pages</a> plugin is lightweight and proves useful in any WordPress toolbox.<br></p>
<h3>
<span class="sectionnum">13.</span> <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" rel="external" target="_blank">Popup Plugin for WordPress - Layered Popups</a>
</h3>
<p>As much as I hate popups, sometimes you just need a popup. The Popup Plugin for WordPress is the easiest way to build and display popups on your WordPress site.</p>
<figure class="post_image"><img alt="Popup Plugin for WordPress - Layered Popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/013.jpg" class="loaded"></figure>
<blockquote>“[The] internet is full of boring popups. So, it’s a time to break this trend.”</blockquote>
<p>Features included, but certainly not limited to:</p>
<ul>
    <li>jQuery and CSS3 animations</li>
    <li>social network integration</li>
    <li>A/B campaign stats</li>
    <li>200+ popup library</li>
    <li>mobile friendly<br>
</li>
    <li>and much, much more</li>
</ul>
<p>Popup types include:</p>
<ul>
    <li>
<code class="inline">onLoad</code> popup</li>
    <li>
<code class="inline">onScroll</code> popup</li>
    <li>
<code class="inline">onClick</code> popup</li>
    <li>
<code class="inline">onExit</code> popup</li>
    <li>
<code class="inline">onIdle</code> popup</li>
</ul>
<p>And also features:</p>
<ul>
    <li>sidebar widget</li>
    <li>link locker</li>
    <li>inline form</li>
    <li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" rel="external" target="_blank">Popup Plugin for WordPress—Layered Popups</a> is a robust solution that looks great to users and proves useful for admins.<br></p>
<h3>
<span class="sectionnum">14.</span> <a href="https://codecanyon.net/item/the-team-pro-team-showcase-wordpress-plugin/17521235" rel="external" target="_blank">The Team Pro—Team Showcase WordPress Plugin</a>
</h3>
<p>The Team Pro team showcase WordPress plugin claims to be “the most versatile WordPress plugin available to create and manage your Team page.”</p>
<p>I think they're right.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/the-team-pro-team-showcase-wordpress-plugin/17521235" target="_self"><img alt="The Team Pro - Team Showcase WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/014.jpg" class="loaded"></a></figure>
<p>Style options include:</p>
<ul>
    <li>slide-ins<br>
</li>
    <li>drawer</li>
    <li>circles</li>
    <li>modal</li>
    <li>table</li>
    <li>cards</li>
    <li>grid</li>
    <li>list</li>
</ul>
<p>With these 8 presets, over 20 style options, and clean designs, your team never looked so good with <a href="https://codecanyon.net/item/the-team-pro-team-showcase-wordpress-plugin/17521235" rel="external" target="_blank">The Team Pro—Team Showcase WordPress Plugin</a>.</p>
<h3>
<span class="sectionnum">15.</span> <a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" rel="external" target="_blank">UberMenu—WordPress Mega Menu Plugin</a>
</h3>
<p>This is a WordPress user interface element that I really like but can be difficult to implement.</p>
<p>But it's easy with the UberMenu WordPress mega menu plugin!</p>
<figure class="post_image"><a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" target="_self"><img alt="UberMenu - WordPress Mega Menu Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/015.jpg" class="loaded"></a></figure>
<p>Your WordPress menu will never be the same again:</p>
<ul>
    <li>enhanced mobile experience</li>
    <li>easily add images and icons</li>
    <li>build beautiful menu layouts</li>
    <li>columns, rows, maps, forms, and more</li>
</ul>
<p>Tabbed submenus? Google Fonts? Vertical or horizontal? <a href="https://codecanyon.net/item/ubermenu-wordpress-mega-menu-plugin/154703" rel="external" target="_blank">UberMenu—WordPress Mega Menu Plugin</a> has it.</p>
<h3>
<span class="sectionnum">16.</span> <a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927" target="_self">Accordion Slider</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927" target="_self"><img alt="Accordion Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/acc.jpg"></a></figure>
<p>Accordion Slider is a full-featured and touch-enabled accordion slider plugin. It offers a modern, intuitive, and engaging user experience. The accordion will look great on any website!</p>
<p>Here is a list of this plugin's top features:</p>
<ul>
    <li>pagination</li>
    <li>animated layers</li>
    <li>caching</li>
    <li>keyboard and mouse navigation</li>
    <li>lazy loading</li>
</ul>
<p>Find out how this plugin will look on your website by viewing the <a href="https://preview.codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/full_screen_preview/7341927?_ga=2.192419242.1654045113.1579214111-1533195312.1578794662" target="_self">live preview</a>.</p>
<h3>
<span class="sectionnum">17.</span> <a href="https://codecanyon.net/item/white-label-wordpress-plugin-alter/17567303" target="_self">Alter 2</a>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/white-label-wordpress-plugin-alter/17567303" target="_self"><img alt="WpAlter 2" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/give.jpg"></a></figure>
<p>This plugin is a bit different than all the other user interface plugins as it allows you to customize your WP dashboard instead of the front end of your website. This plugin can help you create a more visually appealing and clutter-free dashboard that will help you be more productive. Give the old WP dashboard interface an upgrade with this handy plugin!</p>
<p>Take a look at the Alter 2 <a href="https://codecanyon.net/item/white-label-wordpress-plugin-alter/17567303" target="_self">demo video</a> to see how you can transform the back-end of your website. </p>
<h3>18. <a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018" target="_self">Team Builder</a><br>
</h3>
<figure class="post_image"><a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018" target="_self"><img alt="Team Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/team%20builder.jpg"></a></figure>
<p>Team Builder allows you to build a team showcase and display it on your website. Not only can you create a creative and eye-catching team page, but you can also create testimonials or logo showcases. <br></p>
<p>Here are a few notable features of this plugin:</p>
<ul>
    <li>grid, slider, table, and widget support</li>
    <li>drag and drop builder</li>
    <li>skill and stat bars</li>
    <li>social icons bar</li>
</ul>
<p>Add this plugin to your website <a href="https://codecanyon.net/item/team-builder-meet-the-team-wordpress-plugin/12723018" target="_self">today</a>!</p>
<h3>
<span class="sectionnum">19.</span> <a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" rel="external" target="_blank">Testimonials Showcase—WordPress Plugin</a>
</h3>
<p>Display and manage your client, customer, and supporter testimonials easily with the Testimonials Showcase WordPress plugin.</p>
<p>Testimonials never looked so good.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" target="_self"><img alt="Testimonials Showcase - WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/019.jpg" class="loaded"></a></figure>
<p>Features include:</p>
<ul>
    <li>over 15 layout customization options</li>
    <li>grid or slider layout</li>
    <li>star rating system</li>
    <li>and more</li>
</ul>
<p>The <a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" rel="external" target="_blank">Testimonials Showcase—WordPress Plugin</a> also includes front-end submissions.</p>
<h3>
<span class="sectionnum">20.</span> <a href="https://codecanyon.net/item/wp-logo-showcase-responsive-slider-pro/18199566" rel="external" target="_blank">WP Logo Showcase Responsive Slider Pro</a>
</h3>
<p>It's time to amp up your portfolio page. It's time for WP Logo Showcase Responsive Slider Pro.</p>
<p>This WordPress plugin is designed to showcase a designer's work, but it can also be used to display client and partner logos or anything else that fits within this type of user interface.</p>
<figure class="post_image"><a href="https://codecanyon.net/item/wp-logo-showcase-responsive-slider-pro/18199566" target="_self"><img alt="WP Logo Showcase Responsive Slider Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/29004/image/020.jpg" class="loaded"></a></figure>
<p>This responsive slider features:</p>
<ul>
    <li>includes both a slider and a grid widget</li>
    <li>tooltip and custom animation options</li>
    <li>over 15 predefined designs</li>
    <li>drag and drop admin</li>
    <li>and more</li>
</ul>
<p>Some sliders try to offer everything, while the <a href="https://codecanyon.net/item/wp-logo-showcase-responsive-slider-pro/18199566" rel="external" target="_blank">WP Logo Showcase Responsive Slider Pro</a> focuses on one particular niche and style of slider and nails it perfectly.</p>
<h2>5 Free WordPress User Interface Plugins for Download in 2020</h2>
<p>By purchasing a premium user interface plugin, you will receive the best plugins on the market. The premium plugins will contain more features and come with customer support. If you are serious about giving your users the best possible website experience, these premium plugins should be your first choice. <br></p>
<p>However, your current budget could restrict you from purchasing one of these premium user interface plugins. That is why I have collected a list of five of the best free WordPress user interface plugins available.</p>
<h3>1. <b><a href="https://wordpress.org/plugins/ank-google-map/" target="_self">Google Map</a></b>
</h3>
<p>This simple and lightweight plugin will help you display Google maps on your website. The map is fully responsive, customizable, and won't display any ads. This is a go-to plugin if you need to display maps on your website. </p>
<h3>
<strong>2. </strong><a href="https://wordpress.org/plugins/nextgen-gallery/" target="_self">NextGEN Gallery</a>
</h3>
<figure class="post_image"><img alt="NextGEN Gallery" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/adff.jpg"></figure>
<p>NextGEN Gallery is a simple, easy-to-use photo gallery plugin that can display your images beautifully on your website. Included is a complete management system with the ability to batch upload photos, import metadata, edit thumbnails, and group galleries into albums.<br></p>
<h3>
<strong>3. </strong><a href="https://wordpress.org/plugins/slicknav-mobile-menu/" target="_self">SlickNav Mobile Menu</a>
</h3>
<p>The menus on your website are the gateway to your website's content. If your menus aren't configured for mobile users, then you are not catering to a large part of your website's traffic. The SlickNav Mobile Menu will allow you to create a menu that works perfectly for mobile users. </p>
<h3>
<strong>4. </strong><a href="https://wordpress.org/plugins/eds-responsive-menu/" target="_self">eDS Responsive Menu</a>
</h3>
<figure class="post_image"><img alt="eDS Responsive Menu" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/g.png"></figure>
<p>eDS Responsive Menu allows you to easily and intuitively create a slick and professional WordPress menu. You can generate vertical and horizontal navigation, an icon toolbar, or a fullscreen menu. This makes navigation much more user-friendly. Give this powerful plugin a try on your WordPress website!</p>
<h3>
<strong>5. </strong><a href="https://wordpress.org/plugins/poptin/" target="_self">Poptin</a>
</h3>
<p>This free plugin is a high-quality exit-intent popup builder and lead generation platform for your website. You can create beautiful popups, opt-ins, and forms within minutes! Grow your audience with this complete tool. </p>
<h2>How to Add a Popup to Your Website With Layered Popups</h2>
<p>Popups are an integral part of any website. They are a great tool to use to generate sales and collect email addresses without being intrusive and while fitting into the design of the website. These popups help shape a user interface that your visitors will be accustomed to and receptive to.</p>
<p>In our example, we are going to be the owners of a clothing eCommerce store that is looking to let our visitors know that there is a sale on one of our shirts to help with our sales. We will create a center screen popup that will appear on our entire website so users can quickly spot this sale and take action on it.</p>
<p>Once you have installed the Layered Popups plugin, head on over to <strong>WP Dashboard &gt; Layered Popups &gt; Create Popup</strong>. This will take us to the main popup editor, where we can begin the popup creation process. We will first type in "Shirt Popup" in the <strong>title</strong> editor.  Next, we will adjust the <strong>position</strong> of the popup to be in the center so the user is sure to see the sale ad. </p>
<figure class="post_image"><img alt="Layered Popups Position of Popup" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/Screen%20Shot%202020-01-16%20at%2017.18.41.png"></figure>
<p>Next, we will create the actual popup. Scroll down to the <strong>Popup Constructor </strong>section and click on the <strong>+Add Layer</strong> widget on the right-hand side of the screen. You will then be presented with a menu of options to choose from, and we will select the <strong>Image</strong> tab. We have a specific graphic that was created for this particular sale, so we will add that from our media library by clicking the <strong>Media Library</strong> button.</p>
<figure class="post_image"><img alt="Layered Popups Adding Image to the popup" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/Screen%20Shot%202020-01-16%20at%2017.22.20.png"></figure>
<p>Once our image is added, we will add a URL to the popup so the user will be redirected to the product page of the shirt we have for sale. We will enter the product URL in the <strong>URL</strong> field in the <strong>Image</strong> editor. Finally, click the <strong>Create Layer</strong> button at the bottom of the editor. Our popup is now ready to go. Scroll down to the bottom of the page and click the <strong>Save Popup Details </strong>button.</p>
<p>Next, we need to activate the popup on our entire website. Navigate to <strong>WP Dashboard &gt; Layered Popups &gt; Targeting. </strong>Click the <strong>Create</strong> link in the <strong>Active Targets </strong>field. The edit target editor will now be displayed, and we will select <strong>Shirt Popup</strong> from the drop-down menu called <strong>Desktop</strong>. This will activate the plugin on the entire website. Scroll down to the bottom of the menu and click the <strong>Save Target</strong> button. <br></p><p>That's it! Our popup sale ad will now be displayed on the entire website!<br></p>
<figure class="post_image"><img alt="Layered Popups Sale Advertisement" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34520/image/yesss.png"></figure>
<h2>Install a User Interface WordPress Plugin Now! <br>
</h2>
<p>Whether you are running an eCommerce website or a blog, you will need to have a user-friendly user interface that gives your website viewers a modern website browsing experience. CodeCanyon offers the most <a href="https://codecanyon.net/category/wordpress/interface-elements" target="_self">complete user interface element plugins</a> on the web to help give your website the best tools available to succeed.</p>
<p>You can integrate advanced menus, sliders, timelines, graphs, and much more from all of the premium plugins available on <a href="https://codecanyon.net/category/wordpress/interface-elements" target="_self">CodeCanyon</a>.</p>
<p>Remember to browse through the thousands of other <a href="https://codecanyon.net/category/wordpress" target="_self">high-quality WordPress plugins</a> on CodeCanyon that can help take your website to the next level. This massive collection contains all types of plugins, including advertising, newsletter, eCommerce, and social network plugins.<br></p>
<p>Find the perfect <a href="https://codecanyon.net/category/wordpress" target="_self">WordPress plugin </a>to give your website and business the best chance to succeed. </p>
<figure class="post_image"><a href="https://themeforest.net/popular_item/by_category?category=wordpress" target="_self"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34347/image/themeforest%20popular%20wordpress%20themes.jpg"></a></figure>
<p>Here are a few of the best-selling and up-and-coming WordPress themes and plugins available for 2020.</p>
<ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/15-best-wordpress-portfolio-themes-for-creatives--cms-26277"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/26277/preview_image/wp_portfolio.jpg"><div class="roundup-block__primary-category topic-webdesign">Inspiration</div>
<div class="roundup-block__content-title">23+ Best WordPress Portfolio Themes for Creatives</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/8-best-wordpress-slider-carousel-plugins-of-2017--cms-28592"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28592/preview_image/sliders%20(Case%20Conflict).jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">17 Best WordPress Slider &amp; Carousel Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/20-best-wordpress-calendar-plugins-and-widgets--cms-25906"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/25906/preview_image/calendar-c.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">20 Best WordPress Calendar Plugins and Widgets</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-responsive-wordpress-themes--cms-29973"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29973/preview_image/rwd.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">28+ Best Responsive WordPress Themes (For Sites in 2020)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-visual-composer-addons-extensions-of-2017--cms-28733"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WPBakery Page Builder (Visual Composer) Addons &amp; Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/best-wordpress-themes-for-consultants-coaches--cms-29404"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/29404/preview_image/mentor-coaching.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Themes</div>
<div class="roundup-block__content-title">25+ Best Coaching &amp; Consulting WordPress Themes (2020)</div>
<div class="roundup-block__author">Brenda Barron</div></a></li>
</ul><p></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-02-25T14:05:02+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[10 Best WordPress Star Rating Plugins]]></title>
      <link>//shineyrock.com/blog/read/10_best_wordpress_star_rating_plugins</link>
      <guid>https://shineyrock.com/blog/read/10_best_wordpress_star_rating_plugins#When:13:27:10Z</guid>
      <description><![CDATA[<p>Star ratings are used by websites to review all kinds of products and services. You can use them to rate pretty much anything your users are interested in: a movie, the food in a restaurant, the quality of service provided by a mechanic, etc.</p><p>One of the reasons star ratings are so popular is that they allow users to quickly determine the quality of a product or service based on the experience of people who have used it.</p><p>It is also very common to find businesses asking people to rate their services or products. This is because people are more likely to buy something if they see real reviews from other people who have actually used it.</p><p>If your website sells something, it is a good idea to include a star rating system somewhere so that your customers can review your products.</p><p>In this post, I'll list the ten best WordPress star rating plugins that you can use today.</p><h2>WordPress Star Rating Plugins on CodeCanyon</h2><p>There are currently about <a href="https://codecanyon.net/category/wordpress?term=star%20rating" rel="external" target="_blank">75 premium WordPress star rating plugins</a> available on CodeCanyon. All of them serve some unique purpose, like adding a star rating field to different forms or allowing users to review a product or service on your website.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress?term=star%20rating" rel="external" target="_blank"><img alt="WordPress Star Rating Plugins CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/star_rating_plugin_codecanyon.png"></a></figure><p>The price for some of these star rating plugins starts from as low as $7. The fact that you get free lifetime updates and six months of free support makes buying them a very good deal.</p><h2>Best Star Rating Plugins on CodeCanyon</h2><p>Here is a brief review of the best star rating plugins that you can buy on CodeCanyon:</p><h3><a href="https://codecanyon.net/item/stellar-star-rating-plugin-for-wordpress/25336975" rel="external" target="_blank" title="Link: https://codecanyon.net/item/stellar-star-rating-plugin-for-wordpress/25336975">Stellar—Star Rating Plugin for WordPress</a></h3><p>Stellar is a simple star rating plugin for WordPress that gives you the option to create and save ratings for each WordPress entry like a post, page, or product.</p><figure class="post_image"><a href="https://codecanyon.net/item/stellar-star-rating-plugin-for-wordpress/25336975" rel="external" target="_blank" title="Link: https://codecanyon.net/item/stellar-star-rating-plugin-for-wordpress/25336975"><img alt="Stellar Star Rating Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/stellar.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/stellar.png"></a></figure><p>The review microdata is also visible in search results, so you will get a boost in visibility. It is fully compatible with all popular WordPress themes.</p><p>It comes with a lot of customization options. You can easily change the color, size, and shape of icons that are used to display the rating to users. The rating assigned to each post or page is also visible on the search page.</p><p>The plugin has cross-browser compatibility and does not rely on jQuery to work properly.</p><h3><a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" rel="external" target="_blank" title="Link: https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139">Testimonials Showcase WordPress Plugin</a></h3><p>This plugin gives you an easy way to display testimonials, reviews, and quotes from users in an attractive layout.</p><figure class="post_image"><a href="https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139" rel="external" target="_blank" title="Link: https://codecanyon.net/item/testimonials-showcase-wordpress-plugin/6588139"><img alt="Testimonials Showcase" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/testimonial_showcase.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/testimonial_showcase.png"></a></figure><p>It is ideal for situations where you have to display testimonials from your clients and customers. You can also use it to display reviews for different products on your website.</p><p>It is very flexible in terms of customization options and offers a responsive design. It's compatible with rich snippets and structured data used by search engines to display reviews and ratings in search results.</p><p>The reviews and testimonials can be showcased on the front-end either as a grid or as a slider. Each of these layouts comes with its own settings to control the look and feel of the reviews.</p><p>There are five different themes that you can use with this plugin: rounded speech bubbles, flat speech bubbles, flat card box, quote marks, or simple separator.</p><h3><a href="https://codecanyon.net/item/bne-testimonials-pro-wordpress-testimonials-and-reviews/20475779" rel="external" target="_blank">BNE Testimonials Pro</a></h3><p>You can use the WordPress BNE Testimonials Pro plugin to display testimonials and reviews anywhere on your website.</p><figure class="post_image"><a href="https://codecanyon.net/item/bne-testimonials-pro-wordpress-testimonials-and-reviews/20475779" rel="external" target="_blank" title="Link: https://codecanyon.net/item/bne-testimonials-pro-wordpress-testimonials-and-reviews/20475779"><img alt="BNE Testimonials Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/bnd_testimonials_pro.png"></a></figure><p>The testimonials and reviews are made up of multiple elements like a featured image of the person or company writing the review, the actual review content, and additional fields for the name, website link, and the rating from the reviewer.</p><p>The plugin offers a large variety of customization and layout options for the reviews. You can choose from four different layouts: list, slider, thumbnail slider, and masonry grid. There are also four different themes: simple, default, bubbles, and cards.</p><p>The star ratings incorporate Schema.org tags to make sure that the rich snippets for the review are visible in search results.</p><p>One big advantage of using this plugin is that it offers the ability to import reviews from other platforms like Facebook, Google, and Yelp. So, if your users have written any reviews about your business on Facebook, they will be automatically pulled and added to your own website.</p><h3><a href="https://codecanyon.net/item/gravity-forms-star-rating-field/19647571" rel="external" target="_blank">Gravity Forms Star Rating Field</a></h3><p>This Gravity Forms Star Rating Field plugin allows you to add star rating fields to all your Gravity Forms.</p><figure class="post_image"><a href="https://codecanyon.net/item/gravity-forms-star-rating-field/19647571" rel="external" target="_blank"><img alt="Gravity Forms Star Rating Field" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/gravity_form.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/gravity_form.png"></a></figure><p>You can choose from 14 different styles for the star rating field. There are also some other customization options like showing the current rating value on hover or click and showing some custom rating text in tooltips. Customize the rating label and the value saved in the database.</p><h3><a href="https://codecanyon.net/item/contact-form-7-star-rating-field/20561177" rel="external" target="_blank" title="Link: https://codecanyon.net/item/contact-form-7-star-rating-field/20561177">Contact Form 7 Star Rating Field</a></h3><p>This Contact Form 7 Star Rating Field plugin offers the same functionality provided by the previous plugin. However, it has been developed for Contact Form 7.</p><figure class="post_image"><a href="https://codecanyon.net/item/contact-form-7-star-rating-field/20561177" rel="external" target="_blank"><img alt="Contact Form 7 Star Rating Field" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/contact_form_7.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/contact_form_7.png"></a></figure><p>This lets you add star rating fields to any of your Contact Form 7 forms. There are 12 different customization options available.</p><p>It works with all versions of the Contact Form 7 plugin, and you can also make the rating field required for form submission. The plugin also allows you to set a default rating value for the field.</p><p>One more feature that you will find useful is the ability to include rating results in an email using a shortcode.</p><h3><a href="https://codecanyon.net/item/rating-form/10357679" rel="external" target="_blank">Rating Form</a></h3><p>This is one of the best WordPress star rating plugins on CodeCanyon. It is highly rated and receives updates at regular intervals. Each update also adds a lot of new features to the plugin.</p><figure class="post_image"><a href="https://codecanyon.net/item/rating-form/10357679" rel="external" target="_blank"><img alt="Rating Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/rating_form.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/rating_form.png"></a></figure><p>It comes with a long list of features. For example, the plugin works perfectly with right-to-left (RTL) languages and cache plugins. You can also edit previously submitted ratings, allowing people to change their reviews at a later date.</p><p>The ratings are updated using AJAX, and a nice spinning animation is shown while the plugin updates the rating in the database. The results are immediately visible on the webpage once a user submits the ratings.</p><p>You can choose from different rating images provided by the plugin or upload your own custom images. You can add star ratings to any post or webpage using shortcodes. It is also possible to use the ratings with comments by using the <code class="inline">comment_id</code> attribute in shortcodes.</p><h3><a href="https://codecanyon.net/item/ap-custom-testimonials-for-wordpress/16350828" rel="external" target="_blank" title="Link: https://codecanyon.net/item/ap-custom-testimonials-for-wordpress/16350828">AP Custom Testimonial Pro</a></h3><p>The AP Custom Testimonial Pro plugin also allows you to showcase reviews and testimonials from your clients and customers on your website.</p><figure class="post_image"><a href="https://codecanyon.net/item/ap-custom-testimonials-for-wordpress/16350828" rel="external" target="_blank"><img alt="AP Custom Testimonial Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/ap_custom_testimonial.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/ap_custom_testimonial.png"></a></figure><p>This plugin offers a lot of options for displaying the testimonials on the site. You can also create your own custom layout to showcase the testimonials based on some predefined templates.</p><p>The plugin comes with 12 different layouts to display the user reviews. It also offers some other unique features like embedding videos in the testimonials or only displaying certain user reviews based on their ID. You can also optionally add links to the social media accounts of clients who write a review.</p><p>The plugin gives you granular control over all aspects of the review. This includes things like the image border color, review title color, review content color, etc.</p><p>The shortcode generator that comes with this plugin makes it incredibly easy for you to create custom shortcodes to display the testimonials exactly the way you want.<br></p><h2>Free WordPress Star Rating Plugins</h2><p>Before listing some free WordPress star rating plugins, I would like to mention that using premium plugins comes with its own advantages.</p><p>The premium plugin developers are more likely to provide regular updates and solve any issues that you might be facing with the use of these plugins. This is especially true for the best-sellers on CodeCanyon.</p><p>Also, the premium plugins generally offer a more polished design to give your website a professional look.</p><p>But sometimes a free plugin is the right choice for a limited budget—I've pulled together a few of these free plugins below.</p><h3>Rate My Post—WP Post Rating</h3><p>People who are only looking for a WordPress star rating plugin so that they can allow users to rate their posts and pages should consider using the <a href="https://wordpress.org/plugins/rate-my-post/" rel="external" target="_blank" title="Link: https://wordpress.org/plugins/rate-my-post/">Rate My Post</a> WordPress plugin. It will allow you to easily add ratings to all your posts and pages using shortcodes.</p><h3>Site Reviews</h3><p>This plugin is more suited for people who want to allow users to provide reviews in a manner similar to websites like TripAdvisor or Yelp. It comes with a nice set of features that you can see on the <a href="https://wordpress.org/plugins/site-reviews/" rel="external" target="_blank">plugin description</a> page.</p><figure class="post_image"><img alt="Site Reviews" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/site_reviews.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1251/posts/34474/image/site_reviews.png"></figure><h3>Yasr—Yet Another Stars Rating</h3><p><a href="https://wordpress.org/plugins/yet-another-stars-rating/" rel="external" target="_blank" title="Link: https://wordpress.org/plugins/yet-another-stars-rating/">This plugin</a> comes with two different types of ratings. The first type is provided by the post author. This is ideal for websites that publish reviews of different products and services. The second type gives your visitors the ability to vote.</p><h2>Best Practices to Keep in Mind When Using Star Rating Plugins</h2><p>The ultimate goal of using these star rating plugins is to help your website visitors. So here are some guidelines that you can follow to use them in a way that benefits the visitors. <br></p><h3>1. Place Ratings Only in Important Places</h3><p>If you are reviewing a product or service for your visitors, make sure that you don't place the same ratings in ten different places. If you are writing a detailed review of the product, it is acceptable to provide different ratings for different aspects like the design, quality, pricing, etc. However, don't use the same overall 8/10 rating in six different places in a post.<br></p><h3>2. Use Rich Snippet Data With the Correct Attributes</h3><p>Search engines usually display star ratings in their search results only when they think that it will provide some useful information. For example, let's say you use rich snippets that display star ratings for products but use attributes that indicate that the rating is for posts. In such cases, the search engines might not show the ratings in their search results at all. So make sure that the rich snippet data to show the ratings has the correct attributes.<br></p><h2>Final Thoughts</h2><p>In this post, we have briefly reviewed both free and premium WordPress star rating plugins that you can add to your website. The aim of the post was to include the best WordPress star rating plugins for certain tasks like user testimonials, form fields, and product reviews.</p><h2>The Best WordPress Plugins on CodeCanyon</h2><p>If you are looking for a WordPress plugin for any use, take a look at the premium <a href="https://codecanyon.net/category/wordpress" rel="external" target="_blank">WordPress plugins</a> on CodeCanyon. Hopefully, one of the plugins listed there will meet all your needs.</p><figure class="post_image"><a href="https://codecanyon.net/popular_item/by_category?category=wordpress" target="_self" title="Link: https://codecanyon.net/popular_item/by_category?category=wordpress"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/769/posts/34348/image/codecanyon%20popular%20wordpress%20plugins.jpg"></a></figure><p>Here are a few of the best-selling and hot new WordPress plugins available on CodeCanyon for 2020.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-visual-composer-addons-extensions-of-2017--cms-28733"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28733/preview_image/WPBakery-Page-Builder-fix.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">22 Best WPBakery Page Builder (Visual Composer) Addons &amp; Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/8-best-wordpress-slider-carousel-plugins-of-2017--cms-28592"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/28592/preview_image/sliders%20(Case%20Conflict).jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">17 Best WordPress Slider &amp; Carousel Plugins of 2020</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/tutorials/20-best-wordpress-calendar-plugins-and-widgets--cms-25906"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/25906/preview_image/calendar-c.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress</div>
<div class="roundup-block__content-title">20 Best WordPress Calendar Plugins and Widgets</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://webdesign.tutsplus.com/articles/20-best-popup-opt-in-wordpress-plugins--cms-28617"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28617/preview_image/opt-in.jpg"><div class="roundup-block__primary-category topic-webdesign">WordPress Plugins</div>
<div class="roundup-block__content-title">25+ Best Popup &amp; Opt-In WordPress Plugins</div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
</ul><p><br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-02-14T13:27:10+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[12 Best CSS Animations on CodeCanyon]]></title>
      <link>//shineyrock.com/blog/read/12-best-css-animations-on-codecanyon1</link>
      <guid>https://shineyrock.com/blog/read/12-best-css-animations-on-codecanyon1#When:12:52:01Z</guid>
      <description><![CDATA[<p>In the past few years, browsers have come a long way when it comes to supporting newer CSS properties that allow developers to create nice effects and animations using just pure CSS.</p><p>There is a lot of browser support for using different transitions and keyframe animations in your projects now. You no longer have to rely on JavaScript libraries to add basic animations.</p><figure class="post_image"><img alt="Best Animations on CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/image-thumb-hover-effects.jpg"></figure><p>Animating different elements on a webpage is now easier than ever. However, it can still be very confusing or daunting for absolute beginners. In this post, we will cover some of the best CSS animation libraries on CodeCanyon that you can use to add fancy CSS animation to your webpages today.</p><h2>CSS Animations and Effects on CodeCanyon</h2><p>If you head over to the <a href="https://codecanyon.net/category/css/animations-and-effects?sort=sales" rel="external" target="_blank">CSS Animations and Effects section on CodeCanyon</a>, you will see that there are currently over 140 different libraries related to CSS animations.</p><figure class="post_image"><a href="https://codecanyon.net/category/css/animations-and-effects?sort=sales" target="_self"><img alt="CSS Animations from CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/CSS%20Animations%20from%20CodeCanyon.png"></a></figure><p>New libraries are added periodically to the collection, and you can select one from the best-sellers or apply your own filters to fine-tune the results.</p><p>There are libraries to animate all kinds of elements or apply different kinds of effects to elements like buttons.</p><h2>12 Best CSS Animations Libraries (On CodeCanyon for 2020)<br>
</h2><h3>CSS3 Image Hover Effects<br>
</h3><p>The first one on our list is <a href="https://codecanyon.net/item/css3-image-hover-effects/471215" rel="external" target="_blank">CSS3 Image Hover Effects</a>. You can use it to add around 17 different kinds of image hover animations.</p><figure class="post_image"><a href="https://codecanyon.net/item/css3-image-hover-effects/471215" target="_self"><img alt="Css3 Image Hover Effects" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/css3-image-hover-effects.jpg"></a></figure><p>This includes basic effects like fading and sliding overlays as well as more advanced animations like splitting overlays and joining overlays. Other interesting effects include corner ribbons and image stacks.</p><p>Visit the <a href="https://codecanyon.net/item/css3-image-hover-effects/471215" rel="external" target="_blank">description page</a> to find out more about the library. The video on the description page shows all the animations in action.</p><h3>SolidEffects—CSS3 Image Hover Effects</h3><p>The <a href="https://codecanyon.net/item/solideffects-css3-image-hover-effects/12642704" rel="external" target="_blank">SolidEffects CSS3 animation library</a> is perfect for people who want to add truly unique image hover animations to their websites.</p><figure class="post_image"><img alt="SolidEffects - Css3 Image Hover Effects" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/solid-effects.jpg"></figure><p>There are over 150 pure CSS-based animation effects that look fantastic. They will definitely help you grab the attention of your visitors.</p><p>The image hover effects generally fall under the following categories:</p><ul>
<li>image integration effects (horizontal and vertical)</li>
<li>image dispersion effects</li>
<li>Venetian blinds effects</li>
<li>slide and sweep effects</li>
<li>fold effects</li>
<li>zoom effects</li>
<li>blur, saturate and mosaic effects <br>
</li>
</ul><p>Each of these animation categories includes multiple animation effects that animate the overlay with different speeds in directions.</p><p>The customization is really easy because the downloaded product includes LESS files to help you quickly change different aspects of the animation like the overlay color.</p><h3>CSS3 Image—Text Hover Effects</h3><p>The <a href="https://codecanyon.net/item/css3-image-text-hover-effects/4884787" rel="external" target="_blank">CSS3 Image—Text Hover Effects</a> library is ideal for people who want to use a combination of image hover effects with some text effects.</p><figure class="post_image"><a href="https://codecanyon.net/item/css3-image-text-hover-effects/4884787" target="_self"><img alt="Image - Text Hover Effects" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/image-text-hover-effects.jpg"></a></figure><p>There are eight standard background animations that you can use with 14 different text effects. You can also combine multiple animation effects to show them on a single hover.</p><p>There is an option to choose between light and dark overlays for images to blend with your website theme.</p><p>Images can be displayed in eight different types of boxes. This includes full-width images as well as image thumbnails.</p><p>Make sure you check out the live preview on the <a href="https://codecanyon.net/item/css3-image-text-hover-effects/4884787" rel="external" target="_blank">description page</a> to see all the nice animations in action.</p><h3>CSS3 Mega Tooltip Animation Pack</h3><p>This <a href="https://codecanyon.net/item/css3-mega-tooltip-animation-pack/2557230" rel="external" target="_blank">CSS3 Mega Tooltip Animation Pack</a> offers a great solution for people who want to integrate nice animations with different tooltips on their website.</p><figure class="post_image"><a href="https://codecanyon.net/item/css3-mega-tooltip-animation-pack/2557230" target="_self"><img alt="Mega Tooltip Animation" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/mega-tooltip-animation.jpg"></a></figure><p>The animation pack comes with ten different tooltip animations. There are eight predefined color options. However, you can change the CSS files to add your own unique colors.</p><p>There is support for all major browsers. You can even support browsers as old as IE8 with a fix included in the download files after purchase.</p><p>The download files also contain detailed documentation and HTML samples that illustrate how to use the animation pack effectively.</p><h3>tFigure—Image Captions</h3><p>The <a href="https://codecanyon.net/item/tfigure-image-captions/8370121" rel="external" target="_blank">tFigure—Image Captions</a> library offers five different hover animations to display image captions.</p><figure class="post_image"><a href="https://codecanyon.net/item/tfigure-image-captions/8370121" target="_self"><img alt="tFigure Image Captions" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/tfigure-image-captions.png"></a></figure><p>You can use them to show nicely animated captions for different images. The overlays for each animation are available in four different colors.</p><p>The animations themselves are pretty simple. However, the way in which the captions are laid out on the overlays makes them very attractive.</p><p>These animations are framework independent, so you can install them on any website you want. They are also easily customizable, so you can make sure that the color scheme of the overlay matches the theme of your website.</p><p>Check out the animation's <a href="https://codecanyon.net/item/tfigure-image-captions/8370121" rel="external" target="_blank">live preview page</a> to see the awesome image caption animation in action.</p><h3>Animated Loaders Kit</h3><p>There are a lot of times where users might have to wait a while for a process to complete. This might be a very large image that has to load or some other computation process that needs to complete.</p><figure class="post_image"><a href="https://codecanyon.net/item/animated-loaders-kit/8242708" target="_self"><img alt="Animated Loaders Kit" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/animated-loaders-kit.png"></a></figure><p>If the process takes a couple of seconds, it is a good practice to let users know that you are working on it. A good way to do that is with simple animated loaders.</p><p>The <a href="https://codecanyon.net/item/animated-loaders-kit/8242708" rel="external" target="_blank">Animated Loaders Kit</a> is perfect for this situation. It comes with ten CSS-only animated loaders.</p><p>There are many advantages of using these pure CSS-based animated loaders. They are easy to customize. It will change only a couple of minutes to change the color, font, and size of the loaders. You can also change the animation speed. They have a very small file size compared to using GIF files.</p><p>The best way to appreciate how nice they are is to see the live preview on the <a href="https://codecanyon.net/item/animated-loaders-kit/8242708" rel="external" target="_blank">description page</a>.</p><h3>Image Hover Effects Collection</h3><p>This <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" rel="external" target="_blank">Image Hover Effects Collection</a> kit was added fairly recently to CodeCanyon and comes with 20 different animation styles.</p><figure class="post_image"><a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" target="_self"><img alt="Image Thumb Hover Effects Collection" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/image-thumb-hover-effects.jpg"></a></figure><p>They follow a responsive design philosophy and support all major browsers. So you can rest assured that any effects you use on your website will look good on all devices and all screen sizes.</p><p>The animations are also fully customizable, and you can easily change the overlay and text colors for all animations to better align them with the overall theme of your own website.</p><p>The code is well documented, so it will be easier to make changes whenever necessary. You should definitely check out the <a href="https://codecanyon.net/item/image-thumb-hover-effects-collection-responsive-hover-css-showcase/21960161" rel="external" target="_blank">live preview</a> to see how good these hover animations are.</p><h3>Dex Preloader Kit</h3><p>This <a href="https://codecanyon.net/item/dex-preloader-kit-pure-css3-animations/21994000" rel="external" target="_blank">Dex Preloader Kit</a> also contains over 30 different preloaders that you can easily integrate in your projects.</p><figure class="post_image"><a href="https://codecanyon.net/item/dex-preloader-kit-pure-css3-animations/21994000" target="_self"><img alt="Dex Preloaders Kit" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/dex-preloaders-kit.png"></a></figure><p>They are completely different in style from the Animated Loaders kit we covered above. For instance, these ones are created using a single background color. You can easily change this preloader color to the dominant color on your website.<br></p><p>The animations are also different, and the preloaders use a variety of shapes like circles, squares, and lines to create the animation.</p><p>You can also add a little bit of text under each preloader to let users know what is going on in the background.</p><p>This kit was also added <a href="https://codecanyon.net/item/dex-preloader-kit-pure-css3-animations/21994000" rel="external" target="_blank">fairly recently</a> to CodeCanyon and has a lot to offer for a very low price.</p><h2>Free CSS Animation Libraries for 2020</h2><p>Generally, you can expect these paid CSS animation libraries to have a lot of variety in the animations compared to free alternatives. They also come with free support for six months and lifetime updates.<br></p><p>Many times, these premium libraries also support old browsers. However, this might not be the case with free animation libraries.</p><p>It might be easier for anyone who is just starting out to simply use these paid libraries. However, if you don't have the budget to purchase these paid plugins, we have also listed some free alternatives below.</p><p>Here are four free CSS animation libraries that you can use in your projects:</p><h3><a href="https://github.com/ciar4n/imagehover.css" rel="external" target="_blank">imagehover.css</a></h3><p>This library gives you the option to add simple image hover animations from different directions. It comes with 40 different hover animations.</p><h3><a href="https://github.com/wayou/SlipHover" rel="external" target="_blank">SlipHover</a></h3><p>This is also a free image hover animation library. However, it only comes with basic sliding animations.</p><p>The unique feature of this library is that the hover animations are aware of the cursor direction. So the overlay will appear to move in from the left side if the user hovers over the image from the left side.<br></p><h3><a href="https://github.com/daneden/animate.css" rel="external" target="_blank">animate.css</a></h3><p>This animation library is not aimed at a specific use case like image hover animations or tooltips.</p><p>It is simply a general-purpose library that you can use to animate different elements on a webpage. There are a bunch of classes that you can add to different elements to control the speed and delay of the animation.</p><h3><a href="https://github.com/ConnorAtherton/loaders.css" rel="external" target="_blank">loaders.css</a></h3><p>This library consists of pure CSS-based loading animations. You can use them in your project if you are looking for some nice preloader animations.</p><figure class="post_image"><img alt="CSS Loaders" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/loaders-css.png"></figure><h2>Additional Resources</h2><p>It can be hard to figure out where to start for an absolute beginner. We are listing some tutorials here which will make it easier for you to understand how CSS animations work and how you can start using them in your own projects.</p><p>You should start by reading this tutorial that provides a <a href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068" rel="external" target="_blank">beginner level introduction to CSS animation</a>. After that, you should consider learning <a href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868" rel="external" target="_blank">how to use CSS variables for animation</a>.</p><p>Using different pre-built CSS animation libraries is not hard at all. However, having a basic understanding of the concepts will go a long way when it comes to making changes to these animations or trying to create something of your own in future.</p><p>You should also consider reading these two tutorials that teach you how to create your own CSS-based animations for scratch. The first tutorial is for <a href="https://webdesign.tutsplus.com/tutorials/how-to-create-different-css-hover-effects-from-scratch--cms-34222" rel="external" target="_blank">basic hover effects</a>, while the second one is a quick tip for <a href="https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-enhance-a-page-with-css-animations--cms-32100" rel="external" target="_blank">page loading animations</a>.</p><ul class="roundup-block__contents posts--half-width roundup-block--card">
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/21068/preview_image/animation.png"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/a-beginners-introduction-to-css-animation--cms-21068"><h1 class="nolinks">A Beginner’s Introduction to CSS Animation</h1></a></header><div class="posts__post-teaser">In this tutorial I am going to introduce you to CSS animations; a highly performant way of animating on the web which is becoming more and more popular as...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/334/profiles/18791/profileImage/miron_catalin_gabriel_profile_picture.jpg" alt="Catalin Miron"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/catalin-miron">Catalin Miron</a></address>
<time class="posts__post-publication-date" datetime="2014-06-03 12:09:35 UTC" title="03 Jun 2014">03 Jun 2014</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/css-animation">CSS Animation</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/638/posts/28868/preview_image/css-variable-animations.png"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/how-to-use-css-variables-for-animation--cms-28868"><h1 class="nolinks">How to Use CSS Variables for Animation</h1></a></header><div class="posts__post-teaser">Not only are CSS variables a real and tangible option for developers, they can also be used in animation scenarios. Still skeptical? Follow along to find out...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/638/profiles/19175/profileImage/avatar-brickbg400x400.jpg" alt="Dennis Gaebel"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/dennis-gaebel">Dennis Gaebel</a></address>
<time class="posts__post-publication-date" datetime="2017-05-22 08:50:01 UTC" title="22 May 2017">22 May 2017</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/animation">Animation</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/how-to-create-different-css-hover-effects-from-scratch--cms-34222"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/34222/preview_image/hover-pre1.gif"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/how-to-create-different-css-hover-effects-from-scratch--cms-34222"><h1 class="nolinks">How to Create 7 Different CSS Hover Effects From Scratch</h1></a></header><div class="posts__post-teaser">In today’s tutorial, we’re going to create 7 different CSS hover effects. We’ll learn loads along the way, including how to animate font icons, borders, and...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/780/profiles/19309/profileImage/about.jpg" alt="George Martsoukos"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/george-martsoukos">George Martsoukos</a></address>
<time class="posts__post-publication-date" datetime="2019-11-14 12:48:19 UTC" title="14 Nov 2019">14 Nov 2019</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/css">CSS</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-enhance-a-page-with-css-animations--cms-32100"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/32100/preview_image/pre1.png"></a><a class="roundup-block__content-link posts__post-title" href="https://webdesign.tutsplus.com/tutorials/quick-tip-how-to-enhance-a-page-with-css-animations--cms-32100"><h1 class="nolinks">Enhance the Way a Web Page Loads With CSS Animations</h1></a></header><div class="posts__post-teaser">In a previous tutorial we created a full-screen responsive page with flexbox. Today, we’ll make this page more attractive by adding a few CSS animations to it.</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/780/profiles/19309/profileImage/about.jpg" alt="George Martsoukos"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/george-martsoukos">George Martsoukos</a></address>
<time class="posts__post-publication-date" datetime="2018-12-11 13:11:31 UTC" title="11 Dec 2018">11 Dec 2018</time>
</div>
</div>
<div class="posts__post-primary-category topic-webdesign"><a class="posts__post-primary-category-link topic-webdesign" href="https://webdesign.tutsplus.com/categories/css-animation">CSS Animation</a></div></footer></article></li>
</ul><h2>Final Thoughts</h2><p>Using a bit of animation for different elements on your website can make the content more interesting and engaging.</p><p>Coming up with our own unique animations from scratch can take some time. So we listed some of the best free and premium CSS-based animation libraries that will help you get started in no time.</p><p><a href="https://codecanyon.net/category/css/animations-and-effects?sort=sales" target="_self"><img alt="CSS Animations from CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34376/image/CSS%20Animations%20from%20CodeCanyon.png"></a><br></p><p>New animations and effects are added all the time to CodeCanyon—you can choose one of the best-sellers or try something fresh and new.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-01-31T12:52:01+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[12 Best WordPress Booking and Reservation Plugins]]></title>
      <link>//shineyrock.com/blog/read/12-best-wordpress-booking-and-reservation-plugins1</link>
      <guid>https://shineyrock.com/blog/read/12-best-wordpress-booking-and-reservation-plugins1#When:12:46:21Z</guid>
      <description><![CDATA[<p>Are you looking for an automated booking or reservation plugin that saves you time as well as your customer's time? Are you tired of losing business to your competitors? Are you looking for a way to streamline your online appointments and bookings?<br></p><p>Your website should make it easy for guests to view, reserve, and book available appointments. This is where WordPress booking and reservation plugins can help you meet your online business goals. <br></p><p>So whatever your business—from haircuts to hotels, and from health salons to consulting firms—WordPress booking and reservations plugins will help you extend what your business can do. </p><h2>The Best WordPress Booking and Reservation Plugins</h2><p>CodeCanyon offers a huge variety of <a href="https://codecanyon.net/category/wordpress/calendars?sort=sales#content" target="_self">WordPress booking and reservation plugins</a> you can download and install. </p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/calendars?sort=sales#content" target="_self"><img alt="WordPress booking and reservation plugins" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/booking-reservation.jpg"></a></figure><p>CodeCanyon offers a great collection of booking and reservation plugins to choose from. Some of the best features include:<br></p><ul>
<li>easy customization and integration</li>
<li>translation-ready</li>
<li>ability to integrate with payment gateways like PayPal, Stripe, Square, or Mollie<br>
</li>
</ul><p>Think about this for a moment. You run a consumer-oriented website. You want your customers to book appointments on your site any time of day or night. You know that without this, you’re losing business. But how do you make your website capable of taking appointments? You need an appointment booking plugin, also known as a booking and reservation plugin.</p><h2>8 Best WordPress Booking and Reservation Plugins for 2020</h2><h3><a href="https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091?_ga=2.230598236.1968242203.1575528425-1709438589.1534264476" rel="external" target="_blank">Bookly PRO</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091?_ga=2.230598236.1968242203.1575528425-1709438589.1534264476" target="_self"><img alt="Bookly pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/BOOKLY%20PRO.jpg"></a></figure><p>Bookly Pro WordPress Booking Plugin is a full-featured plugin that's easy to install, getting you up and running in a matter of seconds. It's fully customizable and mobile-ready; thus, customers can book appointments on the go. This plugin comes with an easy scheduling process that walks the user from booking to payment in a few simple steps.<br></p><p>The inclusion of SMS notifications, online payments, and Google Calendar sync sets it apart from many others.<br></p><p>Other notable features of this plugin include:</p><ul>
<li>compatibility with WooCommerce</li>
<li>multi-language support</li>
<li>unlimited number of staff members and services</li>
<li>integration with most payment systems</li>
<li>ability to allow or prevent caching of pages with booking form<br>
</li>
</ul><h3><a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116?_ga=2.66945646.1968242203.1575528425-1709438589.1534264476" rel="external" target="_blank">Bookme WordPress Booking Plugin</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116?_ga=2.66945646.1968242203.1575528425-1709438589.1534264476" target="_self"><img alt="Bookme" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/BOOKME.jpg"></a></figure><p>The Bookme WordPress booking plugin is a multi-purpose booking plugin that can be used by all kinds of businesses, ranging from beauty salons and fitness centers to educational institutions and medical centers.<br></p><p>As an admin, you can set up a wide range of services at different prices. Bookme also allows you to build custom fields depending on your requirements. Customers can pay with multiple payment systems such as Stripe or PayPal. If you require numerous booking types, Bookme is the right plugin for you. It offers:</p><ul>
<li>default booking</li>
<li>group booking</li>
<li>consultant booking</li>
<li>add to cart booking</li>
<li>free booking</li>
<li>booking with WooCommerce</li>
</ul><p>Other notable features include:</p><ul>
<li>WooCommerce integration</li>
<li>clients can book several appointments at once</li>
<li>integration with Google Calendar</li>
<li>SMS Notification via Twillio API</li>
</ul><h3><a href="https://codecanyon.net/item/appointment-booking-for-wordpress-webba-booking/13843131" rel="external" target="_blank">Webba Booking Plugin</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/appointment-booking-for-wordpress-webba-booking/13843131" target="_self"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/weba.jpg"></a></figure><p>As a service provider, saving time and money while at the same time offering convenient services to your customers is super important. Webba Booking Plugin is built with this in mind.<br></p><p>First, it’s one of the best-looking WordPress booking and reservation plugins. Secondly, it’s a robust system that has a long list of features to help you customize the appearance of the system to express your unique vision and business identity. </p><p>Other features include:</p><ul>
<li>make multiple reservations in the same session</li>
<li>80+ options for customizations<br>
</li>
<li>make reservations of several people or services at the same time</li>
<li>secure online payments with platforms such as PayPal, Stripe, and WooCommerce</li>
<li>export CSVs</li>
<li>and more</li>
</ul><h3>
<a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830" rel="external" target="_blank">Booki</a><a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830" rel="external" target="_blank">—WordPress Booking Calendar</a>
</h3><figure class="post_image"><a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830" target="_self"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/booki.jpg"></a></figure><p>Booki is the best plugin if you're looking to run both appointment-based and reservation-based bookings. Customers can see bookings in their time zone. It is also integrated with PayPal, has a shopping cart, and can issue discount coupons. It is also easy to integrate with Mailchimp.</p><p>Other notable features of this plugin include:</p><ul>
<li>You can specify the booking period with start and end dates as well as excluding specific days and time slots.</li>
<li>You can determine prices at the day, hour, or minute level.<br>
</li>
<li>The system can also adapt to allow single or multiple bookings depending on your project's needs.<br>
</li>
<li>Include costs as a list of checkboxes. </li>
<li>It allows you to create an unlimited number of extra features that your customers can check out along with their booking.</li>
</ul><h3>
<a href="https://codecanyon.net/item/team-booking-wordpress-booking-system/9211794" rel="external" target="_blank">Team Booking</a> </h3><figure class="post_image"><a href="https://codecanyon.net/item/team-booking-wordpress-booking-system/9211794" target="_self"><img alt="team booking" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/team%20booking.jpg"></a></figure><p>Use the power of Google Calendar for your bookings and reservations by using the Team Booking system for WordPress. All the availability planning is coordinated via Google Calendar! <br></p><ol>
<li>Create “availability” events on Google Calendar.<br>
</li>
<li>These events appear on the front-end as open slots for booking.<br>
</li>
<li>When the slot is booked, the Google Calendar updates automatically.</li>
</ol><p>If you’re working as a team, you can let your coworkers plan their availability from their own Google Calendars.</p><p>Other features include:</p><ul>
<li>three levels of notification—to the customer, service provider, and admin</li>
<li>Google Calendar and Google Maps support </li>
<li>translation-ready</li>
<li>approval and cancellation system for both provider and customers</li>
<li>customize reservation forms and email notifications</li>
</ul><h3><a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?s_rank=10" target="_self">HBook Hotel Booking System</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?s_rank=10" target="_self"><img alt="HBOOK" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/HBOOK.jpg"></a></figure><p>HBook is a powerful and versatile plugin that is ideally suited for anybody that owns a business in the hospitality industry: a hotel, B&amp;B, holiday apartment, or campground. It will allow you to enable an online reservation on your WordPress website easily. It comes equipped with a customizable booking form with a drag-and-drop form builder that lets you choose what customer details you want to gather. Shortcode support allows you to add availability calendars, table rates, and booking forms anywhere on your website in seconds.<br></p><p>It has an efficient booking management system with features that include:</p><ul class="dashed-list dashed-list-plugin">
<li>calendar view to see your bookings at a glance</li>
<li>reservation list in a table to view details of all bookings, add comments, change accommodation, update remaining balance, or send emails</li>
<li>synchronize your bookings with websites such as Airbnb, HomeAway, VRBO, and Booking.com<br>
</li>
<li>export your bookings to CSV files</li>
<li>integration with multiple payment methods: Stripe, PayPal, Square, Cardlink, Mollie, and more </li>
<li>invoices and document templates<br>
</li>
</ul><h3><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497?s_rank=16" rel="external" target="_blank">Amelia—Enterprise-Level Appointment Booking</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497?s_rank=16" target="_self"><img alt="Amelia" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/AMELIA.png"></a></figure><p>Like the other plugins in this list, Amelia lets your customers make appointments at any time of day and night. This plugin is easy to customize; hence you can build your appointment booking forms. What stands apart with this plugin is that you can keep your customers and employees notified and reminded of their appointments in real time with SMS notifications. </p><p>Some features include: </p><ul>
<li>supports multiple employees, each with their services and availability schedule</li>
<li>supports multiple business locations</li>
<li>step-by-step appointment wizard makes booking easy</li>
<li>options to upsell during appointment booking </li>
<li>integration with WooCommerce, PayPal, and Stripe </li>
<li>supports on-site payments so your customers can pay in cash when they arrive</li>
</ul><h3><a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=8" rel="external" target="_blank">Events Calendar Registration and Booking</a></h3><figure class="post_image"><a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=8" target="_self"><img alt="events calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/eventplus.jpg"></a></figure><p>Do you want to promote classes, seminars, workshops, conferences, or concerts on your WordPress website? Do you want to set ticket prices for your events, create recurring events, or even accept donations for your events? If so, the <a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=1" rel="external" target="_blank">Events Calendar Registration and Booking</a> plugin has got you covered. </p><p>With Events Calendar, you can easily create and manage your events online through the WordPress admin interface. Then, visitors will be able to register and pay online for those events via PayPal, Stripe, or Authorize.Net. It gives you a quick glimpse of the latest events created, letting you sort them by categories, view payments, and keep track of your attendees.</p><p>Other essential features of this plugin include:</p><ul>
<li>multilingual </li>
<li>integrated with Google Maps</li>
<li>countdown timer</li>
<li>confirmation emails</li>
<li>shortcode support for calendars and single events</li>
</ul><h2>Free Booking and Reservations Available for Download</h2><p>As much as premium plugins offer more benefits and more features, there are a couple of free plugins that can help you with your business if you are on a tight budget. If you are just starting, a free plugin can give you time to gain recognition and build your brand without committing to a premium solution. </p><h3><a href="https://wordpress.org/plugins/motopress-hotel-booking-lite/" target="_self">Hotel Booking Lite</a></h3><figure class="post_image"><img alt="hotel booking lite plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/hotel%20booking%20lite.png"></figure><p>Hotel Booking Lite is the perfect booking plugin for anybody in the hotel and accommodation space. It allows you to simplify the booking experience of your customers. It offers real-time search, custom pricing, multiple currencies, and other excellent features.</p><p>Hotel Booking Lite also integrates seamlessly with most themes.</p><h3><a href="https://wordpress.org/plugins/booking/" target="_self">Booking Calendar</a></h3><figure class="post_image"><img alt="booking-calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/booking%20calendar.png"></figure><p>Booking Calendar is a flexible plugin for any business that operates on a booking basis. It is also fully responsive, so users on mobile, tablet, or desktop devices can book on the go. Booking Calendar also allows you to import <strong>.ics</strong> feeds from services that use that<strong></strong> format, such as Airbnb and TripAdvisor.</p><h3><a href="https://wordpress.org/plugins/wp-simple-booking-calendar/" target="_self">WP Simple Booking Calendar</a></h3><figure class="post_image"><img alt="wp-booking calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/34329/image/wp-simple-booking.png"></figure><p>Simple Booking Calendar is the perfect plugin to show the availability of your properties or equipment. With the free version of this plugin, you can responsively feature available space and save time you would otherwise spend on manually communicating with customers.</p><h3><a href="https://wordpress.org/plugins/sagenda/" target="_self">Sagenda</a></h3><p>Sagenda allows you to book appointments and meetings with your clients online. Sagenda allows an unlimited number of bookings or customers. It also integrates with the popular PayPal payment system to enable customers to pay for bookings.</p><h2>Tips for Choosing a Booking and Reservation Plugin</h2><p>An online booking is a must if you wish to succeed in business in this digital age. Here are some suggestions for choosing the right plugin:</p><ul>
<li>
<strong>Simplicity:</strong> a good plugin should be user-friendly and easy to customize</li>
<li>
<strong>Budget: </strong>you should select a plugin that will not strain your operating costs or eat up profit margins</li>
<li>
<strong>Support: </strong>you need to go with someone who will walk you through any issues that might arise, especially during the initial stages.</li>
<li>
<strong>Features: </strong>you might not always get a plugin that meets every need. However, make a checklist of features you can't do without—such as payments, analytics, and reminders.</li>
</ul><h2>Conclusion</h2><p>There are many different kinds of WordPress appointment, booking, and reservation plugins available today. Choosing the right one can be crucial to the smooth running of your business. You need to select a plugin that fits your requirements. While this list is in no way exhaustive, we’ve chosen plugins with a solid reputation. All these plugins are available on <a href="https://codecanyon.net/category/wordpress/calendars?sort=sales#content" rel="external" target="_blank">CodeCanyon</a>. <br></p><h3>Free Course on Essential WordPress Plugins<br>
</h3><p>Looking for more premium and free WordPress plugins? Try our free course, which introduces you to the <a href="https://code.tutsplus.com/courses/essential-wordpress-plugins" target="_self">best WordPress plugins</a> out there. Secure your site, make it run faster, optimise it for the search engines, and more.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content free-course">
<div class="free-course__label">FREE</div>
<a class="roundup-block__content-link" href="https://code.tutsplus.com/courses/essential-wordpress-plugins"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/16/courses/935/preview_image/essential-wordpress-plugins-400x277.png"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Essential WordPress Plugins</div>
<div class="roundup-block__author">Rachel McCollin</div></a>
</li></ul><p>And you can read more about WordPress event and booking calendars here on Envato Tuts+!</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/guide-to-wordpress-event-calendar-and-booking-plugins--cms-33687"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33687/preview_image/calendar-c.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Guide to WordPress Event Calendar and Booking Plugins</div>
<div class="roundup-block__author">Franc Lucas</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/show-course-schedules-and-timetables-with-a-wordpress-calendar-plugin--cms-34082"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34082/preview_image/course_schedule.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Show Course Schedules and Timetables With a WordPress Calendar Plugin</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/insert-a-calendar-into-wordpress-with-the-pro-event-calendar-plugin--cms-33677"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/33677/preview_image/ca.jpg"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">Insert a Calendar Into WordPress With the Pro Event Calendar Plugin </div>
<div class="roundup-block__author">Daniel Strongin</div></a></li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-01-15T12:46:21+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[20 Best WordPress Calendar Plugins and Widgets]]></title>
      <link>//shineyrock.com/blog/read/20-best-wordpress-calendar-plugins-and-widgets</link>
      <guid>https://shineyrock.com/blog/read/20-best-wordpress-calendar-plugins-and-widgets#When:13:17:19Z</guid>
      <description><![CDATA[<p>Use high-quality WordPress calendar plugins and widgets for events, bookings, and appointments. These plugins are easy to set up and will help you meet all your calendar needs for your business. </p><figure><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_self"><img alt="Events Schedule - WordPress Events Calendar Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/introoo.jpg"></a><figcaption><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_self"></a><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_self">Events Schedule is one of the many high-quality calendar WordPress widgets and plugins available on CodeCanyon.</a></figcaption></figure><p>By adding a premium calendar plugin or widget to your website, you can provide your customers and potential customers with important information about your business and even collect payments for bookings.  <br></p><p>In this article, we will feature a selection of the best-selling calendar WordPress plugins and widgets from CodeCanyon. These premium calendar plugins and widgets are designed to give you complete control over the calendar creation process and help you set up a calendar or booking system that fits your particular business. We'll also cover some of the best free calendar plugins and widgets for you to download if you're on a tight budget. </p><h2>The Best Calendar Plugins and Widgets on CodeCanyon<br>
</h2><p>Explore over 7,000 of the best WordPress plugins ever created on CodeCanyon. With a low-cost one time payment, you can purchase these high-quality WordPress plugins and improve your website experience for you and your visitors. </p><p>Here are a few of the weekly best-selling and up-and-coming calendar WordPress plugins and widgets available on CodeCanyon for 2020.</p><figure><a href="https://codecanyon.net/search/wordpress%20calendar?view=grid" target="_self"><img alt="Best-Selling Calendar Plugins and Widgets" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/use.jpg"><figcaption>Weekly best-selling Calendar WordPress plugins and widgets on CodeCanyon  </figcaption></a></figure><p>These versatile calendar plugins and widgets allow you complete flexibility over the calendars and functionality of the calendars that you show your audience. Here a few of notable features of the calendar plugins and widgets offered:<br></p><ul>
<li>create custom events, classes, bookings, and meetings</li>
<li>appearance editor</li>
<li>filterable, sortable, and searchable booking list<br>
</li>
<li>Google Calendar integrations</li>
<li>WooCommerce integration</li>
</ul><p>If you need to implement any type of calendar, booking, or scheduling into your WordPress website, then head on over to <a href="https://codecanyon.net/search/wordpress%20calendar?view=grid" target="_self">CodeCanyon</a> and choose from the premium plugins available. </p><h2>Top 20 WordPress Calendar Plugins and Widgets (From CodeCanyon for 2020)<br>
</h2><p>Here are 20 of the best-selling WordPress form plugins that are available for you to download on CodeCanyon:</p><h3>1. <a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017?_ga=2.131811151.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">EventOn</a>
</h3><figure class="post_image"><img alt="EventOn" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/eventon.jpg" class="loaded"></figure><p><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" target="_self">EventOn</a> is a multipurpose WordPress event calendar plugin that gives you all the things you need in a calendar. </p><p>It has a clean, minimal design, and you'll be up and running quickly and easily.</p><p>Major features include:</p><ul>
<li>set unlimited images for an event<br>
</li>
<li>Google Maps integration</li>
<li>calendar widgets and shortcode generator</li>
<li>event categories with custom color assignments</li>
<li>social share</li>
</ul><p>Not only can you customize each event with images, maps, icons, colors, and more, but you can also configure your calendar to search and sort in several different ways.</p><p><a href="https://codecanyon.net/item/eventon-wordpress-event-calendar-plugin/1211017" rel="external" target="_blank">EventOn</a> is a nice, easy-to-use event calendar plugin that also offers a unique <a href="https://codecanyon.net/item/eventon-slider-addon/11063359" rel="external" target="_blank">slider addon</a>. </p><h3>2. <a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" rel="external" target="_blank">Bookly</a>
</h3><figure class="post_image"><img alt="Bookly" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/bookly.jpg" class="loaded"></figure><p>You can book and schedule just about anything with this WordPress plugin.</p><p>Bookly is an incredible appointment booking system that blurs the line between a WordPress website and a web application. It is well designed, fully responsive, and even supports gestures.</p><p>You'll also find:</p><ul>
<li>a form builder<br>
</li>
<li>Google Calendar sync<br>
</li>
<li>WooCommerce integration</li>
<li>SMS and email notifications<br>
</li>
<li>several online payment gateways</li>
<li>and a whole lot more</li>
</ul><p>This plugin allows customers to book and cancel appointments, update personal information, and send payments.<br></p><p>There's also the ability to create schedules for each staff member—you can even block out holidays.<br></p><p><a href="https://codecanyon.net/item/bookly-book-appointments-book-services-book-anything-easy-and-fast-booking-for-your-clients/7226091" rel="external" target="_blank">Bookly</a>'s customization options and useful features make it more than just a way to serve customers well—it also helps the website owner keep track of staff and appointments at the same time.<br></p><h3>3. <a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497" target="_self">Amelia</a>
</h3><figure class="post_image"><img alt="Amelia" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/amelia.png" class="loaded"></figure><p><a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497" target="_self">Amelia</a> is a simple and powerful plugin for accepting online appointments and bookings. It features a good range of elements and components that make it easy to create beautiful layouts, even when you have no coding experience.</p><p>Amelia also allows for Google Calendar synchronization. It is the perfect plugin for gyms, spas, law consultants, fitness experts, etc.</p><p>Other key features of this plugin include:<br></p><ul>
<li>powerful admin dashboard</li>
<li>real-time SMS notifications</li>
<li>smooth UX that provides a seamless booking experience in just one page</li>
<li>fully customizable design</li>
<li>Google Calendar sync</li>
<li>multiple payment options</li>
</ul><h3>4. <a href="https://codecanyon.net/item/calendarize-it-for-wordpress/2568439?_ga=2.206210899.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">Calendarize it!</a>
</h3><figure class="post_image"><img alt="Calendarize it" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/calendar-it.jpg" class="loaded"></figure><p>This plugin supports <a href="https://codecanyon.net/item/visual-composer-page-builder-for-wordpress/242431" target="_blank">WPBakery Page Builder</a>, but it can also be used with any other popular page and layout builder by using shortcodes. </p><p>It comes with features that can be configured however you like, and its simple design makes it a good fit for any theme or style.</p><p>You'll find many useful features, including, but not limited to:</p><ul>
<li>events by user role</li>
<li>sidebar widgets and shortcodes</li>
<li>Custom Post Types support</li>
<li>advanced filtering with custom taxonomies</li>
<li>single events, recurring events, arbitrary recurring events, and recurring events with exceptions</li>
</ul><p>Calendar it! also features a powerful CSS editor that allows you to change colors, fonts and style to match your brand theme</p><h3>5. <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" rel="external" target="_blank">WordPress Pro Event Calendar</a>
</h3><figure class="post_image"><img alt="WordPress Pro Event Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/wp%20pro.jpg" class="loaded"></figure><p>There are certain features that you expect with a WordPress calendar plugin; however, there are a few features that set a plugin apart. Take a look at WordPress Pro Event Calendar, and you'll see some advanced features that make it stand out from the pack.<br></p><p>Well designed and fully responsive, this plugin has some great features:<br></p><ul>
<li>WPML support</li>
<li>fully responsive layouts</li>
<li>flexible event settings</li>
<li>Google Maps integration</li>
<li>subscribe to a calendar</li>
<li>custom fields and date range support<br>
</li>
<li>and more</li>
</ul><p>But what really sets it apart is the ability to import events from ICS feeds and Facebook.</p><p>Best of all, <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" rel="external" target="_blank">WordPress Pro Event Calendar</a> accepts events submitted by front-end users, making it easy for users to add events.</p><h3>6. <a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" target="_self">Event Booking Pro</a>
</h3><figure class="post_image"><img alt="Event Booking Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/eventpro.jpg" class="loaded"></figure><p>Here's another great option for setting up a fully functional event booking system.</p><p>Event Booking Pro is <em>very</em> pro as it boasts over 600 settings!</p><p>There are a lot of features with this WordPress calendar plugin, and they are always adding more. Here are a few:<br></p><ul>
<li>user-friendly event creation</li>
<li>very customizable, including text, emails, color, size, padding, and borders</li>
<li>unlimited events</li>
<li>AJAX control panel</li>
<li>offline and multiple booking<br>
</li>
<li>PayPal, coupon, and CSV integration</li>
<li>and many, many more</li>
</ul><p>There's no shortage of shortcodes, it supports CSV, and everything can be customized and styled as you like, making it fit into your WordPress theme design <em>perfectly</em>.<br></p><p><a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" target="_self">Event Booking Pro</a> is an impressive WordPress calendar plugin.</p><h3>7. <a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_self">Events Schedule</a>
</h3><figure class="post_image"><img alt="Events Schedule" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/event%20schedule.jpg" class="loaded"></figure><p><a href="https://codecanyon.net/item/events-schedule-wordpress-plugin/14907462" target="_self">Events Schedule</a> is a simple yet powerful WordPress events calendar that lets you schedule classes and events in seconds. It is the perfect plugin for any event organizer.</p><p>When it comes to search and filter, Events Schedule offers five filter categories: namely type, location, instructor, day, and time of the day.</p><p>Other features include:</p><ul>
<li>daily cron job for event updates</li>
<li>12 timetable styles to choose from</li>
<li>custom labels and messages</li>
<li>live filters</li>
<li>Google Maps integration</li>
<li>fully responsive</li>
<li>event countdown feature</li>
<li>WooCommerce integration</li>
</ul><p><a href="https://code.tutsplus.com/tutorials/how-to-add-a-schedule-to-your-wordpress-site--cms-32900" target="_self">Learn how to use the Events Schedule plugin with our hands-on, step-by-step tutorial.</a></p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-add-a-schedule-to-your-wordpress-site--cms-32900"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Add a Calendar to Your WordPress Site With the Events Schedule Plugin</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li></ul><h3>8. <a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" rel="external" target="_blank">Timetable Responsive Schedule for WordPress</a><br>
</h3><figure class="post_image"><img alt="Timetable Responsive Schedule for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/timetable.png" class="loaded"></figure><p>The Timetable Responsive Schedule for WordPress plugin offers a new approach to WordPress calendar plugins.</p><p>With it, you can create a timetable of events easily! Use the Timetable shortcode generator to create timetable views for classes, medical departments, nightclubs, tutoring, and so on.</p><p>Quickly create a timetable by:</p><ul>
<li>adding a new event with day, time, category, and more</li>
<li>adjusting and configuring the design and appearance<br>
</li>
<li>generating your shortcode and placing it into a post or page</li>
</ul><p>And that's it!</p><p>There are plenty of event options and many different shortcode options—a color picker and font configuration are included.</p><p><a href="https://codecanyon.net/item/timetable-responsive-schedule-for-wordpress/7010836" rel="external" target="_blank">Timetable Responsive Schedule for WordPress</a> also includes a great widget lineup, rounding out one of the best WordPress calendar plugins you'll find.</p><h3>9. <a href="https://codecanyon.net/item/booked-appointment-booking-for-wordpress/9466968?_ga=2.105623491.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">Booked: Appointment Booking for WordPress</a>
</h3><figure class="post_image"><img alt="Booked Appointment Booking for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/booked.jpg" class="loaded"></figure><p>Booked is another great appointment booking option. It features an advanced appointment calendar which allows ease of management of appointments. It also gives you endless color possibilities when it comes to the design.</p><p>Other features include:</p><ul>
<li>guest booking</li>
<li>looks great on any device</li>
<li>customer profile pages</li>
<li>custom login and registration pages, time slots, and custom fields</li>
<li>customizable customer and admin emails</li>
<li>displays your calendar with a shortcode or widget</li>
<li>and more</li>
</ul><h3>10. <a href="https://codecanyon.net/item/wordpress-events-calendar-registration-booking/7647762" rel="external" target="_blank">WordPress Events Calendar Registration and Booking</a>
</h3><figure class="post_image"><img alt="WordPress Events Calendar Registration and Booking" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/events%20calandar.jpg" class="loaded"></figure><p>The WordPress Events Calendar Registration and Booking plugin is feature-rich, offering some options you'll only find in plugin addons.</p><p>Everything you need (and maybe more) for successfully setting up a fully functional registration and booking system is right here.</p><p>This "out of the box" solution includes:</p><ul>
<li>shortcodes</li>
<li>a color picker</li>
<li>multilingual support</li>
<li>Google Maps integration</li>
<li>recurring events, tickets, and coupons</li>
<li>social media sharing</li>
<li>responsive design</li>
<li>and more</li>
</ul><p>One of the best features of this plugin and others is the countdown timer for all your events. It also features a stats dashboard that lets you keep track of payments and attendees and view the latest events and event categories.</p><p>Beautifully designed and leveraging Bootstrap 3.0, the <a href="https://codecanyon.net/item/wordpress-events-calendar-registration-booking/7647762" rel="external" target="_blank">WordPress Events Calendar Registration &amp; Booking plugin</a> should <em>not</em> be overlooked.</p><h3>11. <a href="https://codecanyon.net/item/booki-booking-calendar-plugin-a-wordpress-booking-system-for-online-reservation-and-appointments/7460830?_ga=2.126502605.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">Booki</a>
</h3><figure class="post_image"><img alt="Booki" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/booki.jpg" class="loaded"></figure><p>Like several of the above-mentioned WordPress calendar plugins, Booki offers a full booking system using WordPress.</p><p>There are so many great applications for this type of plugin, with each plugin offering a unique perspective on the appointment management process.</p><p>You can set up unlimited booking projects <em>and</em> service providers. Options include:</p><ul>
<li>add optional extras for bookings</li>
<li>online payments via PayPal Express</li>
<li>offline payments—book now, pay later<br>
</li>
<li>admin stats page with summary information</li>
<li>sync bookings to a provider's Google Calendar</li>
<li>and more<br>
</li>
</ul><p>As for the calendar itself, it displays your booking and appointment calendar with a popup, inline calendar, and more. It also has a stats page where you can view bookings and other information.</p><p><a href="https://codecanyon.net/item/booki-booking-calendar-plugin-a-wordpress-booking-system-for-online-reservation-and-appointments/7460830" rel="external" target="_blank">Booki</a> is an excellent solution for booking appointments with multiple projects and service providers.</p><h3>12. <a href="https://codecanyon.net/item/team-booking-wordpress-booking-system/9211794?_ga=2.134775473.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">Team Booking: WordPress Booking System</a>
</h3><figure class="post_image"><img alt="Team Booking WordPress Booking System" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/team%20booking.jpg" class="loaded"></figure><p>This calendar plugin doesn't try to reinvent the wheel. Instead, Team Booking ties directly into something you're already probably using: <a href="https://www.google.com/calendar" rel="external" target="_blank">Google Calendar</a>. Team Booking's mission is to:</p><blockquote><em>Use Google Calendar to schedule availability.</em></blockquote><p>Additional features include:</p><ul>
<li>team booking</li>
<li>ability to add discount coupons</li>
<li>keep and export your data</li>
<li>supports Stripe and PayPal</li>
<li>appointment approval system</li>
<li>customized forms for each booking type</li>
<li>maps</li>
<li>and more<br>
</li>
</ul><p>There are also a lot of great customer features, like displaying reservations and the option to cancel their appointments.<br></p><p><a href="https://codecanyon.net/item/team-booking-wordpress-booking-system/9211794" rel="external" target="_blank">Team Booking</a> is a fresh take on appointment booking calendars and leverages Google Calendar to the fullest.</p><h3>13. <a href="https://codecanyon.net/item/stachethemes-event-calendar-wordpress-events-calendar-plugin/16168229" target="_self">Stachethemes Event Calendar</a>
</h3><figure class="post_image"><img alt="Stachethemes Event Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/stach.png" class="loaded"></figure><p>This event plugin looks good and comes with out-of-this-world features. You can easily create single, multiple, and all-day events, or events that last for more than one day. You can showcase events in different ways including a grid, box, map, agenda, and more. </p><p>It also comes with a front-end submission form where users can submit events. Users can also share events via Facebook Messenger, WhatsApp, and Viber.</p><p>This event calendar plugin offers everything you need to get started in creating events. </p><p>Other key features include:<br></p><ul>
<li>customizable event sections</li>
<li>a built-in booking system where users can book and pay for tickets and appointments</li>
<li>beautiful designs</li>
<li>Facebook and Disqus comment section</li>
<li>social share</li>
<li>Google Maps location and maps</li>
</ul><h3>14. <a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?_ga=2.104958531.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">HBook: Hotel Booking System</a>
</h3><figure class="post_image"><img alt="HBook Hotel Booking System" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/Hbook.jpg" class="loaded"></figure><p>You can use a one-size-fits-all booking plugin for hotels and B&amp;Bs, or you can use a solution built specifically for them. With the HBook hotel booking system, customers will be able to book directly from your website. </p><p>The plugin features powerful booking management that lets you view bookings and reservations. You can also synchronize your bookings with Airbnb. This snappy plugin includes:</p><ul>
<li>seasons and rates tables</li>
<li>multiple payment gateways such as PayPal, Stripe, Square, and Mollie</li>
<li>availability calendars</li>
<li>customizable booking forms</li>
<li>booking forms and rules</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779" rel="external" target="_blank">HBook</a> has a clean design and is best configured for hotels, B&amp;Bs, and more!</p><h3>15. <a href="https://codecanyon.net/item/responsive-event-scheduler-for-wordpress/15298408" rel="external" target="_blank">Responsive Event Scheduler</a>
</h3><figure class="post_image"><img alt="Responsive Event Scheduler Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/responsive.jpg" class="loaded"></figure><p>The Responsive Event Scheduler plugin is one of the best options for publishing event schedules on your website. It is suitable for music festivals, conferences, conventions, meetings, training, exhibitions, etc.</p><p>Features include:<br></p><ul>
<li>built with standards-compliant HTML5 and CSS3—including SVG icons</li>
<li>one-click color customization</li>
<li>event image options</li>
<li>fully responsive</li>
<li>WPML ready</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/responsive-event-scheduler-for-wordpress/15298408" rel="external" target="_blank">Responsive Event Scheduler</a> is not only impressive from a feature standpoint, but it's one of the best-looking options you're going to find.</p><h3>16. <a href="https://codecanyon.net/item/facebook-events-calendar-for-wordpress/22340219?_ga=2.206596947.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">Facebook Events Calendar</a>
</h3><figure class="post_image"><img alt="Facebook Events Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/fb%20events.jpg" class="loaded"></figure><p>Facebook is where everyone is at, but how do you integrate it with your website?</p><p>The Facebook Events Calendar plugin is a great way to display your Facebook events on your WordPress site in a super-easy way.</p><p>Features include:</p><ul>
<li>displays all events from your Facebook page on the calendar</li>
<li>two layout versions—full and compact</li>
<li>using a widget or shortcode, placing this in the page is super easy</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/facebook-events-calendar-for-wordpress/22340219" rel="external" target="_blank">Facebook Events Calendar</a> is a great way to connect your Facebook with your website.</p><h3>17. <a href="https://codecanyon.net/item/gappointments-appointment-booking-addon-for-gravity-forms/21216523?_ga=2.171999971.1501047258.1564979420-1843124563.1539278404" rel="external" target="_blank">gAppointments: Appointment Booking Add-On for Gravity Forms</a>
</h3><figure class="post_image"><img alt="gAppointments Appointment Booking Add-On for Gravity Forms" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/gappointmrnts.png" class="loaded"></figure><p>If you're already using Gravity Forms and need to integrate appointment booking, this solution is certainly worth a look.<br></p><p>Features include:</p><ul>
<li>supports paid and non-paid booking</li>
<li>accepts any payment gateway</li>
<li>many options for service intervals and slots</li>
<li>and more</li>
</ul><p>Combined with Gravity Forms, <a href="https://codecanyon.net/item/gappointments-appointment-booking-addon-for-gravity-forms/21216523" rel="external" target="_blank">gAppointments</a> is a powerful plugin for booking appointments.</p><h3>18. <a href="https://codecanyon.net/item/chauffeur-booking-system-for-wordpress/21072773" target="_self">Chauffeur Booking System</a>
</h3><figure class="post_image"><img alt="Chauffeur Booking System" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/chauffer.png" class="loaded"></figure><p>As the name suggests, Chauffeur Booking System is a car reservation system suitable for companies of all sizes. It provides an easy way to book a vehicle based on distance, hourly rate, or a flat rate. It also supports WooCommerce and Google Calendar integration.<br></p><p>Other features include:<br></p><ul>
<li>live route preview</li>
<li>unlimited booking forms</li>
<li>multiple payment methods</li>
<li>multiple currencies</li>
<li>geofencing and geolocation</li>
</ul><h3>19. <a href="https://codecanyon.net/item/appointment-booking-for-wordpress-webba-booking/13843131" target="_self">Webba Booking</a>
</h3><figure class="post_image"><img alt="Webba Booking" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/webba.png" class="loaded"></figure><p><a href="https://wordpress.org/plugins/webba-booking-lite/" target="_blank">Webba Booking</a> is specially designed and optimized for service providers, making it possible for them to save time and money. It provides a real-time, two-way Google Calendar synchronization. It also allows you to set different time zones, hence catering to customers all over the world.</p><p>Other key features are:<br></p><ul>
<li>integrations with services such as PayPal, Stripe, and WooCommerce</li>
<li>unlimited appointment schedules</li>
<li>unlimited number of staff appointments and staff members</li>
<li>users can perform multiple bookings simultaneously</li>
</ul><h3>20. <a href="https://codecanyon.net/item/responsive-timetable-for-wordpress/11498444" target="_self">Responsive Timetable for WordPress</a>
</h3><figure class="post_image"><img alt="Responsive Timetable for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/33704/image/timetable.jpg" class="loaded"></figure><p><a href="https://codecanyon.net/item/responsive-timetable-for-wordpress/11498444" target="_self">Responsive Timetable for WordPress</a> is a flexible calendar plugin that can adapt to different types of businesses. This plugin offers the ability to create and showcase events with a clean and responsive interface. You can also create advanced filters for easy event filtering.<br></p><p>Other key features include:</p><ul>
<li>customized fields</li>
<li>a built-in live editor</li>
<li>responsive interface</li>
<li>event popups</li>
<li>a custom CSS and color picker</li>
</ul><h2>5 Free WordPress Calendar Plugins and Widgets for Download in 2020<br>
</h2><p>While the premium plugins and widgets listed above will give the most comprehensive set of features, purchasing a premium plugin or widget may not be in your current budget. That's why I've compiled a list of the top five free calendar plugins and widgets for 2020:</p><h3>1. <a href="https://wordpress.org/plugins/the-events-calendar/" target="_self">The Events Calendar</a>
</h3><figure class="post_image"><img alt="The Events Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/dayf.jpg"></figure><p>With this free plugin, you can create and manage events with ease. The features available on this plugin allow you to completely customize your calendar to fit your business's needs.</p><h3>2. <a href="https://simplecalendar.io/" target="_self">Simple Calendar</a>
</h3><p>Simple Calendar is the easiest way to add Google Calendar events to your WordPress site. The plugin has a ton of great features including design templates, time zone settings, fully responsive calendars, and much more. </p><h3>3. <a href="https://wordpress.org/plugins/all-in-one-event-calendar/" target="_self">All-in-One Event Calendar</a>
</h3><figure class="post_image"><img alt="All-in-One Event Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/cal.jpg"></figure><p>The All-in-One Event Calendar offers a clean visual design with a comprehensive set of features to create an advanced website calendar system. Give this free plugin a try! You won't be disappointed. <br></p><h3>4. <a href="https://wordpress.org/plugins/sugar-calendar-lite/" target="_self">Sugar Calendar </a>
</h3><p>Sugar Calendar is a simple and lightweight calendar that provides you with all the necessary features for event management. The easy-to-use interface and the minimal set of features in this plugin will help you get your event calendar up and running in no time. </p><h3>5. <a href="https://wordpress.org/plugins/booking/" target="_self">Booking Calendar</a>
</h3><p>Whether you are running a real estate business, yoga class, or personal training, the Booking Calendar plugin can help you implement a great booking system. Add this plugin to your collection today!</p><h2>How to Create a Calendar for a Yoga Class With WordPress Pro Event Calendar</h2><p>Now that I have gone over all of the best free and premium plugins available on CodeCanyon, I will show you just how easy it is to create a calendar with one of the premium plugins.  We are going to go over how to create a simple calendar that displays the times of our yoga class on a calendar with the <a href="https://codecanyon.net/item/wordpress-pro-event-calendar/2485867" target="_self">Wordpress Pro Event Calendar</a> plugin. <br></p><h3>1. Create a Calendar</h3><p>Once you have installed the Pro Event Calendar plugin, we will head on over to <strong>WP Dashboard &gt; Event Calendar &gt; Calendars</strong> so we can create the calendar that we want to be displayed on our yoga studio website. Next, click the <strong>Add new calendar</strong> button to create a new calendar. We will fill in the <strong>Title</strong> field to say "Yoga Calendar." Next, click the <strong>save</strong> button at the bottom of the calendar editor. </p><h3>2. Create an Event</h3><p>Now that we have created our calendar, it is time to add our event. Navigate to <strong>WP Dashboard &gt; Event Calendar &gt; All Events. </strong>Click the <strong>Add New</strong> button to create a new event. We will title this event "Yoga Class." <br></p><p>In the right-hand column, we will set up the details for this event. Our yoga class is every Monday, Wednesday, and Friday at 2 p.m., so we need to reflect this in the event. Under <strong>Start Time</strong>, we will type in "2 p.m." Under <strong>Frequency</strong>, select <strong>Weekly</strong>. Then select the checkboxes next to <strong>Monday, Wednesday</strong>, and <strong>Friday</strong>. </p><figure class="post_image"><img alt="Setting start time and frequency" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/ohh.png"></figure><p>Finally, hit the <strong>Publish</strong> button, and the event will now be present on the yoga calendar. </p><h3>3. Add the Calendar to Your Website</h3><p>Now it is time to add the calendar to the website. WordPress uses shortcodes to add the calendar to your website, so we will go back to <strong>WP Dashboard &gt; Event Calendar &gt; Calendars </strong>and copy the shortcode that is under <strong>Default Shortcode. </strong>We will then click <strong>WP Dashboard &gt; Pages &gt; Add New</strong> and title it "Calendar". <br></p><p>In the text editor, we will paste this shortcode. Hit the <strong>Publish</strong> button, and that's it. We have successfully created our yoga calendar, and it's now displayed on a new page that we created. </p><figure class="post_image"><img alt="Yoga Calendar Wordpress Pro Event Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/cal.png"></figure><p>This short tutorial only scratched the surface of what this plugin can do. I also have a more <a href="https://code.tutsplus.com/tutorials/insert-a-calendar-into-wordpress-with-the-pro-event-calendar-plugin--cms-33677" target="_self">in-depth tutorial on this powerful plugin</a>, so be sure to check it out!</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/insert-a-calendar-into-wordpress-with-the-pro-event-calendar-plugin--cms-33677"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/33677/preview_image/ca.jpg"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">Insert a Calendar Into WordPress With the Pro Event Calendar Plugin </div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul><h2>Unlock the Power of CodeCanyon's WordPress Calendar Plugins &amp; Widgets</h2><p>To create a fully functional calendar and booking system on your WordPress website, download one of the many <a href="https://codecanyon.net/search/wordpress%20calendar?view=grid" target="_self">premium calendar plugins and widgets</a> from CodeCanyon.</p><p>The feature-rich plugins on CodeCanyon will help ensure that the booking process is quick and easy, not only for your customers but also for you in the WordPress dashboard.</p><p>What are you waiting for? Get a calendar or booking plugin on your WordPress website today!<br></p><figure><a href="https://codecanyon.net/search/wordpress%20calendar?view=grid" target="_self"><br><img alt="Best-Selling Calendar Plugins and Widgets" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34451/image/use.jpg"><figcaption>Weekly best-selling Calendar WordPress plugins and widgets on CodeCanyon  </figcaption></a></figure><p><br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2020-01-09T13:17:19+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[12 Elegant CSS Pricing Tables for Your Latest Web Project]]></title>
      <link>//shineyrock.com/blog/read/12-elegant-css-pricing-tables-for-your-latest-web-project1</link>
      <guid>https://shineyrock.com/blog/read/12-elegant-css-pricing-tables-for-your-latest-web-project1#When:12:25:11Z</guid>
      <description><![CDATA[<p>Pricing tables are an important part of any website that sells some kind of services and products. You can use them to quickly list the features, similarities, or differences between two, three, or four different products at once.</p><p>These tables give users all the information they need when choosing between different products and services. This, in turn, can result in more business for you. In a way, tables are a win-win tool for both businesses and consumers.</p><figure class="post_image"><a href="https://codecanyon.net/item/hosting-prices/21177681" target="_self"><img alt="Best CSS Pricing Tables" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Kote%20-%20Featured%20Tables%20Collection.png"></a></figure><p>One common problem that you might face when trying to add tables to your own website is that creating them from scratch can be a bit difficult. The table has to look good, and it should also be responsive.</p><p>In this post, we have listed some of the best CSS pricing tables available on CodeCanyon that you can start using in your projects right away.</p><h2>CSS Pricing Tables on CodeCanyon</h2><p>There are currently over <a href="https://codecanyon.net/category/css/pricing-tables?tags=pricing%20table&amp;term=tables" rel="external" target="_blank">110 CSS pricing tables</a> listed on CodeCanyon. Many of them follow a unique approach when it comes to designing pricing tables. This means that you can easily pick a unique responsive pricing table design that makes you stand out from the competition.</p><figure class="post_image"><a href="https://codecanyon.net/category/css/pricing-tables?tags=pricing%20table&amp;term=tables" target="_self"><img alt="CSS Pricing Tables from CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/CSS%20Pricing%20Tables%20from%20CodeCanyon.png"></a></figure><p>The price of these tables starts from as low as $3. New tables are added to the collection every month. You can pick the right table for your business from the best-sellers or the trending section.</p><p>We will also list briefly review some of these tables below to give you a head start.</p><h2>Best CSS Pricing Tables on CodeCanyon</h2><p>Here are the top eight CSS pricing tables that you can buy right now from CodeCanyon:</p><h3><a href="https://codecanyon.net/item/css3-responsive-web-pricing-tables-grids/234948" target="_self">CSS3 Responsive Web Pricing Tables Grids</a></h3><p>This pack of <a href="https://codecanyon.net/item/css3-responsive-web-pricing-tables-grids/234948" rel="external" target="_blank">CSS3 Responsive Web Pricing Tables</a> is one of the highest-rated and top-selling pricing tables on CodeCanyon. It offers a lot of features to back this popularity.</p><figure class="post_image"><a href="https://codecanyon.net/item/css3-responsive-web-pricing-tables-grids/234948" target="_self"><img alt="CSS3 Responsive Web Pricing Tables Grids" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/CSS3%20Responsive%20Web%20Pricing%20Tables%20Grids.png"></a></figure><p>The tables are available in 20 different colors and two different styles. They are responsive and retina ready, so they will look good on devices with different screen sizes and resolutions.</p><p>You can make one of the columns <em>active</em> so that it pops out by default. This is useful if you want to highlight a popular plan or product on the website.</p><p>The columns have an extra hidden ribbon. You can display it on individual columns and edit its appearance using CSS.</p><p>Other features of the table include tooltips, yes/no icons, and animated hover states. The table fully supports old browsers like IE9.</p><p>The <a href="https://codecanyon.net/item/css3-responsive-web-pricing-tables-grids/234948" rel="external" target="_blank">plugin description page</a> links to a video that showcases all the features of this table.</p><h3><a href="https://codecanyon.net/item/responsive-clean-simple-pricing-tables/1927135" target="_self">Responsive Clean Simple Pricing Tables</a></h3><p>Depending on the look that you are going for, sometimes simple tables with minimal use of colors can look great, instead of tables with lots of animation and elements.</p><p>These <a href="https://codecanyon.net/item/responsive-clean-simple-pricing-tables/1927135" rel="external" target="_blank">responsive clean simple pricing tables</a> will be perfect for you if you want to create some basic tables.</p><figure class="post_image"><a href="https://codecanyon.net/item/responsive-clean-simple-pricing-tables/1927135" target="_self"><img alt="Responsive Clean Simple Pricing Tables" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Responsive%20Clean%20Simple%20Pricing%20Tables.png"></a></figure><p>As the name suggests, they are fully responsive and built entirely using CSS. There are seven different color options available. The main accent color of the tables can also be changed easily.</p><p>The tooltips are created using HTML custom data attributes with CSS tooltips. The table supports all major browsers and comes with jQuery fallbacks for older browsers.</p><h3><a href="https://codecanyon.net/item/round-pricing-tables/4963480" target="_self">Round Pricing Tables</a></h3><p>These <a href="https://codecanyon.net/item/round-pricing-tables/4963480" rel="external" target="_blank">round pricing tables</a> are ideal for people who want to display multiple products or services on a single page.</p><figure class="post_image"><a href="https://codecanyon.net/item/round-pricing-tables/4963480" target="_self"><img alt="Round Pricing Tables" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Round%20Pricing%20Tables.png"></a></figure><p>These tables take very little space and still convey all the necessary information. This is because the services or features of a plan are shown only when the users hover over the tables.</p><p>The tables have a clean design without a lot of clutter. The animations are powered entirely by CSS, and you can easily change the color of different elements in the CSS itself. The tables are very lightweight because they don't rely on images to create the layout.</p><p>You should visit the <a href="https://codecanyon.net/item/round-pricing-tables/4963480" rel="external" target="_blank">description page</a> and take a look at the screenshots of the table or the preview video.</p><h3><a href="https://codecanyon.net/item/hosting-prices/21177681" target="_self">Kote—Featured Tables Collection</a></h3><p>If you are looking for modern and responsive CSS tables, then <a href="https://codecanyon.net/item/hosting-prices/21177681" rel="external" target="_blank">Kote—Featured Tables Collection</a> is perfect for you.</p><figure class="post_image"><a href="https://codecanyon.net/item/hosting-prices/21177681" target="_self"><img alt="KoteFeatured Tables Collection" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Kote%20-%20Featured%20Tables%20Collection.png"></a></figure><p>This collection has 34 different tables that should cover almost every scenario where you can use a pricing table.</p><p>The first set of templates contains tables that are packed closely together, with the middle column popping out from the group. The middle column of the pricing table also has a subtle pulsating animation applied to it to draw attention.</p><p>The second set of templates contains tables with a distinct header, body, and footer. They have a simpler design with properly separated columns.</p><p>The third set of templates uses fully colored tables with background images that blend perfectly with the background. The downloadable <strong>zip</strong> archive contains separate SVG files for these backgrounds and other icons.</p><p>Overall, this <a href="https://codecanyon.net/item/hosting-prices/21177681" rel="external" target="_blank">collection of tables</a> is suitable for anyone who wants to have a lot of design options available when creating a pricing table.</p><h3><a href="https://codecanyon.net/item/colorful-pricing-table/6794127" target="_self">Colorful Pricing Table</a></h3><p>Most pricing tables use different colors for only the header and the footer of a column. However, <a href="https://codecanyon.net/item/colorful-pricing-table/6794127" rel="external" target="_blank">colorful pricing table</a> uses a unique approach of adding a nice background color over the entire table. This gives the tables a catchy look.</p><figure class="post_image"><a href="https://codecanyon.net/item/colorful-pricing-table/6794127" target="_self"><img alt="Colorful Pricing Table" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Colorful%20Pricing%20Table.png"></a></figure><p>These tables have four distinct layouts to showcase your plans and products. All these styles are fully responsive, so they look great even on mobile devices.</p><p>The smooth animation, fully colored columns, and flat design used in creating these tables make them unique among all the tables listed in this post.</p><p>You should visit the <a href="https://codecanyon.net/item/colorful-pricing-table/6794127" rel="external" target="_blank">table description page</a> and check out the preview video to see if the tables are suitable for your projects.</p><h3><a href="https://codecanyon.net/item/horizontal-vertical-pricing-tables/19676269" target="_self">Horizontal and Vertical Pricing Tables</a></h3><p>If you are looking for unique layout options to display pricing tables on your website, then these <a href="https://codecanyon.net/item/horizontal-vertical-pricing-tables/19676269" rel="external" target="_blank">horizontal and vertical pricing tables</a> are definitely worth checking out.</p><figure class="post_image"><a href="https://codecanyon.net/item/horizontal-vertical-pricing-tables/19676269" target="_self"><img alt="Horizontal  Vertical Pricing Tables" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Horizontal%20Vertical%20Pricing%20Tables.png"></a></figure><p>Two things make these tables stand out. First, they allow you to create pricing tables that are laid out horizontally. Most CSS pricing table solutions only focus on vertical layouts. Second, the tables rely on a well-thought-out combination of colors and animation to give you that feeling of professionalism.</p><p>The smooth transition of colors when you hover over different tables is very satisfying to watch. The tables are divided into three distinct sections for the header, the main body, and the footer. The tables are also fully responsive, so they look great on all devices. Take a look at the <a href="https://preview.codecanyon.net/item/horizontal-vertical-pricing-tables/full_screen_preview/19676269" rel="external" target="_blank">live preview</a> to experience it all yourself.</p><h3><a href="https://codecanyon.net/item/modern-bootstrap-pricing-tables/18603774" target="_self">Modern—Bootstrap 4 Pricing Tables</a></h3><p>Bootstrap is a popular framework used by many websites to quickly create their front end. If your website has also been created using Bootstrap, then it makes sense to use pricing tables that were made specifically for Bootstrap. This will make their integration into existing websites a lot easier and keep the size of the CSS file a bit smaller. <br></p><p>One of the best ways to quickly add Bootstrap based pricing tables to your website is to use the <a href="https://codecanyon.net/item/modern-bootstrap-pricing-tables/18603774" rel="external" target="_blank">modern Bootstrap 4 pricing tables</a>.</p><figure class="post_image"><a href="https://codecanyon.net/item/modern-bootstrap-pricing-tables/18603774" target="_self"><img alt="ModernBootstrap 4 Pricing Tables" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Modern%20-%20Bootstrap%204%20Pricing%20Tables.png"></a></figure><p>There are nine different table layouts, with six different color options. The tables are fully responsive, just like their parent framework.</p><p>You can present your products and services with a modern, clean, and unique design using these Bootstrap 4 pricing tables.</p><h3><a href="https://codecanyon.net/item/loki-pricing-table-generator/22536551" target="_self">Loki Pricing Table Generator</a></h3><p>Not everyone is comfortable when it comes to making changes to HTML and CSS to customize a pricing table. The <a href="https://codecanyon.net/item/loki-pricing-table-generator/22536551" rel="external" target="_blank">Loki Pricing Table Generator</a> solves this problem by giving you the tools to easily customize the basic features of the pricing tables.</p><figure class="post_image"><a href="https://codecanyon.net/item/loki-pricing-table-generator/22536551" target="_self"><img alt="Loki Pricing Table Generator" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Loki%20Pricing%20Table%20Generator.png"></a></figure><p>There are eight different table layouts. However, you can change various aspects like the primary, secondary, and background color to make them unique. Similarly, you can change the font size for the pricing, features, title, etc.</p><p>The generator also gives you the option to change the text of different rows and columns without actually touching the pricing table markup. In the end, you can simply click on the <strong>Code</strong> button to directly download the HTML and CSS files for the table created.</p><h2>Free CSS Pricing Tables</h2><p>Before I start listing a few free CSS pricing tables, there are a few things that I should clear up.</p><p>There aren't a lot of dedicated libraries and frameworks out there created specifically to generate fancy pricing tables. You will have to look around for a while before you can find some pricing tables that look professional and go well with the overall design of your website.</p><p>Keeping these points in mind, it might simply be easier for you to buy one of the premium pricing tables, which come with different templates and clean, professional design. You also get lifetime free updates for any pricing tables you download.</p><p>If you still want to give some free CSS pricing tables a try, then the ones I listed below will be a good start.</p><h3>Pricing Table With Hover Animation</h3><p>This <a href="https://codepen.io/retyui/pen/XmJXzd" rel="external" target="_blank">pricing table</a> enlarges the table that users are hovering over with a nice, smooth animation.</p><h3>Responsive Pricing Table</h3><p>This <a href="https://codepen.io/ericthayer/pen/jbvyLM" rel="external" target="_blank">responsive pricing table</a> uses Flexbox to create the layout. Minimal use of colors and other styling elements makes it very easy to integrate with the design of existing websites.</p><h3>Pricing Table With a Prominent Header</h3><p>This <a href="https://codepen.io/hmache/pen/vGRBEr" rel="external" target="_blank">multi-colored pricing table</a> comes with prominent headers to display a big title for the product or service as well as its price.</p><figure class="post_image"><img alt="Pricing Table with a Prominent Header" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/Pricing%20Tables%20with%20Prominent%20Header.png"></figure><p>The pricing columns are properly separated from each other, and they don't have hover animation applied to them. There is a little badge that you can add to the top of a column to indicate the most popular plans, etc.</p><h3>Pricing Table With Enlarged Column</h3><p>A common practice to highlight a popular product or service in a pricing table is to enlarge its column to make it stand out. This <a href="https://codepen.io/xhepigerta/pen/oxxQaw" rel="external" target="_blank">pricing table</a> helps you do exactly that. It has a very simple layout with a subtle background animation on hover.</p><h2>Best Practices to Keep in Mind When Creating Pricing Tables</h2><p>Pricing tables are generally placed in a prime location on a website, and they are used to highlight the main products and services that you offer. Therefore, it makes sense to follow all the best practices when you create these tables.</p><p>Here are a few things that you should remember when creating pricing tables:</p><h3>1. Make the Tables Responsive<br>
</h3><p>A lot of traffic to a website generally comes from mobile devices nowadays. There is no fixed resolution that you can target when creating pricing tables. Therefore, it is important to make sure that your pricing tables look good on all screen sizes. The premium CSS pricing tables from CodeCanyon are already responsive, so you won't even have to worry about it when using them.</p><h3>2. Use Fewer Words</h3><p>Pricing tables are meant to give users all the necessary information they need about different products at a glance. Use them to list the most important distinguishing features of these products. Other details can be mentioned somewhere else on the website.</p><h3>3. Include a Prominent Call-to-Action Button</h3><p>Hopefully, the pricing tables that you create will give users all the necessary information that they want before making a purchasing decision. Once they decide to buy one of your products and services, you should make it as easy as possible for them to complete the purchase. The best way to do that is to include a button to make the purchase somewhere in the pricing table itself.</p><h2>Final Thoughts</h2><p>As we discussed at the beginning of this post, pricing tables are a great way to drive more business by allowing users to quickly compare different products and services.</p><p>Creating a responsive and nicely designed pricing table from scratch can be a daunting and time-consuming task. That is why you should consider using one of the premium <a href="https://codecanyon.net/category/css/pricing-tables?tags=pricing%20table&amp;term=tables" rel="external" target="_blank">CSS pricing tables available on CodeCanyon</a>.</p><figure class="post_image"><a href="https://codecanyon.net/category/css/pricing-tables?tags=pricing%20table&amp;term=tables" target="_self"><br><img alt="CSS Pricing Tables from CodeCanyon" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/34377/image/CSS%20Pricing%20Tables%20from%20CodeCanyon.png"></a></figure><p>Which pricing table do you like the most from the ones we mentioned in the post? Let us know in the comments.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-12-30T12:25:11+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[24 Best WordPress Form Plugins for 2020]]></title>
      <link>//shineyrock.com/blog/read/24-best-wordpress-form-plugins-for20201</link>
      <guid>https://shineyrock.com/blog/read/24-best-wordpress-form-plugins-for20201#When:12:21:52Z</guid>
      <description><![CDATA[<p>Add a feature-rich and easy-to-use form plugin to your WordPress website to help you collect information that is vital to the functionality and growth of your business.</p><figure class="post_image"><a href="https://codecanyon.net/item/nexforms-the-ultimate-wordpress-form-builder/7103891" target="_self"><img alt="NEX-Forms Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/25721/image/contact%20us.png"></a><figcaption><a href="https://codecanyon.net/item/nexforms-the-ultimate-wordpress-form-builder/7103891" target="_self">One of the many high-quality WordPress form plugins available on CodeCanyon</a></figcaption></figure><p>The form WordPress plugins available on <a href="https://codecanyon.net/category/wordpress/forms" target="_self">CodeCanyon</a> will allow you to seamlessly integrate a customized form that your business needs to collect valuable information on your customers and potential customers. </p><h2>The Best WordPress Form Plugins on CodeCanyon</h2><p>Explore over 7,000 of the best WordPress plugins ever created on CodeCanyon. With a low-cost one time payment, you can purchase these high-quality WordPress plugins and improve your website experience for you and your visitors. </p><p>Here are a few of the weekly best-selling and up-and-coming form WordPress plugins available on CodeCanyon for 2020.</p><figure class="post_image"><a href="https://codecanyon.net/category/wordpress/forms" target="_self"><img alt="Weekly Best Selling Form WordPress Plugins 2020" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/go.jpg"></a><figcaption>Weekly best-selling and rising star form WordPress plugins on <a href="https://codecanyon.net/category/wordpress/forms" target="_self">CodeCanyon</a> </figcaption></figure><p>These powerful form-creating plugins allow you to capture the most important information from your visitors. The flexibility and feature-rich form plugins allow you to add a wide variety of forms on your website, such as:</p><ul>
<li>contact forms</li>
<li>quizzes</li>
<li>article submission forms</li>
<li>price estimations</li>
<li>booking forms</li>
</ul><p>At the bare minimum, you will want to have a contact form on your website regardless of what type of website you have, so head on over to <a href="https://codecanyon.net/category/wordpress/forms" target="_self">CodeCanyon</a> and choose from the premium plugins available. </p><h2>Top 19 Form WordPress Form Plugins (From CodeCanyon for 2020)<br>
</h2><p>Here are 19 of the top-rated WordPress form plugins that are available for you to download on CodeCanyon:</p><h2>1. <a href="https://codecanyon.net/item/formcraft-premium-wordpress-form-builder/5335056" rel="external" target="_blank">FormCraft—Premium WordPress Form Builder</a><br>
</h2><p>If you need to craft a form that's more than your standard contact form, this is what you're looking for.</p><p>FormCraft's feature set includes powerful options that are sure to meet almost anything you need to build a WordPress form.</p><figure class="post_image"><img alt="FormCraft - Premium WordPress Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/FormCraft-image.png" class="loaded"></figure><p>Here are some of the highlights:</p><ul>
<li>form validation</li>
<li>conditional logic</li>
<li>customized notifications</li>
<li>AJAX-powered interface<br>
</li>
<li>submissions in your inbox</li>
<li>drag-and-drop form builder</li>
<li>forms presented as popup, slide up, fly in, or widget</li>
<li>and much more<br>
</li>
</ul><p>You'll find it fully responsive, with retina-optimized images for fields. And if you need to integrate multi-page forms and payment gateways? You can look to the available <a href="https://codecanyon.net/item/formcraft-premium-wordpress-form-builder/5335056" rel="external" target="_blank">FormCraft - Premium WordPress Form Builder</a> add-ons.</p><h2>2. <a href="https://codecanyon.net/item/quform-wordpress-form-builder/706149" rel="external" target="_blank">Quform—WordPress Form Builder</a><br>
</h2><p>Quform does a good job setting itself apart from other WordPress form plugins.</p><p>The simple drag-and-drop interface and flexible styling are where this WordPress form plugin shines the most.</p><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/quform-image.jpg" class="loaded"></figure><p>Fully responsive and with the new Google reCAPTCHA, you'll find this and more:</p><ul>
<li>conditional logic</li>
<li>fully translatable</li>
<li>live design preview</li>
<li>drag-and-drop interface</li>
<li>edit CSS in the form builder admin</li>
<li>includes three themes with five variations</li>
<li>export submitted data to Excel/OpenOffice</li>
<li>entries submitted within WordPress and via email</li>
</ul><p>The unique theming system makes it easy to make your forms look great, but without sacrificing many of the features users are looking for in a premium WordPress form plugin like <a href="https://codecanyon.net/item/quform-wordpress-form-builder/706149" rel="external" target="_blank">Quform</a>.</p><h2>3. <a href="https://codecanyon.net/item/wordpress-form-builder-survey-quiz-fsqm-pro/3180835" rel="external" target="_blank">eForm—WordPress Form Builder</a><br>
</h2><p>eForm (Previously FSQM Pro) is an advanced and flexible form builder that can be integrated into your existing WordPress site. This is a complete form management solution for quizzes, surveys, data collection, payment/cost estimation, and user feedback of all kinds. <br></p><figure class="post_image"><a href="https://codecanyon.net/item/eform-wordpress-form-builder/3180835" target="_self"><img alt="eForm - WordPress Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/2273/posts/25721/image/eForm-WP-Builder.jpg" class="loaded"></a></figure><p>But don't let the "easy to use" tools deter you from its functionality.</p><p>Options include, but are certainly not limited to:<br></p><ul>
<li>fully responsive, state of the art design</li>
<li>intuitive form builder—no coding required</li>
<li>heavy on security, hard on bots</li>
<li>automated quiz system</li>
<li>survey system</li>
<li>ecommerce system</li>
<li>login, registration, and guest blogging</li>
<li>mathematics powerhouse</li>
<li>reports and statistics</li>
</ul><p>With the quick and easy drag-and-drop form builder, you can build unlimited forms and manage them from your admin dashboard. All submissions are stored in your eForm database, so you can view, track, analyze, and act on the data you have captured. A user portal also allows registered users to review and track their submissions.<br></p><p><a href="https://codecanyon.net/item/eform-wordpress-form-builder/3180835" target="_self">eForm - WordPress Form Builder</a> is a robust and comprehensive form builder with the perfect combination of style and functionality: packed with all the elements you need, while clean and elegant to use.<br></p><h2>4. <a href="https://codecanyon.net/item/nexforms-the-ultimate-wordpress-form-builder/7103891" rel="external" target="_blank">NEX-Forms—The Ultimate WordPress Form Builder</a><br>
</h2><p>NEX-Forms—The Ultimate WordPress Form Builder may be just that.</p><p>The ultimate.</p><figure class="post_image"><img alt=" NEX-Forms - The Ultimate WordPress Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/nex-forms-image.jpg" class="loaded"></figure><p>At first glance, you'll see features you would expect:</p><ul>
<li>math logic</li>
<li>drag and drop</li>
<li>fully responsive</li>
<li>conditional logic</li>
<li>multi-step forms</li>
<li>email autoresponder<br>
</li>
<li>etc.</li>
</ul><p>But when you begin to dig a little deeper, you'll see “the ultimate” isn't just over-zealous marketing.</p><p>More notable features include:</p><ul>
<li>popup forms</li>
<li>660+ vector icons</li>
<li>50+ form elements</li>
<li>1200+ Google Fonts</li>
<li>Font Awesome integration</li>
<li>more<br>
</li>
</ul><p>Finally, it's the <a href="https://codecanyon.net/item/nexforms-the-ultimate-wordpress-form-builder/7103891" rel="external" target="_blank">NEX-Forms</a>—<a href="https://codecanyon.net/item/nexforms-the-ultimate-wordpress-form-builder/7103891" rel="external" target="_blank">The Ultimate WordPress Form Builder</a> grid layout system that gives you a lot of drag-and-drop control with your form layout.</p><h2>5. <a href="https://codecanyon.net/item/arforms-wordpress-form-builder-plugin/6023165" rel="external" target="_blank">ARForms: WordPress Form Builder Plugin</a><br>
</h2><p>This WordPress form plugin hits a nice mix of features and easy customization.</p><p>ARForms is integrated with Twitter Bootstrap, supports seven autoresponder systems, and is fully compatible with WPML.org.</p><figure class="post_image"><img alt="ARForms WordPress Form Builder Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/ARforms-image.jpg" class="loaded"></figure><p>You can embed your forms in the page or choose to have them fly, stick, or pop up on page load. A great option for newsletter signups and announcements.</p><p>Additional features include:</p><ul>
<li>CSV export</li>
<li>form analytics</li>
<li>conditional logic</li>
<li>supports Google Fonts<br>
</li>
<li>multi-column form support</li>
<li>password strength indicator<br>
</li>
<li>collection of commonly used form templates</li>
<li>and more</li>
</ul><p>There are 24 elements and 500+ icons included with <a href="https://codecanyon.net/item/arforms-wordpress-form-builder-plugin/6023165" rel="external" target="_blank">ARForms: WordPress Form Builder Plugin</a> as well as a full-featured styling tool for CSS customization.</p><p>And if this isn't enough to get the job done, there are many helpful add-ons available for this full-featured form builder.</p><h2>6. <a href="https://codecanyon.net/item/usernoise-pro-modal-feedback-contact-form/1420436" rel="external" target="_blank">Usernoise Pro Modal Feedback &amp; Contact Form</a><br>
</h2><p>Capturing user and customer feedback is quick and easy with this modal feedback form.</p><p>The Usernoise Pro Modal Feedback &amp; Contact Form has a great minimal style and is highly configurable.</p><figure class="post_image"><img alt="Usernoise Pro Modal Feedback  Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/usernoise-image.png" class="loaded"></figure><p>You can:</p><ul>
<li>Use the four built-in categories or edit them as you like.</li>
<li>Reply to feedback via email when you receive a notification.<br>
</li>
<li>Insert a shortcode into any page to display feedback discussions.</li>
</ul><p>And it integrates with Akismet to handle spam.</p><p>There aren't a lot of bells and whistles with the <a href="https://codecanyon.net/item/usernoise-pro-modal-feedback-contact-form/1420436" rel="external" target="_blank">Usernoise Pro Modal Feedback &amp; Contact Form</a>, but it is a powerful way to connect and collect feedback.</p><h2>7. <a href="https://codecanyon.net/item/ninja-kick-wordpress-contact-form-plugin/6598780" rel="external" target="_blank">Ninja Kick: WordPress Contact Form Plugin</a><br>
</h2><p>Ninja Kick: WordPress Contact Form Plugin puts an extra <em>kick</em> into your WordPress forms.</p><p>You can use this as a stand-alone contact form or use its unique styling and effects in conjunction with popular form plugins like Contact Form 7, Gravity Forms, and others.<br></p><figure class="post_image"><img alt="Ninja Kick WordPress Contact Form Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/NinjaKick-image.jpg" class="loaded"></figure><p>Website users can immediately call up the contact form without having to wait for a page to load—complete with slide-in animation.</p><p>It features:</p><ul>
<li>Mailchimp opt-in</li>
<li>responsive design</li>
<li>30 built-in backgrounds</li>
<li>color picker for easy styling</li>
<li>supports swiping on mobile devices</li>
<li>and more<br>
</li>
</ul><p>This form plugin does support WPML, but it should be noted that RTL needs to be customized to work properly in Google Chrome.</p><p><a href="https://codecanyon.net/item/ninja-kick-wordpress-contact-form-plugin/6598780" rel="external" target="_blank">Ninja Kick: WordPress Contact Form Plugin</a> is a stylish, fast-loading plugin that works great as a contact or newsletter submission form—or even more complicated forms built using more robust WordPress form plugins.</p><h2>8. <a href="https://codecanyon.net/item/wp-cost-estimation-payment-forms-builder/7818230" target="_self">WP Cost Estimation &amp; Payment Forms Builder</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/wp-cost-estimation-payment-forms-builder/7818230" target="_self"><img alt="WP Cost Estimation  Payment Forms Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/EstimationPaymentForms_Img.jpeg"></a></figure><p>This WordPress form plugin is more eCommerce centric. If you are selling any service or product, you can create your own responsive cost calculator or payment forms. </p><p>Having this form is invaluable if you need to provide estimations for your potential customers as it saves you time from having to talk to customers that are not interested in your service. The popular payment platforms, PayPal, Razorpay, or Stripe are all available to use with this form. </p><p>In addition to all of these great features, there is also a booking system that is included to help you manage your calendars, events, and reminders. This plugin is one of the best-selling form plugins on CodeCanyon for a reason!</p><h2>9. <a href="https://codecanyon.net/item/privatecontent-user-data-addon/2399731" target="_self">PrivateContent—User Data Add-On</a><br>
</h2><p>The User Data add-on boosts your PrivateContent plugin, allowing you to create and use unlimited fields to record more information from your users.<br></p><p>Each field is dynamically validated and is also really flexible, letting you target what will be required. String length, numeric ranges, multi-option checks, preset texts (integer and floating numbers, e-mail address, dates, URL, etc.) and also room to use advanced regex. Say goodbye to fake data being stored!</p><figure class="post_image"><a href="https://codecanyon.net/item/privatecontent-user-data-addon/2399731" target="_self"><img alt="PrivateContent - User Data add-on" data-src="https://cms-assets.tutsplus.com/uploads/users/2273/posts/25721/image/PrivateContent.jpg" class="loaded"></a></figure><p>Features include:<br></p><ul>
<li>extend your user database</li>
<li>custom forms builder</li>
<li>forced password reset system</li>
<li>import system integration</li>
<li>manage and export data</li>
<li>conditional data restriction shortcode</li>
<li>user data shortcode</li>
<li>automatic updates</li>
<li>walkthrough videos</li>
</ul><p><a href="https://codecanyon.net/item/privatecontent-user-data-addon/2399731" target="_self">The PrivateContent - User Data add-on</a> is an add-on. You must have at least <a href="https://codecanyon.net/item/privatecontent-multilevel-content-plugin/1467885">PrivateContent</a> v6 to use it.</p><h2>10. <a href="https://codecanyon.net/item/totalpoll-pro-wordpress-poll-plugin/7647147" rel="external" target="_blank">TotalPoll Pro—WordPress Poll Plugin</a><br>
</h2><p>One does not simply set up a poll on WordPress.</p><p>TotalPoll Pro <em>is</em> a pro poll plugin for WordPress—boasting over 70 features.</p><figure class="post_image"><img alt="TotalPoll Pro - WordPress Poll Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/totalpoll-image.jpg" class="loaded"></figure><p>Fully responsive and easy to include in WordPress using a shortcode, widget, or direct link, additional features include:</p><ul>
<li>custom fields</li>
<li>beautiful templates</li>
<li>six different anti-cheating layers</li>
<li>reCaptcha service to protect against bots</li>
<li>display archived poll results and export results as CSV</li>
<li>and much more</li>
</ul><p>Several language translations are available, and if you're planning on publishing many polls or building a site focused on polling, <a href="https://codecanyon.net/item/totalpoll-pro-wordpress-poll-plugin/7647147" rel="external" target="_blank">TotalPoll Pro</a> is SEO friendly.</p><h2>11. <a href="https://codecanyon.net/item/ez-form-calculator-wordpress-plugin/7595334" rel="external" target="_blank">ez Form Calculator—WordPress Plugin</a><br>
</h2><p>The ez Form Calculator can be used with WooCommerce and PayPal.</p><p>A few use case scenarios include:</p><ul>
<li>real estate</li>
<li>event managers</li>
<li>media agencies</li>
<li>charity organizations</li>
<li>freight costs</li>
<li>photography studios</li>
<li>etc.</li>
</ul><figure class="post_image"><img alt="ez Form Calculator - WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/ez-form-calc-image.jpg" class="loaded"></figure><p>Build your forms using the drag-and-drop editor or use the import/export feature.</p><p>Additional features include:</p><ul>
<li>discounts</li>
<li>file uploads</li>
<li>conditional logic</li>
<li>Mailchimp integration</li>
<li>advanced calculation and back-end security verification</li>
</ul><p>Whether you're using <a href="https://codecanyon.net/item/ez-form-calculator-wordpress-plugin/7595334" rel="external" target="_blank">ez Form Calculator - WordPress Plugin</a> as your primary form or along with WooCommerce, you'll find that it really adds up.</p><h2>12. <a href="https://codecanyon.net/item/super-forms-drag-drop-form-builder/13979866" target="_self">Super Forms—Drag &amp; Drop Form Builder</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/super-forms-drag-drop-form-builder/13979866" target="_self"><img alt="Super Forms - Drag  Drop Form Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/super-forms-inline.jpeg"></a></figure><p>Super Forms is an incredibly powerful form plugin that allows you to design a form that functionally and stylistically fits your needs. The different options available for you to create your form are as follows:</p><ul>
<li>layout elements</li>
<li>form elements</li>
<li>HTML elements</li>
</ul><p>You can adjust the form settings to send out a confirmation email to the user that filled out the form and send an email to notify you that a form was submitted. Super Forms lives up to its name with all of its advanced editing options. </p><h2>13. <a href="https://codecanyon.net/item/event-booking-pro-forms-manager-add-on/6961692" rel="external" target="_blank">Event Booking Pro: Forms Manager Add On</a><br>
</h2><p>Event Booking Pro: Forms Manager Add On extends the power of Event Booking Pro, giving you the ability to add custom fields to your event booking pages.</p><p>This is an <em>add-on</em>, so <a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" rel="external" target="_blank"><strong>Event Booking Pro</strong></a><strong> </strong><em>is required</em> for this to work.</p><figure class="post_image"><img alt="Event Booking Pro Forms Manager Add On" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/event-booking-pro-form-manager-add-on-image.png" class="loaded"></figure><p>The <a href="https://codecanyon.net/item/event-booking-pro-forms-manager-add-on/6961692" rel="external" target="_blank">Event Booking Pro: Forms Manager Add On</a> includes many input types, including:</p><ul>
<li>text</li>
<li>email</li>
<li>select</li>
<li>text area</li>
<li>static text</li>
<li>check box</li>
<li>radio buttons</li>
<li>terms and conditions<br>
</li>
</ul><p>If you are already using <a href="https://codecanyon.net/item/event-booking-pro-wp-plugin-paypal-or-offline/5543552" rel="external" target="_blank">Event Booking Pro</a>, using the <a href="https://codecanyon.net/item/event-booking-pro-forms-manager-add-on/6961692" rel="external" target="_blank">Event Booking Pro: Forms Manager Add On</a> really expands its usability.</p><h2>14. <a href="https://codecanyon.net/item/contact-form-7-pipedrive-crm-integration/21052205" target="_self">Contact Form 7 Pipedrive CRM Integration</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/contact-form-7-pipedrive-crm-integration/21052205" target="_self"><img alt="Contact Form 7 Pipedrive CRM Integration" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/590x300.jpg"></a></figure><p>This contact form is a bit more advanced than the others listed due to its integration with the customer relationship manager Pipedrive CRM. If you are running any type of eCommerce store, this form plugin will be a valuable addition to your website. </p><p>By integrating this form with Pipedrive CRM, you will be able to automatically create new contacts and store information about these contacts and can send them down a sales funnel. If you are looking to take your eCommerce store seriously, then Contact Form 7 and Pipedrive CRM integration is a must-have. </p><h2>15. <a href="https://codecanyon.net/item/storage-for-contact-form-7-/7806229" rel="external" target="_blank">Storage for Contact Form 7</a><br>
</h2><p>Extend the power of Contact Form 7 with Storage for Contact Form 7.</p><p>This plugin add-on is a good way to avoid servers mishandling Contact Form 7 submissions and losing them into the Black Hole of the Internet.</p><p>Just to be clear,<strong> </strong><em>Contact Form 7 is required</em> for this to work.</p><figure class="post_image"><img alt="Storage for Contact Form 7" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/contact%20form%207%20storage%20image.jpg" class="loaded"></figure><p>All form submissions are stored in your WordPress database—including attachments. You can also have submissions sent to you via email, but all data is collected in the Admin and can also be exported to CSV.</p><p>Additional data collected by <a href="https://codecanyon.net/item/storage-for-contact-form-7-/7806229" rel="external" target="_blank">Storage for Contact Form 7</a> includes:</p><ul>
<li>time</li>
<li>date</li>
<li>email</li>
<li>subject</li>
<li>IP address</li>
<li>attachments</li>
<li>URL referrer</li>
<li>and more</li>
</ul><p>This plugin add-on is a great way to extend Contact Form 7's usability.</p><h2>16. <a href="https://codecanyon.net/item/exporter-for-fsqm-pro-reports-submissions/5702784" rel="external" target="_blank">Exporter for eForm—Reports &amp; Submissions</a><br>
</h2><p><em>This is an add-on plugin;</em> a very nice addition to <a href="https://codecanyon.net/item/wordpress-form-builder-survey-quiz-fsqm-pro/3180835" rel="external" target="_blank">eForm—WordPress Form Builder</a>.</p><p>Exporter for eForm—Reports &amp; Submissions takes the user data collected and imports it into a number of useful formats.</p><figure class="post_image"><a href="https://codecanyon.net/item/exporter-for-eform-reports-submissions/5702784" target="_self"><img alt="Exporter for eForm - Reports  Submissions" data-src="https://cms-assets.tutsplus.com/uploads/users/2273/posts/25721/image/eForm-Exporter.jpg" class="loaded"></a></figure><p>Exportable formats include:</p><ul>
<li>PDF</li>
<li>HTML</li>
<li>CSV</li>
<li>XLS</li>
<li>XLSX</li>
</ul><p>You can also include charts with most export formats.</p><p>There are some extra customizations you can make to your PDF exports—handy for quick reports—but most users will find the raw data exports extremely useful.</p><p><a href="https://codecanyon.net/item/exporter-for-fsqm-pro-reports-submissions/5702784" rel="external" target="_blank">Exporter for eForm—Reports &amp; Submissions</a> is a very useful add-on for the <a href="https://codecanyon.net/item/wordpress-form-builder-survey-quiz-fsqm-pro/3180835" rel="external" target="_blank">eForm WordPress Form Builder</a> plugin.</p><h2>17. <a href="https://codecanyon.net/item/accesspress-anonymous-post-pro/9160446" rel="external" target="_blank">AccessPress Anonymous Post Pro</a><br>
</h2><p>Building a WordPress site that allows visitors to submit standard WordPress posts or post types, whether they're logged in or not, requires a particular set of features.</p><p>AccessPress Anonymous Post Pro has that exact feature set.</p><figure class="post_image"><img alt="AccessPress Anonymous Post Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/access%20press%20image.jpg" class="loaded"></figure><p>In full HTML5 responsiveness, you can customize a front-end posting form with all the right options. It's like having several plugins in one.</p><p>The included options and features are:</p><ul>
<li>captcha</li>
<li>post details</li>
<li>custom fields</li>
<li>email notifications</li>
<li>field type selectors</li>
<li>media uploading tools</li>
<li>media library integration</li>
<li>drag and drop form builder</li>
<li>post types and taxonomies</li>
<li>templates and styling features</li>
<li>select or exclude categories and tags</li>
<li>and more<br>
</li>
</ul><p>There are other plugins like this, but you'll be hard-pressed to find one that offers this much flexibility and options.</p><p><a href="https://codecanyon.net/item/accesspress-anonymous-post-pro/9160446" rel="external" target="_blank">AccessPress Anonymous Post Pro</a> does a great job of bringing everything that's in the post admin side of WordPress and bringing it to the front end.</p><h2>18. <a href="https://codecanyon.net/item/frontend-publishing-pro/8517990" rel="external" target="_blank">Frontend Publishing Pro</a><br>
</h2><p>Much like the previous plugin, Frontend Publishing Pro brings the back end of WordPress to the front.</p><p>Configure an unlimited number of forms—with your settings and restrictions for each form—and easily add them to any page using a shortcode.</p><figure class="post_image"><img alt="Frontend Publishing Pro" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25721/image/frontennd-pub-pro-image.png" class="loaded"></figure><p>You have the option to give users full access to their own post-management, including view, edit, and delete. Users can upload files within the limits you put in place, such as max upload size and file type.</p><p>Other features include:</p><ul>
<li>custom fields</li>
<li>layered security</li>
<li>email notifications</li>
<li>CopyScape integration</li>
<li>drag-and-drop form builder</li>
<li>supports any post type and custom taxonomies</li>
<li>more!<br>
</li>
</ul><p>Quickly and easily set up front-end publishing with <a href="https://codecanyon.net/item/frontend-publishing-pro/8517990" rel="external" target="_blank">Frontend Publishing Pro</a>.</p><h2>19. <a href="https://codecanyon.net/item/form-builder-for-wordpress-green-forms/24002760" target="_self">WordPress Form Builder—Green Forms</a>
</h2><figure class="post_image"><a href="https://codecanyon.net/item/form-builder-for-wordpress-green-forms/24002760" target="_self"><img alt="WordPress Form Builder - Green Forms" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/banner-wordpress.jpg"></a></figure><p>Green Forms for WordPress allows you to create multi-purpose, stylish forms that match the design of your website. Here are a few of the features that you can adjust in this plugin:</p><ul>
<li>fonts</li>
<li>colors</li>
<li>conditional behavior</li>
<li>integrations with marketing, newsletter, and CRM systems</li>
</ul><p>Each of the forms created can be embedded into posts, pages, and even sidebars, so you can find the perfect placement for them. Download this powerful form plugin now!</p><h2>Free Form WordPress Plugins for Download in 2020<br>
</h2><p>By purchasing a premium WordPress form plugin, you will receive the most comprehensive set of tools available. The number of features that these plugins will have and the overall user experience will be much higher with a premium plugin. </p><p>If you are currently on a budget, you might not be able to afford to purchase these premium form plugins, but still need to have these forms on your website. </p><p>That is why I have collected a list of five of the best free WordPress form plugins available.</p><h3>1. <a href="https://wordpress.org/plugins/forminator/" target="_self">Forminator</a>
</h3><figure class="post_image"><img alt="Forminator Form WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/screenshot-3.png"></figure><p>Forminator is quite a diverse form creator. Besides the normal contact form, you can create interactive polls, quizzes, service estimators, and registration forms with payment options including PayPal and Stripe.</p><h3>2. <a href="https://wordpress.org/plugins/contact-form-7/" target="_self">Contact Form 7</a>
</h3><p>With Contact Form 7, you can manage multiple contact forms. The form supports Ajax-powered submitting, CAPTCHA, and Akismet spam filtering.</p><h3>3. <a href="https://wordpress.org/plugins/ninja-forms/" target="_self">Ninja Forms</a>
</h3><figure class="post_image"><img alt="Ninja Forms WordPress Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/ddd.png"></figure><p>Ninja Forms allows you to use their drag-and-drop form editor to quickly put together a simple form. There are no limitations on the number of forms, fields, emails, actions, or submissions that can be included in these forms.</p><h3>4. <a href="https://wordpress.org/plugins/very-simple-contact-form/" target="_self">Very Simple Contact Form</a>
</h3><p>By adding the plugin's dedicated shortcode, you can add a simple form to your website. The Very Simple Contact Form has fields for name, email, subject, and messages. </p><h3>5. <a href="https://wordpress.org/plugins/caldera-forms/" target="_self">Caldera Forms</a>
</h3><p>Caldera Forms visual editor helps you create a form for your website in minutes. You can set up your form with multiple columns, add additional pages, and filter user responses with conditional logic to get more relevant information from your website visitors. <br></p><h2>How to Add a Contact Form to Your Website Using Quform<br>
</h2><p>To help show you just how easy it is to create a form with one of the premium form plugins available, we are going to go over how to create a simple contact form with the Quform WordPress form plugin. <br></p><h3>
<span class="sectionnum">1. </span>Creating the Form</h3><p>Once the plugin is installed, head on over to <strong>WP dashboard &gt; Quform &gt; Add New</strong>. We will then title our form "Contact Form." This will create our contact form and take us to the form editor.</p><h3>2. Adding Content to the Form</h3><p>Once we are in the editor, we will want to add three different fields to the form: first name, last name, and text area. These fields will allow us to capture all the information we need from the website user. First, we will add the first and last names to the form by clicking on the <strong>person</strong> icon in the Quform editor. This will automatically insert the first and last name fields in our form. </p><figure class="post_image"><img alt="Quform Shortcode" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/quoform.png"></figure><p>Lastly, we will add the text field to the form so the user can insert a message to us. Click on the <strong>left align paragraph</strong> icon in the Quform editor to add this to your form. Next, click on the text area tab named <strong>Untitled</strong> on the left-hand side of the Quform editor and type in "Message." This will change the text in the form to say "Message" instead of "Untitled."</p><h3>3. Adding the Form to Your Website</h3><p>Now that we have created the form, it's time to add it to your website. At the top of the form editor, you will see a shortcode. </p><figure class="post_image"><img alt="Quform Shortcode" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/13.png"></figure><p>Copy this shortcode and create a new page or post. Paste this shortcode where you want the form to appear on the page, and you are all set. You can view this page or post and see that the contact form was added.</p><figure class="post_image"><img alt="Quform Contact Form" data-src="https://cms-assets.tutsplus.com/uploads/users/1809/posts/34325/image/444.png"></figure><p>For a more detailed tutorial on how to create a form with the Quform plugin, check out the <a href="https://code.tutsplus.com/tutorials/how-to-create-a-form---with-the-quform-wordpress-plugin--cms-33602" target="_self">How to Create a Form With the Quform WordPress Plugin</a> article.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-create-a-form---with-the-quform-wordpress-plugin--cms-33602"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33602/preview_image/forms.jpg"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">How to Create a Form With the Quform WordPress Plugin </div>
<div class="roundup-block__author">Daniel Strongin</div></a></li></ul><h2>Install a Form WordPress Plugin Now! </h2><p>Regardless of what type of website you are running, you will need some type of form to add to your website. CodeCanyon offers the most flexible and feature-rich <a href="https://codecanyon.net/category/wordpress/forms" target="_self">form WordPress plugins</a> available that will help you implement the perfect form for your website.  </p><p>Whether you need to integrate a simple contact form, obtain files and documents from your website visitors, or even accept payments, the diverse plugins available on CodeCanyon can help you accomplish these tasks. </p><p>In addition to all the high-quality form plugins available, there are also thousands of other <a href="https://codecanyon.net/category/wordpress" target="_self">high-quality WordPress plugins</a> on CodeCanyon that can help enhance your website. Take look through this massive collection of plugins and you will find all types of plugins including gallery, newsletter, eCommerce, and marketing plugins.<br></p><p>Find the right <a href="https://codecanyon.net/category/wordpress" target="_self">WordPress plugin </a>to help your website succeed and generate more traffic and sales!</p><br>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-12-19T12:21:52+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[14 Best PHP Event Calendar and Booking Scripts]]></title>
      <link>//shineyrock.com/blog/read/14-best-php-event-calendar-and-booking-scripts</link>
      <guid>https://shineyrock.com/blog/read/14-best-php-event-calendar-and-booking-scripts#When:17:50:17Z</guid>
      <description><![CDATA[<p>There are several reasons PHP calendar, booking and event scripts might be a great addition to your website. If you’re a service provider, then it makes sense to have an appointment booking system on your site that allows potential customers to see your availability and select an appointment time and date that is best for them. This could cut down on needless calls to your business to make appointments and free up your time or your staff’s time.</p><p>Online calendars are also handy for organisations of any size to help team members share events and tasks and keep each other abreast of what other members are working on.</p><p>Their usefulness isn’t just limited to companies, however. Artists, writers, performers, bloggers and anyone else with an active public life could make good use of online calendars to let followers and fans know the whens and wheres of public appearances.</p><h2>What Type of Script Do You Need?</h2><p>When it comes to scripts in the event calendar and booking space, choosing the right one can get a little nebulous. They can take dozens of forms, and finding the right one for you can be a daunting task.</p><p>To help narrow the solutions down a bit, here’s a few questions to ask yourself before you get started:</p><ul>
<li>Do I need to focus on events, which occur at specific times, with a large number of tickets to sell? Or on bookings, with a smaller number of services that could occur at any time?</li>
<li>Will I need to support only my business? Or are there others that will be included in my listings? For example, a business cooperative might need to handle bookings for multiple service providers.</li>
<li>Will there be a single entity that events or bookings are attributed to, or several—as in a hair studio, with several stylists available?</li>
<li>Do I need a script to embed into a current site, or do I need something that stands on its own?</li>
</ul><p>With all this in mind, we’ve compiled 14 of our best PHP calendar, booking and events scripts available for download today at <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=php-scripts%2Fcalendars">CodeCanyon</a>. This post will help you choose the one that’s right for you.</p><h2>1. <a href="https://codecanyon.net/item/appointment-booking-software-for-cleaning-maintenance-businesses-cleanto/18397969?s_rank=17">Cleanto</a>
</h2><p><a href="https://codecanyon.net/item/appointment-booking-software-for-cleaning-maintenance-businesses-cleanto/18397969?s_rank=17">Cleanto</a> is ideal for many different types of service companies looking for a reliable way to provide clients with full-featured online booking.</p><figure class="post_image"><img alt="Cleanto" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Cleanto.jpg"></figure><p>Standout features:</p><ul>
<li>PayPal, Authorize.Net, and Stripe payment methods</li>
<li>email reminders</li>
<li>auto confirm bookings</li>
<li>ability to add breaks in schedule</li>
<li>and more</li>
</ul><p>User Crossera says:</p><blockquote>“Amazing customer support. These guys came back to me within a day with a fix for all the problems I faced. The plugin can be customized to whatever your needs are.”</blockquote><h2>2. <a href="https://codecanyon.net/item/appointo-booking-management-system/22989501">Appointo—Booking Management System</a>
</h2><p>An end-to-end solution for booking, <a href="https://codecanyon.net/item/appointo-booking-management-system/22989501">Appointo Booking Management System</a> takes the heavy lifting off your CMS or static site. This script provides a front-end calendar and booking system that can be easily used to mark appointments or events. Then, on the administrative side, you can manage the events and services that are available, and keep track of customers or attendees.</p><p>Standout features:</p><ul>
<li>front-end booking calendar</li>
<li>ability to manage services and booking</li>
<li>point-of-sale support</li>
<li>customer management</li>
<li>support for both PayPal and Stripe</li>
</ul><figure class="post_image"><img alt="Appointo PHP Booking Management System Admin Dashboard" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/33125/image/appointo.png"><figcaption>Appointo's admin dashboard in action</figcaption></figure><p>User moffei says:</p><blockquote>“Cool and Clean Customer Support. The fastest customer support I've ever had on CodeCanyon, plus a better script for the job. I definitely recommend it.”</blockquote><h2>3. <a href="https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1" title="Link: https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1">Vacation Rentals Booking Calendar</a>
</h2><p>The <a href="https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1" title="Link: https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1">Vacation Rentals Booking Calendar</a> is an online vacation rental booking calendar script that allows property owners or management agencies to create and manage rental availability calendars for their vacation rental properties.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Vacation-Rentals-Booking-Calendar.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Vacation-Rentals-Booking-Calendar.jpg" alt="Vacation Rentals Booking Calendar"></figure><p>Standout features:</p><ul>
<li>highly customizable</li>
<li>email notifications to site owner or administrator</li>
<li>XML and JSON availability feeds</li>
<li>export calendars to iCalendar format</li>
<li>and more</li>
</ul><p>User Craignic says:</p><blockquote>“Great product and quick support given when I had a query.”</blockquote><h2>4. <a href="https://codecanyon.net/item/saasappoint/22901414">SaaSAppoint</a>
</h2><p>A little different from the rest of the scripts on this page, <a href="https://codecanyon.net/item/saasappoint/22901414">SaaSAppoint</a> allows users to book appointments from multiple businesses in one place. Co-ops, business partnerships, and more can benefit from its directory style setup and single interface for booking from multiple vendors.</p><figure class="post_image"><img alt="SaaSAppoint Booking Script" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/33125/image/saasappoint-min.png" title="Image: https://cms-assets.tutsplus.com/uploads/users/1526/posts/33125/image/saasappoint-min.png"><figcaption>The front-end of the SaaSAppoint booking script</figcaption></figure><p>Standout features:</p><ul>
<li>multi-business booking support</li>
<li>time padding for appointments and blocked-off days</li>
<li>discount and coupon code support</li>
<li>email and SMS notifications</li>
<li>CSV report exporting</li>
</ul><p>User travis-taylor says:</p><blockquote>“This product is awesome, and just keeps getting better and better”</blockquote><h2>5. <a href="https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19" title="Link: https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19">NodAPS Online Booking System</a>
</h2><p>The <a href="https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19" title="Link: https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19">NodAPS Online Booking System</a> promises to help you manage your appointments more easily. You can create unlimited accounts with administrative, assistant, and staff permission, and add unlimited languages to the system. You can also change the booking time and date with a drag-and-drop feature.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/NodAPS.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/NodAPS.jpg" alt="NodAPS Online Booking System"></figure><p>Standout features:</p><ul>
<li>multi-provider system</li>
<li>seven different booking type forms</li>
<li>multilingual</li>
<li>easy to install</li>
<li>and more</li>
</ul><p>User Jam79 says:</p><blockquote>“Very simple to use. Fast and effective support!”</blockquote><h2>6. <a href="https://codecanyon.net/item/facebook-events-calendar/22339135" title="Link: https://codecanyon.net/item/facebook-events-calendar/22339135">Facebook Events Calendar</a>
</h2><p>A large number of businesses use Facebook as their community hub, posting and sharing most of their events to the platform. <a href="https://codecanyon.net/item/facebook-events-calendar/22339135" title="Link: https://codecanyon.net/item/facebook-events-calendar/22339135">Facebook Events Calendar</a> exists to help close the gap between Facebook and your website, letting you embed many of the functions right into your site.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Facebook%20Events%20Calendar.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Facebook Events Calendar.jpg" alt="Facebook Events Calendar"></figure><p>Standout features include:</p><ul>
<li>versions for standalone, WordPress, and Joomla platforms</li>
<li>display Facebook events directly on your site</li>
<li>calendar and list styles</li>
<li>several layout options</li>
<li>expand event information using a tooltip hover</li>
</ul><h2>7. <a href="https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923" title="Link: https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923">Bookify</a>
</h2><p><a href="https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923">Bookify</a> is one of the newest apps at CodeCanyon, but it is already proving to be quite popular with features such as an installation wizard that doesn't require any knowledge of code to use. Bookify also has Google Calendar sync, live chat, and detailed documentation.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Bookify.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Bookify.jpg" alt="Bookify"></figure><p>Standout features:</p><ul>
<li>Stripe and PayPal are supported</li>
<li>live chat</li>
<li>multi-language support</li>
<li>Google Calendar sync</li>
<li>and more</li>
</ul><p>User Teatone says:</p><blockquote>“Great customer support. Great code quality! If you are looking for something that works with great support, Bookify is the one.”</blockquote><h2>8. <a href="https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642" title="Link: https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642">Laravel Booking System</a>
</h2><p>The <a href="https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642">Laravel Booking System</a> with live chat offers a great online system for booking and making appointments. Users can buy credits as a payment option and view available services, total transactions, their total credits, and administrator contact information via their dashboard.  </p><p>From the administrative side, the system administrator can manage all things system related: general settings, payment settings, and user management. Admins can also manage bookings and respond to inquiries from their dashboard.  <br></p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Laravel%20Booking%20System.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Laravel Booking System.jpg" alt="Laravel Booking System"></figure><p>Standout features include:</p><ul>
<li>live chat</li>
<li>multi-language support</li>
<li>booking and transaction history</li>
<li>PayPal integration</li>
<li>and more</li>
</ul><p>User brentxscholl says:</p><blockquote>“This plugin works great. Great code. Customer service is fantastic. We asked for extended features and they were delivered for a reasonable price.”</blockquote><h2>9. <a href="https://codecanyon.net/item/tiva-timetable-for-php/18056918" title="Link: https://codecanyon.net/item/tiva-timetable-for-php/18056918">Tiva Timetable</a>
</h2><p>Fully responsive, easy to set up, and very customizable, the <a href="https://codecanyon.net/item/tiva-timetable-for-php/18056918" title="Link: https://codecanyon.net/item/tiva-timetable-for-php/18056918">Tiva Timetable</a> is a good choice for those who are looking for a calendar with a clean, simple, modern design.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Tiva-Timetable-2.jpg" title="Image: data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Tiva Timetable"></figure><p>Standout features include:</p><ul>
<li>responsive design</li>
<li>customisable theme</li>
<li>well-documented</li>
<li>three layouts available</li>
<li>and more</li>
</ul><p>User mandrake62 says:</p><blockquote>"Very good script, easy to install. Customer support at the top!"</blockquote><h2>10. <a href="https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5" title="Link: https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5">Ajax Calendar 2</a>
</h2><p><a href="https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5">Ajax Calendar 2</a> is a highly customisable personal calendar designed to help you keep organised. This is a best-selling update of another popular script, the Ajax Full Featured Calendar.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Ajax-Full-2.jpg" title="Image: data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Ajax Calendar 2"></figure><p>Standout features include:</p><ul>
<li>PHP and JS versions with PHP classes and object-oriented programming</li>
<li>ability to auto-embed YouTube, Vimeo, Dailymotion, or SoundCloud media</li>
<li>ability to export calendar or events to iCal format</li>
<li>supports recurring events</li>
<li>and more</li>
</ul><p>User sv_fr says:</p><blockquote>“Great script. Practical uses. Helpful support.”</blockquote><h2>11. <a href="https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38" title="Link: https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38">Event Calendar</a>
</h2><p>Built with jQuery FullCalendar and integrated into Bootstrap’s grid layout, the <a href="https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38">Event Calendar</a> plugin allows users to organise and plan their events.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Event-Calendar2.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Event-Calendar2.jpg" alt="Event Calendar"></figure><p>Standout features:</p><ul>
<li>create new types of events</li>
<li>ability to add fields such as title, colour, description, link, and photo</li>
<li>Google Fonts and Font Awesome icons</li>
<li>and more</li>
</ul><p>User teddyedward says:</p><blockquote>“Really enjoy using your script—it's perfect for my needs. It's also well documented and easy to use.”</blockquote><h2>12. <a href="https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13" title="Link: https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13">eCalendar</a>
</h2><p>Quite simply, the <a href="https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13">eCalendar</a> script is designed to keep individual users or companies organised with a calendar that allows users to add as many events as needed, as well as updating details like the event title, location, or time.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/eCalendar.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/eCalendar.jpg" alt="eCalendar"></figure><p>Standout features:</p><ul>
<li>choice of two designs</li>
<li>cross-browser compatibility (IE8+, Safari, Opera, Chrome, Firefox)</li>
<li>events are saved in your MySQL database</li>
<li>fully responsive design</li>
<li>and more</li>
</ul><p>User levitschi says:</p><blockquote>“Everything works perfectly! Support was better than I ever expected!”</blockquote><h2>13. <a href="https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741" title="Link: https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741">Event Manager</a>
</h2><p><a href="https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741">Event Manager</a> is an online booking system that has the advantage of displaying your events in three forms—calendar view, list view, or map location view using Google Maps.</p><p>Conceived for PHP and MySQL, built with the very popular jQuery Full Calendar plugin, and integrated into the Bootstrap grid layout, Event Manager is easy to add to your existing site.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/Event-Manager.jpg" title="Image: data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt="Event Manager"></figure><p>Standout features:</p><ul>
<li>fully responsive</li>
<li>highly customisable</li>
<li>three views available</li>
<li>well documented</li>
<li>and more</li>
</ul><h2>14. <a href="https://codecanyon.net/item/bookmyslot-appointment-booking-php-software/21908010" title="Link: https://codecanyon.net/item/bookmyslot-appointment-booking-php-software/21908010">BookMySlot</a>
</h2><p>Focusing largely on event bookings, BookMySlot takes it up a notch by allowing your site to handle multiple vendors, with their individual events nested underneath. This script is thorough and self-contained, so if you are looking for a turnkey solution, rather than something to add to an existing website, this could be the script for you.</p><figure class="post_image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/28635/image/bookmyslot-2.jpg" title="Image: data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt="BookMySlot"></figure><p>Standout features:</p><ul>
<li>thorough documentation</li>
<li>separate dashboards for admins and vendors</li>
<li>supports Stripe payments</li>
<li>built-in messaging system</li>
</ul><p>User aungoo says:</p><blockquote>“Outstanding customer support. I'm also happy with the quality of coding. ”</blockquote><h2>Conclusion</h2><p>These PHP event calendar and booking scripts just scratch the surface of products available at <a href="https://codecanyon.net/category/php-scripts/calendars">CodeCanyon</a>. So if none of them catch your fancy, there are plenty of other great options to hold your interest!</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-crm-project-management-php-scripts--cms-28943"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28943/preview_image/crm.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">9 Best CRM &amp; Project Management PHP Scripts</div>
<div class="roundup-block__author">Lorca Lokassa Sa</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/10-best-php-url-shortener-scripts--cms-28675"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/28675/preview_image/url-browser.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">8 Best PHP URL Shortener Scripts</div>
<div class="roundup-block__author">Eric Dye</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/comparing-the-best-php-form-builders--cms-32273"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/32273/preview_image/PHP.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Comparing the 5 Best PHP Form Builders</div>
<div class="roundup-block__author">Nona Blackman</div></a></li>
</ul><p>And if you want to improve your PHP skills, check out our ever so useful <a href="https://code.tutsplus.com/categories/php">free PHP tutorials</a>.</p><p>You might also be interested in some of our posts about WordPress calendar and booking plugins:</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-add-a-schedule-to-your-wordpress-site--cms-32900"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/369/posts/32900/preview_image/how%20to%20add%20a%20schedule%20to%20your%20wordpress%20site.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">How to Add a Calendar to Your WordPress Site With the Events Schedule Plugin</div>
<div class="roundup-block__author">Jessica Thornsby</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/choose-the-best-wordpress-event-calendar-plugins--cms-32838"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/32838/preview_image/WordPressEventsCalendars.jpg"><div class="roundup-block__primary-category topic-code">WordPress Plugins</div>
<div class="roundup-block__content-title">Choose the Best WordPress Event Calendar Plugins</div>
<div class="roundup-block__author">Nona Blackman</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/get-started-with-a-free-booking-calendar-plugin-in-wordpress--cms-32908"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/413/posts/32908/preview_image/wordpress-plugins.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">Get Started With a Free Booking Calendar Plugin in WordPress</div>
<div class="roundup-block__author">Sajal Soni</div></a></li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-09-06T17:50:17+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Getting Started With Django: Newly Updated Course]]></title>
      <link>//shineyrock.com/blog/read/getting-started-with-django-newly-updated-course</link>
      <guid>https://shineyrock.com/blog/read/getting-started-with-django-newly-updated-course#When:08:00:00Z</guid>
      <description><![CDATA[<p>If you like the elegance of the Python programming language, Django is the web framework for you! Django is a powerful but pragmatic framework, with an emphasis on getting work done. Learn how to use it to create your own web apps in our freshly updated course, <a href="https://code.tutsplus.com/courses/getting-started-with-django?ec_promo=teaser_post" target="_self">Getting Started With Django</a>.<br></p><figure class="post_image"><a href="https://code.tutsplus.com/courses/getting-started-with-django?ec_promo=teaser_post" target="_self"><img alt="Getting Started With Django" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/33817/image/Django%20site.jpg"></a></figure><h2>What You’ll Learn</h2><p>In this course, <a href="https://tutsplus.com/authors/derek-jensen?ec_promo=teaser_post" target="_self">Derek Jensen</a> will teach you all the basics of creating a web app with Django. You'll learn how to create a new app from scratch and how to code Django views, models, URL paths, migrations, templates, and more. Along the way, you'll build a complete web app to support one of Derek’s biggest passions: lawn care.</p><p>This is a newly updated version of our popular Django course, so you can be sure that it's based on the latest version of the Django framework and teaches you how to take advantage of all the changes and improvements.<br></p><h2>Watch the Introduction</h2><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_cjpca5s22t videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,250 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you can download unlimited items from the huge Envato Elements library of more than 1.3 million creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p><br><br><br>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-09-02T08:00:00+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Create a Blog for Each Category or Department in Your WooCommerce Store]]></title>
      <link>//shineyrock.com/blog/read/create-a-blog-for-each-category-or-department-in-your-woocommerce-store</link>
      <guid>https://shineyrock.com/blog/read/create-a-blog-for-each-category-or-department-in-your-woocommerce-store#When:21:02:33Z</guid>
      <description><![CDATA[<figure class="final-product final-product--image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/final_image/blog%20posts%20in%20product%20category%20page.jpg" alt="Final product image"><figcaption>What You'll Be Creating</figcaption></figure><p>If you're running a WooCommerce store that also has a blog, then you may decide to keep your blog completely separate from your store, with its own categories and content. But for greater integration with your store, it might be a good idea to create blog posts that relate to your product categories.</p><p>To do this, you'll need to add the product category taxonomy to your regular posts, create some posts with those product categories, and then display the blog posts on the product category archive pages in your store.</p><p>The good news is that WooCommerce provides you with action and filter hooks you can use to do this.</p><ul class="roundup-block__contents posts--half-width roundup-block--card">
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://code.tutsplus.com/articles/all-about-woocommerce-plugins-how-they-can-make-your-store-successful--cms-33294"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33294/preview_image/woocommerce.jpg"></a><a class="roundup-block__content-link posts__post-title" href="https://code.tutsplus.com/articles/all-about-woocommerce-plugins-how-they-can-make-your-store-successful--cms-33294"><h1 class="nolinks">All About WooCommerce Plugins: How They Can Make Your Store Successful</h1></a></header><div class="posts__post-teaser">You can customize and make enhancements to all aspects of your store using free and premium WooCommerce plugins. Discover the variety of WooCommerce plugins...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/1997/profiles/20513/profileImage/LorcaLokassaSa%20(4).jpg" alt="Lorca Lokassa Sa"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/lorca-lokassa-sa">Lorca Lokassa Sa</a></address>
<time class="posts__post-publication-date" datetime="2019-06-11 00:20:41 UTC" title="11 Jun 2019">11 Jun 2019</time>
</div>
</div>
<div class="posts__post-primary-category topic-code"><a class="posts__post-primary-category-link topic-code" href="https://code.tutsplus.com/categories/woocommerce">WooCommerce</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://code.tutsplus.com/tutorials/20-best-shipping-pricing-woocommerce-plugins--cms-29612"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/29612/preview_image/woocommerce.jpg"></a><a class="roundup-block__content-link posts__post-title" href="https://code.tutsplus.com/tutorials/20-best-shipping-pricing-woocommerce-plugins--cms-29612"><h1 class="nolinks">20 Best Shipping &amp; Pricing WooCommerce Plugins</h1></a></header><div class="posts__post-teaser">If you use a WooCommerce plugin to manage your online store, these 20 terrific shipping and pricing plugins can help make running your online store a whole...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/profiles/20139/profileImage/GA.jpg" alt="Nona Blackman"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/nona-blackman">Nona Blackman</a></address>
<time class="posts__post-publication-date" datetime="2019-02-28 18:28:01 UTC" title="28 Feb 2019">28 Feb 2019</time>
</div>
</div>
<div class="posts__post-primary-category topic-code"><a class="posts__post-primary-category-link topic-code" href="https://code.tutsplus.com/categories/woocommerce">WooCommerce</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://code.tutsplus.com/tutorials/how-to-install-and-setup-a-new-wordpress-woocommerce-theme--cms-26846"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26846/preview_image/add%20new%20woocommerce%20theme.jpg"></a><a class="roundup-block__content-link posts__post-title" href="https://code.tutsplus.com/tutorials/how-to-install-and-setup-a-new-wordpress-woocommerce-theme--cms-26846"><h1 class="nolinks">How to Install and Set Up a New WordPress WooCommerce Theme</h1></a></header><div class="posts__post-teaser">Let me show you how easy it can be to install and set up a new WordPress WooCommerce theme and how amazing an eCommerce site can look after doing it.</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/profiles/19735/profileImage/400x400.jpg" alt="Eric Dye"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/eric-dye">Eric Dye</a></address>
<time class="posts__post-publication-date" datetime="2016-07-19 12:55:17 UTC" title="19 Jul 2016">19 Jul 2016</time>
</div>
</div>
<div class="posts__post-primary-category topic-code"><a class="posts__post-primary-category-link topic-code" href="https://code.tutsplus.com/categories/woocommerce">WooCommerce</a></div></footer></article></li>
<li class="roundup-block__content posts__post"><article><header><a class="posts__post-preview" href="https://code.tutsplus.com/tutorials/best-store-locator-wordpress-plugins--cms-32952"><img class="posts__post-preview-image posts__post-preview-image--regular" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/32952/preview_image/store%20locator.jpg"></a><a class="roundup-block__content-link posts__post-title" href="https://code.tutsplus.com/tutorials/best-store-locator-wordpress-plugins--cms-32952"><h1 class="nolinks">5 Best Store Locator WordPress  Plugins</h1></a></header><div class="posts__post-teaser">WordPress locator plugins are an easy way to give customers the ability to find your nearest store and the shortest way to get there. Find the five best...</div>
<footer class="posts__post-details"><div class="posts__post-teaser-overlay"></div>
<div class="posts__post-publication-meta">
<img sizes="76px" class="posts__post-author_photo" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/profiles/20400/profileImage/Tn2cD3Wq_400x400.jpg" alt="Esther Vaati"><div class="posts__post-details__info">
<address class="posts__post-author"><a class="posts__post-author-link" href="https://tutsplus.com/authors/esther-kalei">Esther Vaati</a></address>
<time class="posts__post-publication-date" datetime="2019-03-20 22:06:31 UTC" title="20 Mar 2019">20 Mar 2019</time>
</div>
</div>
<div class="posts__post-primary-category topic-code"><a class="posts__post-primary-category-link topic-code" href="https://code.tutsplus.com/categories/wordpress">WordPress</a></div></footer></article></li>
</ul><p>So let's get started!<br></p><h2><b>What You'll Need</b></h2><p>To follow along, you'll need:</p><ul>
<li>a development installation of WordPress</li>
<li>a code editor</li>
<li>WooCommerce installed and activated</li>
<li>products added to your store (I've imported the dummy product data that comes with WooCommerce—for details of how to do this, see <a href="https://docs.woothemes.com/document/importing-woocommerce-dummy-data/">this guide</a>)</li>
<li>a WooCommerce-compatible theme activated (I'm using <a href="https://wordpress.org/themes/storefront/">Storefront</a>)</li>
</ul><p>Here's my starting store:</p><figure class="post_image"><img alt="WooCommerce store - front page" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/starting%20store.jpg"></figure><h2>Creating Our Plugin</h2><p>I'm going to create a plugin to do this, which is better practice than adding it to your theme. So start by creating a file in your <strong>wp-content/plugins</strong> directory. I've called mine <strong>tutsplus-woocommerce-category-blog.php</strong>.</p><p>Open the new file and add the opening lines:</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
/**
 * Plugin Name: Tuts+ Add blog posts to WooCommerce product categories
 * Plugin URI: https://tutsplus.com
 * Description: Add a list of relevant blog posts to product category archives in WooCommerce
 * Version: 1.0
 * Author: Rachel McCollin
 * Author URI: http://rachelmccollin.co.uk
 * Textdomain: tutsplus
 *
/</pre><p>Edit the above code to reflect the fact that this is your plugin, and save your plugin file. Now activate the plugin on your site.</p><h2>Checking WooCommerce Is Activated</h2><p>I don't want any of the code in this plugin to run if WooCommerce isn't activated on this site. The best way to check WooCommerce is activated is to check if the <code class="inline">woocommerce</code> filter exists. If so, I'll add all of the <code class="inline">add_action()</code> calls here, and this will fire all of the functions in my plugin.</p><p>Add this to your plugin:</p><pre class="brush: plain noskimlinks noskimwords">function tutsplus_check_woocommerce_active() {

    // check if woocommerce is activated
    if ( class_exists( 'woocommerce' ) ) {

        add_action( 'init', 'tutsplus_register_productcats_posts' );
        add_filter( 'woocommerce_taxonomy_args_product_cat', 'tutsplus_change_productcat_label' );
        add_action( 'woocommerce_after_main_content', 'tutsplus_display_productcats_posts' );

    }

    else {
        return;
	}

}
add_action( 'plugins_loaded', 'tutsplus_check_woocommerce_active' );	 </pre><h2>Adding Product Categories to Posts</h2><p>The next step is to register the <code class="inline">product_cat</code> taxonomy for the <code class="inline">post</code> post type. You do this using the <code class="inline"><a href="https://codex.wordpress.org/Function_Reference/register_taxonomy_for_object_type" target="_self">register taxonomy for object type()</a></code> function.</p><p>Add this to your plugin:</p><pre class="brush: php noskimlinks noskimwords">function tutsplus_register_productcats_posts() {

	 register_taxonomy_for_object_type( 'product_cat', 'post' );

}</pre><p>This adds the <code class="inline">product_cat</code> taxonomy, which WooCommerce uses for product categories, to blog posts. Note that I haven't hooked it to an action, as that's already done in my check for WooCommerce.</p><p>Now, if you take a look at your admin screen, you'll see that you have two taxonomies for posts called <strong>Categories</strong>:</p><figure class="post_image"><img alt="Two category taxonomies for posts" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/two%20categories%20taxonomies.jpg"></figure><p>That's a bit confusing, so let's change the label used in the admin menu for product categories. WooCommerce gives us a filter we can use to do that, called <code class="inline">woocommerce_taxonomy_args_product_cat</code>.</p><p>So add the function below to your plugin:</p><pre class="brush: php noskimlinks noskimwords">function tutsplus_change_productcat_label( $args ) {

	$args['labels'] = array(
        'label'         =&gt; _x( 'Product Categories', 'tutsplus' ),
        'menu_name'     =&gt; _x( 'Product Categories', 'Admin menu name', 'tutsplus' ),
        'add_new_item'  =&gt; _x( 'Add new product category', 'tutsplus' ),
	);

	return $args;

}
</pre><p>This will change the name of the <code class="inline">product_cat</code> taxonomy to <strong>Product Categories</strong> in the menu.</p><p>Refresh your admin screen and check it:</p><figure class="post_image"><img alt="Product categories correctly labelled in the admin menu" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/product%20categories%20renamed.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/product categories renamed.jpg"></figure><p>That should reduce some confusion (although you'll find it doesn't remove it completely as it's not possible to change the label in <strong>Quick Edit</strong>, which we'll be using shortly).</p><p><em>Note: You might decide to remove the standard category taxonomy instead. In that case, use the </em><code class="inline"><em>register_taxonomy()</em></code><em> function to register it for an empty array of post types, which effectively removes it.</em></p><p><em></em>Now, when you add a post, you can assign product categories to it. The way you do this will depend on whether your site is using the Gutenberg editor or not, as WooCommerce product categories don't work with Gutenberg yet.</p><p>If you have Gutenberg enabled, you'll have to add the product categories using the <strong>Quick Edit</strong> link beneath the post name on the main <strong>Posts</strong> screen:</p><figure class="post_image"><img alt="Adding a product category in quick edit" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/quick%20edit%20adding%20product%20category.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/quick edit adding product category.jpg"></figure><p>Make sure you don't confuse the two taxonomies called <strong>Category</strong> here—there isn't a way to rename product categories in Quick Edit.</p><p>If you're using the classic editor, you can add product categories to your posts using the post editing screen:</p><figure class="post_image"><img alt="Adding product categories to a  postclassic editor" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/adding%20product%20category%20to%20post%20classic%20editor.jpg"></figure><p>It's likely that over time, WooCommerce will become compatible with Gutenberg, and this situation will change.</p><p>Now create a few posts and give them different product categories.</p><h2>Outputting Posts in the Product Category Archive</h2><p>The second step is to output those posts in the product category archive. You do this by creating a loop using <code class="inline">WP_Query</code> and then using the <code class="inline">woocommerce_after_shop_loop</code> action hook, which WooCommerce runs after outputting products on the archive pages.</p><p>If you want to check out this hook, take a look at the <code class="inline">templates/archive-product.php</code> file in WooCommerce. If you prefer, you might want to use a different hook to output your blog posts in a different place.</p><h3>Setting Up the Function</h3><p>Create a new function in your plugin file, making sure it has the name you used when hooking it to the <code class="inline">woocommerce_after_shop_loop</code> hook earlier on:</p><pre class="brush: php noskimlinks noskimwords">function tutsplus_display_productcats_posts() {

}</pre><p>Now let's populate that function.</p><h3>Checking We're on a Product Category Archive</h3><p>First, add a conditional tag to check if we're on a product category archive, as you don't want blog posts displayed on the main shop page or the search page. Inside your function, add this:</p><pre class="brush: php noskimlinks noskimwords">if ( is_product_category() ) {

}</pre><p>Now your code will only run on the product category archive pages.</p><h3>Identifying the Current Product Category</h3><p>Next, inside the braces of your conditional check, add a line to get the current queried object, i.e. the current product category:</p><pre class="brush: php noskimlinks noskimwords">$productcat = get_queried_object();</pre><p>Now we can use that variable when setting up our query arguments. Next, add this:</p><pre class="brush: php noskimlinks noskimwords">$args = array(
	'post_type' =&gt; 'post',
	'product_cat' =&gt; $productcat-&gt;slug,
	'posts_per_page' =&gt; 5
);
$query = new WP_query ( $args );
if ( $query-&gt;have_posts() ) { ?&gt;

&lt;?php }</pre><p>This defines our query arguments, runs the query, and checks if it has any posts. Next, we need to add a loop inside that <code class="inline">if</code> statement:</p><pre class="brush: php noskimlinks noskimwords">&lt;section class="productcat-posts"&gt;
    &lt;?php echo '&lt;h2&gt;' . esc_html__( 'Blog Posts', 'tutsplus' ) . '&lt;/h2&gt;'; ?&gt;

		&lt;?php while ( $query-&gt;have_posts() ) : $query-&gt;the_post(); ?&gt;

		&lt;?php //contents of loop ?&gt;
		&lt;article id="post-&lt;?php the_ID(); ?&gt;"&lt;?php post_class(); ?&gt;&gt;

			&lt;h3&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt;
			&lt;?php the_excerpt(); ?&gt;
            &lt;a href="&lt;?php the_permalink(); ?&gt;"&gt; Read More...&lt;/a&gt;

		&lt;/article&gt;

		&lt;?php endwhile; ?&gt;

	&lt;?php wp_reset_postdata(); ?&gt;

&lt;/section&gt;
</pre><p>This opens a new section tag and outputs the blog posts inside an article tag. Make sure you use <code class="inline">wp_reset_postdata()</code> at the end to reset the query.</p><p>This is what your full function will look like:</p><pre class="brush: php noskimlinks noskimwords">function tutsplus_display_posts_in_category_archives() {

	if ( is_product_category() ) {

		$productcat = get_queried_object();

		$args = array(
			'post_type' =&gt; 'post',
			'product_cat' =&gt; $productcat-&gt;slug,
			'posts_per_page' =&gt; 5
		);
		$query = new WP_query ( $args );
		if ( $query-&gt;have_posts() ) { ?&gt;

			&lt;section class="productcat-posts"&gt;
				&lt;h2&gt;Blog Posts&lt;/h2&gt;

					&lt;?php while ( $query-&gt;have_posts() ) : $query-&gt;the_post(); ?&gt;

					&lt;?php //contents of loop ?&gt;
					&lt;article id="post-&lt;?php the_ID(); ?&gt;"&lt;?php post_class(); ?&gt;&gt;

						&lt;h3&gt;&lt;a href="&lt;?php the_permalink(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h3&gt;
						&lt;?php the_excerpt(); ?&gt;
                        &lt;a href="&lt;?php the_permalink(); ?&gt;"&gt; Read More...&lt;/a&gt;

					&lt;/article&gt;

					&lt;?php endwhile; ?&gt;

				&lt;?php rewind_posts(); ?&gt;

			&lt;/section&gt;

		&lt;?php }

	}
}
add_action( 'woocommerce_after_shop_loop', 'tutsplus_display_posts_in_category_archives' );</pre><p>Now save your plugin file and check the archive page for a product category you've added posts to. In my Clothing category archive, if I scroll down past the products, my posts are displayed:</p><figure class="post_image"><img alt="Blog posts displayed on a category archive page" data-src="https://cms-assets.tutsplus.com/uploads/users/227/posts/26154/image/blog-on-frontend.jpg"></figure><p>Now you have your latest blog posts for the product category displayed on its archive page.</p><h2>Summary</h2><p>Having a blog that's integrated with the departments of your store can help you sell more products and make your blog more relevant to customers. In this tutorial, you've learned how to add blog posts to category archive pages, providing your customers with extra content.</p><p>Don't forget that the open-source nature of WordPress also makes it a great option for improving your programming skills. Follow along with some of our other <a href="https://code.tutsplus.com/tutorials/search/woocommerce" target="_self">WooCommerce tutorials here on Envato Tuts+</a>, or check out some of the excellent eCommerce plugins available for sale on <a href="https://codecanyon.net/category/wordpress" rel="external" target="_blank">CodeCanyon</a>.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/all-about-woocommerce-plugins-how-they-can-make-your-store-successful--cms-33294"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/33294/preview_image/woocommerce.jpg"><div class="roundup-block__primary-category topic-code">WooCommerce</div>
<div class="roundup-block__content-title">All About WooCommerce Plugins: How They Can Make Your Store Successful</div>
<div class="roundup-block__author">Lorca Lokassa Sa</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/20-best-shipping-pricing-woocommerce-plugins--cms-29612"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/34/posts/29612/preview_image/woocommerce.jpg"><div class="roundup-block__primary-category topic-code">WooCommerce</div>
<div class="roundup-block__content-title">20 Best Shipping &amp; Pricing WooCommerce Plugins</div>
<div class="roundup-block__author">Nona Blackman</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/how-to-install-and-setup-a-new-wordpress-woocommerce-theme--cms-26846"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/26846/preview_image/add%20new%20woocommerce%20theme.jpg"><div class="roundup-block__primary-category topic-code">WooCommerce</div>
<div class="roundup-block__content-title">How to Install and Set Up a New WordPress WooCommerce Theme</div>
<div class="roundup-block__author">Eric Dye</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/tutorials/best-store-locator-wordpress-plugins--cms-32952"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/32952/preview_image/store%20locator.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">5 Best Store Locator WordPress  Plugins</div>
<div class="roundup-block__author">Esther Vaati</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="https://code.tutsplus.com/articles/the-beginners-guide-to-woocommerce-introduction--cms-21943"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/164/posts/21943/preview_image/WooCommerce.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">The Beginners Guide to WooCommerce: Introduction</div>
<div class="roundup-block__author">Ahmad Awais ⚡</div></a></li>
</ul><p></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-07-26T21:02:33+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[8 Best WordPress Booking and Reservation Plugins]]></title>
      <link>//shineyrock.com/blog/read/8-best-wordpress-booking-and-reservation-plugins</link>
      <guid>https://shineyrock.com/blog/read/8-best-wordpress-booking-and-reservation-plugins#When:20:25:16Z</guid>
      <description><![CDATA[<p>In the digital age, users are online 24/7. Everyone prefers to check availability and make appointments, reservations, or bookings online. They want to do this any time of night and day. This means when your doors close for the day, your business should still be available online. If not, you’re losing business! </p><p>Your website should make it easy for guests to view, reserve, and book available appointments. This is where WordPress booking and reservation plugins can help you meet your online business goals. They help you streamline your online appointments and bookings. Their solutions include basic booking, online calendar integration, payments, and much more. </p><p>So whatever your business—from haircuts to hotels, and from health salons to consulting firms—WordPress booking and reservations plugins will help extend what your business can do.  </p><h2>A WordPress Plugin for Every Need</h2><p>One of the great things about WordPress is the huge number of plugins available for adding new functionality to your site. Plugins are specialized pieces of code that add new functionality to your WordPress website. And since plugins are built to carry out very specific functions, they expand what your website can do. </p><p>These plugins can add a minor feature or a whole extensive system. Building this functionality from scratch would be a massive undertaking, requiring a lot of thought, planning, programming, and testing, as well as incorporating user suggestions to improve it and make it efficient. </p><p>The good news is that plugins can save you the worry and the time. There are people and companies that have devoted themselves to making plugins. So if you don’t have coding knowledge, you don’t need to worry. And even if you are a coder, you don't have to spend time creating all your own plugins when there are so many professional-quality plugins available.</p><h2>WordPress Booking and Reservation Plugins</h2><p>Think about this for a moment. You run a consumer-oriented website. You want your customers to be able to book appointments on your website any time of day or night. You know that without this you’re losing business. But how do you make your website capable of taking appointments? You need an appointment booking plugin, also known as a booking and reservation plugin.<br></p><p>Also, you may want your customers to be able to make payments for their appointments online. How do you do that? You get a plugin that can integrate with payment gateways like PayPal, Stripe, Square, or Mollie.</p><p>Your WordPress website needs a booking form so that guests can view, reserve, or book appointments. You don’t have to build a form from scratch—a booking and reservation plugin enables you to easily add a booking form or booking system to your website. You can integrate a calendar into this plugin, or it may also come with a calendar so your clients can see days and hours available for them to reserve or book appointments.  </p><p>As opposed to manual booking systems, booking and reservation plugins allow you automate your booking system, thereby saving you and your customers time. </p><p>Best of all, your data is one place. Decision-making is made easy because you can access all the stats you need from the back-end. </p><p>The one problem is that there are a lot of plugins in the market: tens of thousands. That's why, in this post, I'm going to show you some of the best-quality booking and reservation plugins available in 2019. </p><h3>
<span class="sectionnum">1.</span> <a href="https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091" rel="external" target="_blank">Bookly PRO</a><br>
</h3><p>Bookly Pro WordPress Booking Plugin is super easy to install, even for a WordPress beginner. You’ll be up and running in seconds. It is full-featured, fully customizable, and mobile-ready so customers can book their appointments on the go. It has an easy scheduling process that walks the user from booking to payment in two to six simple steps.  </p><p>The inclusion of SMS notifications, online payments, and Google Calendar sync sets it apart from many others.</p><figure class="post_image"><img alt="Bookly  1 WordPress Booking Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30128/image/001.jpg"></figure><blockquote>"Automated online booking &amp; scheduling for WordPress: fully customizable booking form with online payments, notifications, and Google Calendar sync."</blockquote><p>Features also included:</p><ul>
<li>ability to book different services, with multiple staff members, at different prices</li>
<li>translation ready—includes ten languages</li>
<li>easy payment integration</li>
<li>and more</li>
</ul><p>The <a href="https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091" rel="external" target="_blank">Bookly Pro booking plugin</a> is one of the most robust and flexible booking and reservation plugins you'll find.</p><h3>
<span class="sectionnum">2.</span> <a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116" rel="external" target="_blank">Bookme WordPress Booking Plugin</a>
</h3><p>The Bookme WordPress booking plugin is a multi-purpose booking plugin that cuts away bloated features and delivers a streamlined booking system. It is built with many kinds of businesses in mind. It can be adapted for customer scheduling in beauty salons, patient scheduling health and wellness businesses, training scheduling in gyms and yoga studios, scheduling classes and tutors in education settings, bookings and reservations, and so on. </p><p>Customers can check availability, make appointments, and pay for services with this WordPress booking and reservation plugin.</p><figure class="post_image"><img alt="Bookme - WordPress Booking Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30128/image/002.jpg"></figure><p>The booking types include:</p><ul>
<li>consultant booking</li>
<li>default booking</li>
<li>group booking</li>
<li>and more</li>
</ul><p>The number of staff members and services is unlimited, the appearance is fully customizable, and it supports custom fields and time slots.</p><p>Bookme comes with a powerful admin panel and is user friendly, allowing you to manage all bookings, customers, staff members and more—with just a few clicks. </p><p>The <a href="https://codecanyon.net/item/bookme-wordpress-booking-plugin/20926116" rel="external" target="_blank">Bookme WordPress Booking Plugin</a> provides all the essential booking and reservation features you want and need, put together in a well-designed package.</p><h3>
<span class="sectionnum">3.</span> <a href="https://codecanyon.net/item/appointment-booking-for-wordpress-webba-booking/13843131" rel="external" target="_blank">Webba Booking Plugin</a>
</h3><p>As a service provider, saving time and money while at the same time offering convenient services to your customers is super important. Webba Booking Plugin is built with this in mind. </p><p>First, it’s one of the best-looking WordPress booking and reservation plugins. Secondly, it’s a robust system that has a long list of features to help you customize the appearance of the system in order to express your unique visual and business identity. </p><p>Here are some features to help with customization:</p><ul>
<li>80+ options for appearance customization</li>
<li>79 design presets</li>
<li>editable front-end text strings</li>
</ul><figure class="post_image"><img alt="Webba Booking - WordPress Appointment  Reservation plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30128/image/004.jpg"></figure><blockquote>"Webba Booking is a powerful and easy to use WordPress booking plugin especially thought for service providers to optimize their time and for the comfort of their customers."</blockquote><p>To help you properly manage your appointments, features included allow your users to:</p><ul>
<li>make multiple reservations in the same session</li>
<li>make reservations of several people or services at the same time</li>
<li>make online payments with platforms such as PayPal, Stripe, and WooCommerce</li>
<li>export CSVs</li>
<li>and more</li>
</ul><p>There are many different notification mediums and types, not to mention reminders. So much is customizable, and the Google Calendar support is stellar.</p><h3>4. <a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830" rel="external" target="_blank">Booki</a><a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830" rel="external" target="_blank">—WordPress Booking Calendar</a>
</h3><p>If you want a lightweight and minimalist plugin, Booki is it. It supports both appointment-based and reservation-based bookings. Customers can see bookings in their own time zone. It is integrated with PayPal, has a shopping cart, and can issue discount coupons. It is also integrated with MailChimp. </p><p>The <a href="https://codecanyon.net/item/booki-wordpress-booking-calendar-plugin-for-reservations-and-appointments/7460830?s_rank=1" rel="external" target="_blank">Booki</a> plugin also offers some unique features needed for a satisfying booking experience.</p><p>For example, a built-in form builder allows you to create bookings that serve a specific purpose. You can add fields that ask for user input as part of the booking process. </p><p>You can define rules for bookings, for example the number of days that can be booked in a single booking calendar. You can specify a booking period with start and end dates. You can specify prices at the day, hour, or minute level. You can exclude specific days and time slots. </p><p>Not only that, but the system can also adapt to allow single or multiple bookings depending on whether your project is reservation based or appointment based. Costs can be included as a list of checkboxes. You can create an unlimited number of extra features that your customer can check out along with their booking. </p><figure class="post_image"><img alt="Booki - WordPress Booking Calendar plugin for reservations and appointments" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30128/image/006.jpg"></figure><p>Customer <a href="https://codecanyon.net/user/msb1974">msb1974</a> has this to say about Booki </p><blockquote>Great value for the price, lets me do exactly what I want, provides a lot of options. Very good documentation. Thanks! This plugin has huge potential!<br>
</blockquote><h3>
<span class="sectionnum">5.</span> <a href="https://codecanyon.net/item/team-booking-wordpress-booking-system/9211794" rel="external" target="_blank">Team Booking</a> </h3><p>Use the power of Google Calendar for your bookings and reservations by using the Team Booking system for WordPress. All the availability planning is coordinated via Google Calendar! </p><ol>
<li>Create “availability” events on Google Calendar.<br>
</li>
<li>These events appear on the front-end as open slots for booking.<br>
</li>
<li>When the slot is booked, the Google Calendar updates automatically.<br>
</li>
</ol><figure class="post_image"><img alt="Team Booking - WordPress booking system" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30128/image/009.jpg"></figure><p>This is a highly collaborative workflow. If you’re working as a team, you can let your coworkers plan their own availability from their own Google Calendars.</p><p>Other features include:</p><ul>
<li>three levels of notification—to the customer, service provider, and admin</li>
<li>Google Calendar and Google Maps support </li>
<li>translation-ready</li>
<li>approval and cancellation system for both provider and customers</li>
<li>customize reservation forms and email notifications</li>
</ul><p>They even provide an API for your custom app. <i></i> <i></i> <i></i> </p><p>Customer<strong> </strong><a href="https://codecanyon.net/user/richvds">Richvds</a> has this to say about the Team Booking Plugin:</p><blockquote><p>Excellent product, well thought out and smartly put together, with the added plus of great support!</p></blockquote><h3>6. <a href="https://codecanyon.net/item/hbook-hotel-booking-system-wordpress-plugin/10622779?s_rank=10" target="_self">HBook Hotel Booking System</a>
</h3><figure class="post_image"><img alt="HBook - Hotel booking system " data-src="https://cms-assets.tutsplus.com/uploads/users/1997/posts/32924/image/HBookheader-img-cc.jpg"></figure><p>HBook is a powerful and versatile plugin that is perfectly suited for anybody that owns a business in the hospitality industry: a hotel, B&amp;B, holiday apartment, or campground. It will allow you to easily enable online reservation on your WordPress website. It comes equipped with a customizable booking form with a drag-and-drop form builder that allows you to choose what customer details you want to gather. Shortcode support allows you to add availability calendars, table rates, and booking forms anywhere on your website in seconds.</p><p>It has an efficient booking management system with features that include:</p><ul class="dashed-list dashed-list-plugin">
<li>calendar view to see your bookings at a glance</li>
<li>reservation list in a table to view details of all bookings, add comments, change accommodation, update remaining balance, or send emails</li>
<li>synchronize your bookings with websites such as Airbnb, Homeaway, VRBO, and Booking.com<br>
</li>
<li>export your bookings to CSV files</li>
<li>integration with multiple payment methods: Stripe, PayPal, Square, Cardlink, Mollie, and more </li>
</ul><p>Customer <a href="https://codecanyon.net/user/contactovisual">contactovisual</a> has this to say:</p><blockquote><p>Simple yet solid hotel booking plugin. I should also mention the excellent documentation and ease of translating for multi-language websites—so important in the hotel business. Good work.</p></blockquote><h3>7. <a href="https://codecanyon.net/item/amelia-enterpriselevel-appointment-booking-wordpress-plugin/22067497?s_rank=16" rel="external" target="_blank">Amelia—Enterprise-Level Appointment Booking</a>
</h3><figure class="post_image"><img alt="Amelia - Enterprise Level Appointment Booking" data-src="https://cms-assets.tutsplus.com/uploads/users/1997/posts/32924/image/AMELIAAppointments Page.png"></figure><blockquote>Amelia is your automated booking specialist, working 24/7 to make sure your customers can make appointments even while you sleep.<br>
</blockquote><p>Like the other plugins in this list, Amelia lets your customers make appointments any time of day and night. This plugin is easy to customize so you can build your own appointment booking forms. </p><p>Some features include: </p><ul>
<li>supports multiple employees, each with their own services and availability schedule</li>
<li>supports multiple business locations</li>
<li>step-by-step appointment wizard makes booking easy</li>
<li>options to upsell during appointment booking </li>
<li>integration with WooCommerce, PayPal, and Stripe </li>
<li>supports on-site payments so your customers can pay in cash when they arrive</li>
</ul><p>Customer <a href="https://codecanyon.net/user/stewartrodgers">StewartRodgers</a> has this to say:</p><blockquote>
<p>A really sleek plugin. The development team are super responsive to support and requests, and are continually working on improving it.</p>
<p>Looks like this one has a promising future.</p>
</blockquote><h3>8. <a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=8" rel="external" target="_blank">Events Calendar Registration and Booking</a>
</h3><figure class="post_image"><img alt="Event Calendar Registration and Booking" data-src="https://cms-assets.tutsplus.com/uploads/users/1997/posts/32924/image/events-calendar.jpg"></figure><p>Do want to promote classes, seminars, workshops, conferences, or concerts on your WordPress website? Do you want to set ticket prices for your events, create recurring events, or even accept donations for your events? If so, <a href="https://codecanyon.net/item/events-calendar-registration-booking/7647762?s_rank=1" rel="external" target="_blank">Events Calendar Registration and Booking</a> plugin has got you covered. </p><p>With Events Calendar, you can easily create and manage your events online through the WordPress admin interface. Then, visitors will be able to register and pay online for those events via PayPal, Stripe, or Authorize.Net. It gives you a quick glimpse of the latest events created, letting you sort them by categories, view payments, and keep track of your attendees.</p><p>Other important features of this plugin include:</p><ul>
<li>multilingual </li>
<li>integrated with Google Maps</li>
<li>countdown timer</li>
<li>confirmation emails</li>
<li>shortcode support for calendars and single events</li>
</ul><h2>Conclusion</h2><p>There are many different kinds of WordPress appointment, booking, and reservation plugins available today. Choosing the right one can be crucial to the smooth running of your business. You need to choose a plugin that fits your requirements. While this list is in no way exhaustive, we’ve selected plugins with a solid reputation. All these plugins are available on <a href="https://codecanyon.net/category/wordpress?as=1&amp;referrer=homepage&amp;sort=sales&amp;term=booking%20reservation&amp;type=l&amp;utf8=%E2%9C%93" rel="external" target="_blank">Envato Market</a>. </p><h4>Did You Find the Plugin You Need?</h4><p>If a WordPress booking plugin feature you want isn't listed here, you might consider coding your own. Envato Tuts+ has <a href="https://code.tutsplus.com/categories/wordpress" rel="external" target="_blank">WordPress tutorials</a>, eBooks, and courses. Try <a href="https://code.tutsplus.com/courses/wordpress-plugin-development-essentials" rel="external" target="_blank">WordPress Plugin Development Essentials</a> or maybe the <a href="https://code.tutsplus.com/courses/wordpress-hackers-guide-to-the-galaxy" rel="external" target="_blank">WordPress Hacker's Guide to the Galaxy</a>. Some helpful eBooks include <a href="https://code.tutsplus.com/ebooks/useful-tricks-and-techniques-for-wordpress" rel="external" target="_blank">Useful Tricks and Techniques for WordPress</a> and <a href="https://code.tutsplus.com/ebooks/mastering-wordpress" rel="external" target="_blank">Mastering WordPress</a>.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-04-12T20:25:16+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Best Exit Popups for WordPress Compared]]></title>
      <link>//shineyrock.com/blog/read/best-exit-popups-for-wordpress-compared1</link>
      <guid>https://shineyrock.com/blog/read/best-exit-popups-for-wordpress-compared1#When:22:20:44Z</guid>
      <description><![CDATA[<p>Exit popups are used to encourage your web page visitors to subscribe to an email list, follow you on social media, or complete the purchase in their shopping cart. I'll show you some outstanding popup plugins for WordPress in this post.<br></p><p><img alt="Exit popup examples" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/popup.jpg"><br></p><h2>Does Your Site Need a WordPress Popup Plugin?</h2><p>Here are some of the top reasons for having a popup on your site.</p><h3>1. Grow Your Subscription List </h3><p>Popups can be good tools for collecting emails if used properly. You can utilize popups to get people to subscribe to your blog or site if you have a good offering.</p><h3><strong>2. Convert New Users to Customers</strong></h3><p>Almost everyone in today's digital age uses an email address, whether for getting the latest news on their popular celebrity blog, sports news, or the latest tips on fashion, beauty, and shopping. Having a large email list will get you closer to your prospective customer.</p><h3>3. Obtain a Larger Social Following</h3><p>While some people may not be willing to hand over their email addresses, you can still utilize popups to get people to follow you on social media. Once they follow you, it's easier to keep them engaged. </p><h3>4. Reduce Cart Abandonment<strong></strong>
</h3><p>Exit popups can also be used to reduce card abandonment in a situation where users are attempting to leave the site without completing a purchase. In this case, you can present a popup that gives them an enticing offer that might change their mind—for example, a discount code, free shipping, or a bonus item with every purchase.</p><h3>5. Obtain User Feedback</h3><p>Popups can also be used to better understand your customers by giving them the opportunity to tell you their views.</p><h2>Best WordPress Exit Popups on CodeCanyon</h2><p>You too can grow your subscribers and revenue by making use of CodeCanyon's collection of next-level popups. Let's get started.</p><h3>1. <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" rel="external">Layered Popups Plugin</a>
</h3><p>The first position in this category goes to <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263">Layered Popups</a>, which is very flexible and easy to set up. </p><figure class="post_image"><img alt="Layered popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Layered%20popup.jpg"></figure><p>With over 200 templates to choose from and a free constructor for making your own popups in real time, you are only limited by your own imagination. This popup gives you the freedom to choose on which page you want your popups to appear. You can also have different templates for the same purpose. For example, you could create three different contact form designs and test out which converts the best.<br></p><p>The beauty of this plugin is that all the templates are stunning. If you don't have any design expertise, you can just choose any template and just plug it in. Another bonus is that all the templates are fully animated, hence no extraordinary design skills required for a great user experience.</p><p>Some of the most stunning features include:</p><ul>
<li>
<strong>Fully compatible</strong> with the latest version of WordPress.</li>
<li>
<strong>Mobile friendly</strong>: all popups are optimized to fit even the smallest of screens without distracting the user.</li>
<li>
<strong>Layered popups</strong> also support over 80 marketing systems, including AWeber, MailChimp, Sendy, and others. These also support most of the popular email verification services.</li>
<li>
<strong>Social share and subscribe</strong>: you also have the option of adding social sharing with Facebook and Google platforms to your popups.</li>
<li>
<strong>Built-in ad block detector</strong>.</li>
<li>
<strong>Multiple language support</strong>: plugins can also be translated into other languages.</li>
<li>
<strong>Remember subscribed visitors</strong>: set cookies on the user's machine to avoid repeated popups for already subscribed users.</li>
</ul><h2>2. <a href="https://codecanyon.net/item/popup-plugin-for-wordpress-convertplug/14058953?s_rank=2">ConvertPlus Popup Plugin</a>
</h2><figure class="post_image"><img alt="ConvertPlus popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Webp.net-compress-image(3).jpg"></figure><p><a href="https://codecanyon.net/item/popup-plugin-for-wordpress-convertplug/14058953?s_rank=2">ConvertPlus</a> comes second on our list. It's the perfect popup to turn users into customers. This popup has over 100 ready-made templates to choose from. </p><p>Some of the prominent features of this popup are:   </p><ul>
<li>
<strong>Conversion analytics:</strong> this popup gives you the ability to view a real-time graphical analysis of how visitors are interacting with your popups in terms of clicks, unique views, and conversions. This report will help you make informed decisions. </li>
<li>
<strong></strong><strong>Integration with marketing tools: </strong>this plugin also gives you the ability to integrate with your marketing tools in just a few easy clicks.</li>
<li>
<strong>Designs and positions:</strong> this plugin comes with the ability to have your popups in different designs and positions. </li>
<li>
<strong>Multiple triggers:</strong> you can also trigger a popup on other conditions, for example when a user is inactive or when they scroll a certain percentage of a page.</li>
</ul><h2>3. <a href="https://codecanyon.net/item/slick-modal-css3-powered-popups/12335988?s_rank=3">Slick Modal Popups Plugins</a>
</h2><figure class="post_image"><img alt="Slick modal popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Slick%20modal.jpg"></figure><p><a href="https://codecanyon.net/item/slick-modal-css3-powered-popups/12335988" target="_self">Slick Modal Popups</a> will give you a customized popup for any event or occasion. Whether you just want to showcase your best image collection or show special announcements or notifications, Slick Modal Popups has got you covered.</p><p>Slick Modal is the best choice for an eCommerce store. It actually comes with a whole collection of more than 40 different plugins and 60 templates that are tailored to every occasion. It is also bundled with powerful CSS3 animations and various position options.</p><p>Other notable features include:</p><ul>
<li>
<strong>Spin wheel plugin</strong>:<strong> </strong>people love free stuff, and one of the coolest things about this collection is that you get a spin wheel template where users can win a gift voucher when they spin the wheel.</li>
<li>
<strong>Showcasing winning products or daily offers</strong>: Slick Modal has a product carousel plugin where you can showcase your daily deals to customers.</li>
<li>
<strong>Static banners</strong>: static banners are a way to display a small banner of your best product at the side of the page so your users can see it even if they scroll or go to another page.</li>
</ul><p>In conclusion, with Slick Popups, your eCommerce store will definitely stand out.</p><h2>4. <a href="https://codecanyon.net/item/masterpopups-multipurpose-popup-plugin-for-wordpress-with-easy-email-marketing-integration/20142807?s_rank=4">Master Popups</a>
</h2><figure class="post_image"><img alt="master popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/image-3-.jpg"></figure><p>Last but not least, <a href="https://codecanyon.net/item/masterpopups-multipurpose-popup-plugin-for-wordpress-with-easy-email-marketing-integration/20142807?s_rank=4">Master Popups</a> is the ultimate email subscription plugin. It features out-of-the-box templates and an all-in-one plugin solution. You can be assured you are getting the best.</p><p>Master Popups also features a powerful popup editor and a collection of already-customized templates which allow you to build your own popups in minutes. It will also let you make media-rich popups like YouTube/Vimeo video popups.</p><p>Other outstanding components of this plugin are:</p><ul>
<li><strong>popup campaigns </strong></li>
<li>
<strong>integration with popular email marketing services</strong> like MailChimp, GetResponse, Mailer Lite, Constant Contact, SendinBlue, and Autopilot </li>
<li><strong>easy-to-create contact forms</strong></li>
<li>
<strong>fully responsive popups</strong> even on the smallest mobile devices</li>
<li>
<strong>cookies</strong> to remember already-subscribed users</li>
</ul><h2>A Word of Warning</h2><p>As much as popups can be a good way to increase sales and get more email subscriptions, it's also important to strike a balance with how many popups you have and be strategic about them. Users are likely to leave your site if you keep interrupting them with popups.</p><h2>Conclusion</h2><p>In this post, we saw some excellent WordPress plugins for creating exit popups. Of course, if you're an online marketer, you'd like your user to stick around the website a little longer. When they attempt to close the web page, you can use an exit popup to offer them a discount that makes them feel special, or invite them to subscribe to your mailing list. </p><p>There are many more <a href="https://codecanyon.net/category/wordpress?rating_min=4&amp;sort=sales#content" target="_self">WordPress plugins on CodeCanyon</a>. Take a look, and you're sure to find something to make your site sparkle!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-03-14T22:20:44+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Best Exit Popups for WordPress  Compared]]></title>
      <link>//shineyrock.com/blog/read/best-exit-popups-for-wordpress-compared</link>
      <guid>https://shineyrock.com/blog/read/best-exit-popups-for-wordpress-compared#When:22:20:44Z</guid>
      <description><![CDATA[<p>Exit popups are used to encourage your web page visitors to subscribe to an email list, follow you on social media, or complete the purchase in their shopping cart. I'll show you some outstanding popup plugins for WordPress in this post.<br></p><p><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/popup.jpg"><br></p><h2>Does Your Site Need a WordPress Popup Plugin?</h2><p>Here are some of the top reasons for having a popup on your site.</p><h3>1. Grow Your Subscription List </h3><p>Popups can be good tools for collecting emails if used properly. You can utilize popups to get people to subscribe to your blog or site if you have a good offering.</p><h3><strong>2. Convert New Users to Customers</strong></h3><p>Almost everyone in today's digital age uses an email address, whether for getting the latest news on their popular celebrity blog, sports or latest tips on fashion, beauty, and shopping. Having a large email list will get you closer to your prospective customer.</p><h3>3. Obtain a Larger Social Following</h3><p>While some people may not be willing to hand over their email addresses, you can still utilize popups to get people to follow you on social media. Once they follow you, it's easier to keep them engaged. </p><h3>4. Reduce Cart Abandonment<strong></strong>
</h3><p>Exit popups can also be used to reduce card abandonment in a situation where users are attempting to leave the site without completing a purchase. In this case, you can present a popup that gives them an enticing offer that might change their mind—for example, a discount code, free shipping, or a bonus item with every purchase.</p><h3>5. Obtain User Feedback</h3><p>Popups can also be used to better understand your customers by giving them the opportunity to tell you their views.</p><h2>Best WordPress Exit Popups on CodeCanyon</h2><p>You too can grow your subscribers and revenue by making use of CodeCanyon's collection of next-level popups. Let's get started.</p><h3>1. <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263" rel="external">Layered Popups Plugin</a>
</h3><p>The first position in this category goes to <a href="https://codecanyon.net/item/layered-popups-for-wordpress/5978263">Layered Popups</a> which is very flexible and easy to set up. </p><figure class="post_image"><img alt="Layered popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Layered%20popup.jpg"></figure><p>With over 200 templates to choose from and a free constructor for making your own popups in real time, you are only limited by your own imagination. This popup gives you the freedom to choose on which page you want your popups to appear. You can also have different templates for the same purpose. For example, you could create three different contact form designs and test out which converts the best.<br></p><p>The beauty of this plugin is that all the templates are stunning. If you don't have any design expertise, you can just choose any template and just plug it in. Another bonus is that all the templates are fully animated, hence no extraordinary design skills required for a great user experience.</p><p>Some of the most stunning features include:</p><ul>
<li>
<strong>Fully compatible</strong> with the latest version of WordPress.</li>
<li>
<strong>Mobile friendly</strong>: all popups are optimized to fit even the smallest of screens without distracting the user.</li>
<li>
<strong>Layered popups</strong> also support over 80 marketing systems including but not limited to Aweber, MailChimp, Sendy, and others. These also support most of the popular email verification services.</li>
<li>
<strong>Social share and subscribe</strong>: you also have the option of adding social sharing with Facebook and Google platforms to your popups.</li>
<li>
<strong>Built-in ad block detector</strong>.</li>
<li>
<strong>Multiple language support</strong>: plugins can also be translated into other languages.</li>
<li>
<strong>Remember subscribed visitors</strong>: set cookies on the user's machine to avoid repeated popups for already subscribed users.</li>
</ul><h2>2. <a href="https://codecanyon.net/item/popup-plugin-for-wordpress-convertplug/14058953?s_rank=2">ConvertPlus Popup Plugin</a>
</h2><figure class="post_image"><img alt="ConvertPlus popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Webp.net-compress-image(3).jpg"></figure><p><a href="https://codecanyon.net/item/popup-plugin-for-wordpress-convertplug/14058953?s_rank=2">ConvertPlus</a> comes second on our list. It's the perfect popup to turn users into customers. This popup has over 100 ready-made templates to choose from. </p><p>Some of the prominent features of this popup are:   </p><ul>
<li>
<strong>Conversion analytics:</strong> this popups gives you the ability to view a real-time graphical analysis of how visitors are interacting with your popups in terms of clicks, unique views and conversions. This report will make you make informed decisions </li>
<li>
<strong></strong><strong>Integration with marketing tools: </strong>this plugin also gives you the ability to integrate with your marketing tools in just a few easy clicks.</li>
<li>
<strong>Designs and positions:</strong> this plugin comes with the ability to have your popups in different designs and positions. </li>
<li>
<strong>Multiple triggers:</strong> you can also trigger a popup on other conditions, for example when a user is inactive or when they scroll a certain percentage of a page.</li>
</ul><h2>3. <a href="https://codecanyon.net/item/slick-modal-css3-powered-popups/12335988?s_rank=3">Slick Modal Popups Plugins</a>
</h2><figure class="post_image"><img alt="Slick modal popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/Slick%20modal.jpg"></figure><p><a href="https://codecanyon.net/item/slick-modal-css3-powered-popups/12335988" target="_self">Slick Modal Popups</a> will give you a customized popup for any event or occasion. Whether you just want to showcase your best image collection or show special announcement or notifications, Slick modal popups have got you covered.</p><p>Slick Modal is the best choice for an eCommerce store. It actually comes with a whole collection of more than 40 different plugins and 60 templates that are tailored to every occasion. It is also bundled with powerful CSS3 animations, and various position options.</p><p>Other notable features include:</p><ul>
<li>
<strong>Spin wheel plugin</strong>:<strong> </strong>people love free stuff and one of the coolest thing about this collection is that you get a spin wheel template where users can win a gift voucher when they spin the wheel.</li>
<li>
<strong>Showcasing winning products or daily offers</strong>: Slick Modal has a product carousel plugin where you can showcase your daily deals to customers.</li>
<li>
<strong>Static banners</strong>: static banners are a way to display a small banner of your best product at the side of the page so your users can see it even if they scroll or go to another page.</li>
</ul><p>In conclusion, with Slick popups, your eCommerce store will definitely stand out.</p><h2>4. <a href="https://codecanyon.net/item/masterpopups-multipurpose-popup-plugin-for-wordpress-with-easy-email-marketing-integration/20142807?s_rank=4">Master Popups</a>
</h2><figure class="post_image"><img alt="master popups" data-src="https://cms-assets.tutsplus.com/uploads/users/1885/posts/32904/image/image-3-.jpg"></figure><p>Last but not least, <a href="https://codecanyon.net/item/masterpopups-multipurpose-popup-plugin-for-wordpress-with-easy-email-marketing-integration/20142807?s_rank=4">Master Popups</a> is the ultimate email subscription plugin. It features out-of-the-box templates and an all-in-one plugin solution. You can be assured you are getting the best.</p><p>Master Popups also features a powerful popup editor and a collection of already-customized templates which allow you to build your own popups in minutes. It will also let you make media-rich popups like Youtube/Vimeo video popups.</p><p>Other outstanding components of this plugin are:</p><ul>
<li><strong>popup campaigns </strong></li>
<li>
<strong>integration with popular email marketing services</strong> like Mailchimp, GetResponse, Mailer Lite, Constant Contact, Sendinblue, and Autopilot </li>
<li><strong>easy-to-create contact forms</strong></li>
<li>
<strong>fully responsive popups</strong> even on the smallest mobile devices</li>
<li>
<strong>cookies</strong> to remember already-subscribed users</li>
</ul><h2>A Word of Warning</h2><p>As much as popups can be a good way to increase sales and get more email subscriptions, it's also important to strike a balance with how many popups you have and be strategic about them. Users are likely to leave your site if you keep interrupting them with popups.</p><h2>Conclusion</h2><p>In this post, we saw some excellent WordPress plugins that for creating exit popups. Of course, if you're an online marketer, you'd like your user to stick around the website a little longer. When they attempt to close the web page, you can use an exit popup to offer them a discount that makes them feel special, or invite them to subscribe to your mailing list. </p><p>There are many more <a href="https://codecanyon.net/category/wordpress?rating_min=4&amp;sort=sales#content" target="_self">WordPress plugins on CodeCanyon</a>. Take a look and you're sure to find something to make your site sparkle!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-03-14T22:20:44+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[11 Best Tab &amp; Accordion WordPress Widgets &amp; Plugins]]></title>
      <link>//shineyrock.com/blog/read/11-best-tab-accordion-wordpress-widgets-plugins</link>
      <guid>https://shineyrock.com/blog/read/11-best-tab-accordion-wordpress-widgets-plugins#When:19:47:44Z</guid>
      <description><![CDATA[<p>Sometimes page copy can become a little longer than we expect. When the information is valuable and necessary, it’s tough to cut it down. Fortunately, there’s a way to save vertical real estate on your WordPress site and also reduce information overload for users.</p><p>Accordions and tabs are great ways to communicate text-heavy information in an elegant and condensed way. Accordions contain vertically or horizontally stacked panels with just their captions visible. When these panels are clicked, they expand and reveal more information associated with the caption.</p><p>Tabs perform a similar function to accordions but in a different way. They are modelled after traditional card tabs inserted in files or card indexes. Like card tabs, tab plugins and widgets are labelled and give clues to the information they conceal. By clicking a tab, a user can reveal more information about the subject of the tab and can use them to navigate through a site or a page.</p><p>Whether you’re looking for a <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=tabs&amp;referrer=search&amp;view=list&amp;category=wordpress">tab</a> or <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=accordion&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=wordpress">accordion widget or plugin</a> (or even a <a href="https://themeforest.net/free/wordpress-themes">free WordPress theme</a>), you can find what you’re looking for on CodeCanyon. To save you some time, here’s a selection of the 11 best tab and accordion widgets and plugins available on CodeCanyon to get you started.</p><h2>1. <a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a>
</h2><p>The Accordion Slider plugin combines two great functions in one handy plugin. First it functions as an accordion, and secondly it functions as a slider.</p><p><img width="624" alt="Accordion Slider - Responsive WordPress Plugin" data-src="https://lh3.googleusercontent.com/pva_O8o2lw5eGemOTRakfEubH_nDdk5M6Wz5wj6PNZ0Q2Zi0I0b_dGk6zhFr1cIMSWwf7gjwuQqGvPDlK1Sqbznf9DbnvETmtuWLxW9Jlva5B-5fte-rZ8D3u1QAaaN9uT5tqSwn" height="315"></p><p>Best features:</p><ul>
<li>add as many panels as you want without worrying about screen space</li>
<li>touch-enabled to work well with mobile screens  </li>
<li>loads images and content from posts, galleries, and Flickr</li>
<li>accordions are automatically cached to improve the load time</li>
<li>can be placed anywhere: in posts/pages, template PHP code, or widgets</li>
</ul><p><a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a> is a great two-in-one plugin that will appeal to those looking for a great way to present images or text.<br></p><h2>2. <a href="https://codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/7788530?s_rank=10">Grid Accordion—Responsive WordPress Plugin</a>
</h2><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/32853/image/grid_accordion.jpg"></figure><p>One of the best-looking accordions out there, Grid Accordion adds a fresh feel to your site by offering a feature not found in other plugins: an accordion that works in two directions. While most plugins let you open and close tabs or similar UI elements either horizontally or vertically, with this plugin, you can do both. Not only does it handle text content well within its accordion grid, but you can even fill your content areas with images and other media for a more stunning effect.</p><p>Make sure to check out <a href="https://preview.codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/full_screen_preview/7788530">the demo for Grid Accordion here</a>.</p><p>This plugin also comes with a host of other features, such as:</p><ul>
<li>a fully responsive and touch-enabled design</li>
<li>support for dynamic content from posts and galleries</li>
<li>available hooks for actions and filters</li>
<li>JavaScript API endpoints for maximum customisation</li>
</ul><h2>3. <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a>
</h2><p>The WP Responsive FAQ with Category plugin is specifically designed for users who have or want to add a Frequently Asked Questions area to their site and don’t want their visitors to have to scroll through an endless stream of text to get to the questions and answers that are relevant to them.</p><p><img width="624" alt="WP Responsive FAQ with Category" data-src="https://lh6.googleusercontent.com/OygbqvmXEE40EnIfqf3K2DnDUy_wStzcjn6q4gZnuL9xkgtsOWfR7Xa-d1M_Sv6IxHI1-Cv_cFtJCdIEEgN_Bn3YXRXzwubRJ6L7yQ3wNYUMiS4K2XVDUQeKNpGAJWcyDOkHpGN_" height="325"></p><p>Best features:</p><ul>
<li>FAQs can be arranged by category</li>
<li>15 customisable different designs to choose from</li>
<li>compatible with Visual Composer page builder and WooCommerce</li>
<li>two types of FAQ toggle icons: arrow or plus sign</li>
</ul><p>There’s no question that <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a> is the answer to all your FAQ needs.</p><h2>4. <a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a>
</h2><p>The WooCommerce Category Accordion is designed specifically for WooCommerce users. It can be used as a widget or shortcode to list product categories and subcategories.</p><p><img width="624" alt="WooCommerce Category Accordion" data-src="https://lh4.googleusercontent.com/SWaCWKaP2m7BWYETuDifvWWzOvi9wcLLKR1F3kjRpCpE7dO-yRwz5pSXmnHI8r4SdZDKERBUAAzUfw5XINTr9Dpm8ONuv0ondbt8PhcGGk-nlNQRPOOlB6jfLLafzUjk2LUg5mr_" height="331"></p><p>Best features:</p><ul>
<li>supports unlimited categories and subcategories</li>
<li>14 Font Awesome Icons included</li>
<li>ability to highlight current category option</li>
<li>sort by ascending or descending order</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a> is ideal for users who want to organize their products or services into categories and subcategories to make it easier for customers to navigate their site.</p><h2>5. <a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion</a>
</h2><p>Responsive Searchable 3 Level Accordion is a simple plugin that can be used anywhere on your WordPress site. It will appeal to users who are looking to arrange content in accordion style within a post, sidebar, footer, etc.</p><p><img width="624" alt="Responsive Searchable 3 Level Accordion For WordPress" data-src="https://lh3.googleusercontent.com/E9Efb4gonUucKHvA_BWpqwXmmzmDOLgJhfRxK_p829BmlzdK2xYvsZq1hhzD8hmjRwbPh2iyjYb1lWASf4Wv1YeRrs-TeCZN-H6qAbMZ-hgHz4hwU-IA67UsSzVPOfNUNidj5cve" height="308"></p><p>Best features:</p><ul>
<li>can be used as a widget or shortcode</li>
<li>three nesting levels available</li>
<li>five readymade styling options</li>
<li>allows users to type in searched phrase</li>
</ul><p><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion For WordPress</a> is a low-fuss plugin, and its standout features like three-level support and searchable content really set it apart.<br></p><h2>6. <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9">Accordion FAQ WordPress Plugin</a>
</h2><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/32853/image/accordion_faq.jpg"></figure><p>FAQ pages are an important part of almost any website, and with this plugin, you can fit a mountain of text behind a sleek and easily digestible display. This accordion plugin focuses on doing one thing, creating FAQ-style content easily, and it does it well.</p><p>Here’s what you can expect to get with this plugin:</p><ul>
<li>ability to quickly add multiple FAQ accordions throughout your site</li>
<li>easy drag-and-drop interface for reordering</li>
<li>colour, icon, and font customisation</li>
<li>built-in generator for creating short codes</li>
</ul><p>If you’re looking to add a FAQ section to your existing design, then the Accordion FAQ WordPress Plugin has you covered.</p><h2>7. <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a>
</h2><p>WordPress Tabs and Accordions DZS is another plugin that gives users access to both tab and accordion functions.</p><p><img width="624" alt="WordPress Tabs and Accordions DZS" data-src="https://lh3.googleusercontent.com/GiA8FfRL7K9j2KMHXKqJ4HOKe1QOTwzIqypsD6_8HPlv80WP6esiwnH04K72dsFPJKSlns72shcorJOFne3xe1R-oRhjwzIhv4T2MDec1FAZp_bTwlAHgxeRlLgwuWDoLWDtSTp8" height="329"></p><p>Best features:</p><ul>
<li>full skins to fit every brand</li>
<li>WYSIWYG editor</li>
<li>unlimited colour options for customisation</li>
<li>iPhone, iPad and Android optimized</li>
<li>and more</li>
</ul><p>So if StackTabs doesn’t appeal, <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a> is another great two-for-one option.</p><h2>8. <a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19">Side Tabs—Layered Popups Add-on</a>
</h2><p>A little different than most of the plugins on this list, Side Tabs delivers the features you’d expect from a tab plugin, but instead of existing within your site’s content, they live at the edge of your screen. This unique presentation creates a number of unusual uses.</p><p>One of the most interesting ways you can use Side Tabs is to present a constant access point to content throughout an entire page (or several pages). Besides that, it also makes a great tool for offering Calls to Action and similar content without being too intrusive.</p><p>With a ton of customisation and animation options available out of the box, this plugin works brilliantly for anyone looking to add a fresh way of presenting information to their site.</p><h2>9. <a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>
</h2><p>If you have a WooCommerce site, the WooCommerce Tab Pro plugin will allow you to create and manage 11 different types of tabs to display your products.</p><p><img width="624" alt="WooCommerce Tabs Pro Extra Tabs for Product Page" data-src="https://lh5.googleusercontent.com/ecnsUzKpxwa-RIO0KcuxoiydT_DYEtfs28F0VpzlP4c1yWfyVEyvXgrR-DeriZuXV1URssvt4evFeIKQhcaZ3rG5DmfrojHZJp7GwbT8j8dCsbwnhS5fPaM_7rQwCMh4JK84mwIy" height="328"></p><p>Best features:</p><ul>
<li>ability to add unlimited tabs to a single product page</li>
<li>WYSIWYG editor for editing custom content</li>
<li>ability to enable or disable tabs</li>
<li>ability to create a global tab that can be used with all products</li>
</ul><p>When you have an eCommerce site, making improvements to your layout can really boost sales. With <a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>, the tills will soon be ringing.</p><h2>10. <a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs for Visual Composer</a>
</h2><p>Elegant Tabs for Visual Composer is an add-on for the WPBakery WordPress plugin (formerly Visual Composer). It lets you add any shortcode to multiple tabs and offers loads of customisation like different colours, icons and backgrounds for different sections or tabs.</p><p><img width="624" alt="Elegant Tabs for Visual Composer" data-src="https://lh4.googleusercontent.com/pYFbbDVbX2gDAHJiqV63zlS7fLaxL42-ZJ7uF1R3rDAeukeS7X_Pjh9IygMCs9_wbv5lQEhW-rzcbcHNMNWGb5iHCsCj26JIxd5-DyVNMWMhYYEpJarrBNc_csf8lAQIV1Ou-gxf" height="329"></p><p>Best features:</p><ul>
<li>vertical tabs</li>
<li>drag and drop any WPBakery elements inside the tab content</li>
<li>supports deep linking</li>
<li>ten different styles of tabs and unlimited variations</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs</a> is also available for <a href="https://codecanyon.net/item/elegant-tabs-for-fusion-builder/18795917?s_rank=1">Fusion Builder</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-woocommerce/9846605?s_rank=2">WooCommerce</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-cornerstone/16825384?s_rank=5">Cornerstone</a>, and <a href="https://codecanyon.net/item/elegant-tabs-for-beaver-builder/17965885?s_rank=7">Beaver Builder</a>.</p><h2>11. <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a>
</h2><p>Like the Social Network Tabs for WordPress, the PullOut Widgets is a different take on tabs. It is specifically designed to turn any widget on your site into a pullout tab.</p><p><img width="624" alt="PullOut Widgets for WordPress" data-src="https://lh6.googleusercontent.com/uO1fWaWaZCpwPY_PjacKz-XhbDyHYWwQE382YXZhsE5XPz4Rpg0zQ5zCjz12qa8Hd-copoXBIw7JIkdHQN7jJRDrmCO5dM18KFJr0LyN2S8N8jCAURRPITUZ0kFymuO8dJO2gPb6" height="333"></p><p>Best features:</p><ul>
<li>289 icons for pullout tabs</li>
<li>32 sliding animation effects</li>
<li>unlimited pullout widget positioning on top, right, bottom or left side</li>
<li>unlimited widget colours</li>
</ul><p>The most successful websites are interactive, and <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a> gives your visitors plenty of chances to engage with your content.</p><h2>What Do You Think?</h2><p>Tell us what you think! Are there any more accordion or tab plugins out there that you like? What projects do you use these plugins for? Let us know in the comments or shoot us an email with your ideas.</p><p>These 11 best tab and accordion WordPress widgets and plugins are just a few of the products available at Envato Market. If you haven’t found what you’re looking for here, we have plenty of other great options to fit your needs. So check out the selection of <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=tabs&amp;referrer=search&amp;view=list&amp;category=wordpress">tab</a> and <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=accordion&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=wordpress">accordion widgets and plugins</a>. And if you want to improve your WordPress skills, check out our ever so useful <a href="https://code.tutsplus.com/categories/wordpress">free WordPress tutorials</a>.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-03-04T19:47:44+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[12 Best Tab &amp; Accordion WordPress Widgets &amp; Plugins]]></title>
      <link>//shineyrock.com/blog/read/12_best_tab_accordion_wordpress_widgets_plugins</link>
      <guid>https://shineyrock.com/blog/read/12_best_tab_accordion_wordpress_widgets_plugins#When:19:47:44Z</guid>
      <description><![CDATA[<p>Sometimes page copy can become a little longer than we expect. When the information is valuable, and necessary, it’s tough to cut it down. Fortunately, there’s a way to save vertical real estate on your WordPress site and also reduce information overload for users.</p><p>Accordions and tabs are great ways to communicate text-heavy information in an elegant and condensed way. Accordions contain vertically or horizontally stacked panels with simple visible. When these panels are clicked, they expand and reveal more information associated with the caption.</p><p>Tabs perform a similar function to accordions but in a different way. They are modelled after traditional card tabs inserted in files or card indexes. Like card tabs, tab plugins and widgets are labelled and give clues to the information they conceal. By clicking a tab, a user can reveal more information about the subject of the tab and can use them to navigate through a site or a page.</p><p>Whether you’re looking for a <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=tabs&amp;referrer=search&amp;view=list&amp;category=wordpress">tab</a> or <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=accordion&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=wordpress">accordion widget or plugin</a> (or even a <a href="https://themeforest.net/free/wordpress-themes">free WordPress theme</a>), you can find what you’re looking for on CodeCanyon. To save you some time, here’s a selection of the 11 best tab and accordion widgets and plugins available on Code Canyon to get you started.</p><h2>1. <a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a>
</h2><p>The Accordion Slider plugin combines two great functions in one handy plugin. First it functions as an accordion, and secondly it functions as a slider.</p><p><img width="624" alt="Accordion Slider - Responsive WordPress Plugin" data-src="https://lh3.googleusercontent.com/pva_O8o2lw5eGemOTRakfEubH_nDdk5M6Wz5wj6PNZ0Q2Zi0I0b_dGk6zhFr1cIMSWwf7gjwuQqGvPDlK1Sqbznf9DbnvETmtuWLxW9Jlva5B-5fte-rZ8D3u1QAaaN9uT5tqSwn" height="315"></p><p>Best features:</p><ul>
<li>add as many panels as you want without worrying about screen space</li>
<li>touch-enabled to work well with mobile screens  </li>
<li>loads images and content from posts, galleries, and Flickr</li>
<li>accordions are automatically cached to improve the load time</li>
<li>can be placed anywhere, in posts/pages, template PHP code, or widgets</li>
</ul><p><a href="https://codecanyon.net/item/accordion-slider-responsive-wordpress-plugin/7341927?s_rank=1">Accordion Slider—Responsive WordPress Plugin</a> is a great two-in-one plugin that will appeal to those looking for a great way to present images or text.<br></p><h2>2. <a href="https://codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/7788530?s_rank=10">Grid Accordion—Responsive WordPress Plugin</a>
</h2><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/32853/image/grid_accordion.jpg"></figure><p>One of the best looking accordions out there, Grid Accordion adds a fresh feel to your site by offering a feature not found in other plugins; an accordion that works in two dimensions. While most plugins let you open and close tabs or similar UI elements either horizontally or vertically, with this plugin, you can do both. Not only does it handle text content well within it’s accordion grid, but you can even fill your content areas with images and other media for a more stunning effect.</p><p>Make sure to check out <a href="https://preview.codecanyon.net/item/grid-accordion-responsive-wordpress-plugin/full_screen_preview/7788530">the demo for Grid Accordion here</a>.</p><p>This plugin also comes with a host of other features, such as:</p><ul>
<li>A fully responsive and touch-enabled design</li>
<li>Support for dynamic content from posts and galleries</li>
<li>Available hooks for actions and filters</li>
<li>JavaScript API endpoints for maximum customization</li>
</ul><h2>3. <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a>
</h2><p>The WP Responsive FAQ with Category plugin is specifically designed for users who have or want to add a Frequently Asked Questions area to their site and don’t want their visitors to have to scroll through an endless stream of text to get to the questions and answers that are relevant to them.</p><p><img width="624" alt="WP Responsive FAQ with Category" data-src="https://lh6.googleusercontent.com/OygbqvmXEE40EnIfqf3K2DnDUy_wStzcjn6q4gZnuL9xkgtsOWfR7Xa-d1M_Sv6IxHI1-Cv_cFtJCdIEEgN_Bn3YXRXzwubRJ6L7yQ3wNYUMiS4K2XVDUQeKNpGAJWcyDOkHpGN_" height="325"></p><p>Best features:</p><ul>
<li>FAQs can be arranged by category</li>
<li>15 customisable different designs to choose from</li>
<li>compatible with Visual Composer page builder and WooCommerce</li>
<li>two types of FAQ toggle icons: arrow or plus sign</li>
</ul><p>There’s no question that <a href="https://codecanyon.net/item/wp-responsive-faq-with-category/19539767?s_rank=5">WP Responsive FAQ with Category</a> is the answer to all your FAQ needs.</p><h2>4. <a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a>
</h2><p>The WooCommerce Category Accordion is designed specifically for WooCommerce users. It can be used as a widget or shortcode to list product categories and subcategories.</p><p><img width="624" alt="WooCommerce Category Accordion" data-src="https://lh4.googleusercontent.com/SWaCWKaP2m7BWYETuDifvWWzOvi9wcLLKR1F3kjRpCpE7dO-yRwz5pSXmnHI8r4SdZDKERBUAAzUfw5XINTr9Dpm8ONuv0ondbt8PhcGGk-nlNQRPOOlB6jfLLafzUjk2LUg5mr_" height="331"></p><p>Best features:</p><ul>
<li>supports unlimited categories and subcategories</li>
<li>14 Font Awesome Icons included</li>
<li>ability to highlight current category option</li>
<li>sort by ascending or descending order</li>
</ul><p><a href="https://codecanyon.net/item/woocommerce-category-accordion/7117371?s_rank=4">WooCommerce Category Accordion</a> is ideal for users who want to organize their products or services into categories and subcategories to make it easier for customers to navigate their site.</p><h2>5. <a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion</a>
</h2><p>Responsive Searchable 3 Level Accordion is a simple plugin that can be used anywhere on your WordPress site. It will appeal to users who’re looking to arrange content in accordion style within a post, sidebar, footer, etc.</p><p><img width="624" alt="Responsive Searchable 3 Level Accordion For WordPress" data-src="https://lh3.googleusercontent.com/E9Efb4gonUucKHvA_BWpqwXmmzmDOLgJhfRxK_p829BmlzdK2xYvsZq1hhzD8hmjRwbPh2iyjYb1lWASf4Wv1YeRrs-TeCZN-H6qAbMZ-hgHz4hwU-IA67UsSzVPOfNUNidj5cve" height="308"></p><p>Best features:</p><ul>
<li>can be used as a widget or shortcode</li>
<li>three nesting levels available</li>
<li>five readymade styling options</li>
<li>allows users to type in searched phrase</li>
</ul><p><a href="https://codecanyon.net/item/responsive-searchable-3-level-accordion-for-wordpress/2674697?s_rank=10">Responsive Searchable 3 Level Accordion For WordPress</a> is a low-fuss plugin, and its standout features like three-level support and searchable content really set it apart.<br></p><h2>6. <a href="https://codecanyon.net/item/accordion-faq-wordpress-plugin/5493363?s_rank=9">Accordion FAQ WordPress Plugin</a>
</h2><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/32853/image/accordion_faq.jpg"></figure><p>FAQ pages are an important part of almost any website, and with this plugin, you can fit a mountain of text behind a sleek and easily digestible display. This accordion plugin focuses on doing one thing, creating FAQ-style content easily, and it does it well.</p><p>Here’s what you can expect to get with this plugin:</p><ul>
<li>ability to quickly add multiple FAQ accordions throughout your site</li>
<li>easy drag-and-drop interface for reordering</li>
<li>color, icon, and font customization</li>
<li>built-in generator for creating short codes</li>
</ul><p>If you’re looking to add a FAQ section to your existing design, then the Accordion FAQ WordPress Plugin has you covered.</p><h2>7. <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a>
</h2><p>WordPress Tabs and Accordions DZS is another plugin that gives users access to both tab and accordion functions.</p><p><img width="624" alt="WordPress Tabs and Accordions DZS" data-src="https://lh3.googleusercontent.com/GiA8FfRL7K9j2KMHXKqJ4HOKe1QOTwzIqypsD6_8HPlv80WP6esiwnH04K72dsFPJKSlns72shcorJOFne3xe1R-oRhjwzIhv4T2MDec1FAZp_bTwlAHgxeRlLgwuWDoLWDtSTp8" height="329"></p><p>Best features:</p><ul>
<li>full skins to fit every brand</li>
<li>WYSIWYG editor</li>
<li>unlimited colours options for customisation</li>
<li>iPhone, iPad and Android optimized</li>
<li>and more</li>
</ul><p>So if StackTabs doesn’t appeal, <a href="https://codecanyon.net/item/wordpress-tabs-and-accordions-dzs/7739083?s_rank=11">WordPress Tabs and Accordions DZS</a> is another great two-for-one option.</p><h2>8. <a href="https://codecanyon.net/item/side-tabs-layered-popups-addon/10335326?s_rank=19">Side Tabs—Layered Popups Add-on</a>
</h2><p>A little different than most of the plugins on this list, Side Tabs delivers the features you’d expect from a tab plugin, but instead of existing within your site’s content, they live at the edge of your screen. This unique presentation creates a number of unusual uses.</p><p>One of the most interesting ways you can use Side Tabs is to present a constant access point to content throughout an entire page (or several pages). Besides that, it also makes a great tool for offering Call to Actions and similar content without being too intrusive.</p><p>With a ton of customization and animation options available out-of-the-box, this plugin works brilliantly for anyone looking to add a fresh way of presenting information to their site.</p><h2>9. <a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>
</h2><p>If you have a WooCommerce site, the WooCommerce Tab Pro plugin will allow you to create and manage 11 different types of tabs to display your products.</p><p><img width="624" alt="WooCommerce Tabs Pro Extra Tabs for Product Page" data-src="https://lh5.googleusercontent.com/ecnsUzKpxwa-RIO0KcuxoiydT_DYEtfs28F0VpzlP4c1yWfyVEyvXgrR-DeriZuXV1URssvt4evFeIKQhcaZ3rG5DmfrojHZJp7GwbT8j8dCsbwnhS5fPaM_7rQwCMh4JK84mwIy" height="328"></p><p>Best features:</p><ul>
<li>ability to add unlimited tabs to a single product page</li>
<li>WYSIWYG editor for editing custom content</li>
<li>ability to enable or disable tabs</li>
<li>ability to create a global tab that can be used with all products</li>
</ul><p>When you have an eCommerce site, making improvements to your layout can really boost sales. With<a href="https://codecanyon.net/item/woocommerce-tabs-pro-extra-tabs-for-product-page/8218941?s_rank=4">WooCommerce Tabs Pro: Extra Tabs for Product Page</a>, the tills will soon be ringing.</p><h2>10. <a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs for Visual Composer</a>
</h2><p>Elegant Tabs for Visual Composer is an add-on for the WPBakery WordPress plugin (formerly Visual Composer). It lets you add any shortcode to multiple tabs and offers loads of customisation like different colours, icons and backgrounds for different sections or tabs.</p><p><img width="624" alt="Elegant Tabs for Visual Composer" data-src="https://lh4.googleusercontent.com/pYFbbDVbX2gDAHJiqV63zlS7fLaxL42-ZJ7uF1R3rDAeukeS7X_Pjh9IygMCs9_wbv5lQEhW-rzcbcHNMNWGb5iHCsCj26JIxd5-DyVNMWMhYYEpJarrBNc_csf8lAQIV1Ou-gxf" height="329"></p><p>Best features:</p><ul>
<li>vertical tabs</li>
<li>drag and drop any Visual Composer elements inside the tab content</li>
<li>supports deep linking</li>
<li>ten different styles of tabs and unlimited variations</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/elegant-tabs-for-visual-composer/9598846?s_rank=26">Elegant Tabs</a> is also available for <a href="https://codecanyon.net/item/elegant-tabs-for-fusion-builder/18795917?s_rank=1">Fusion Builder</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-woocommerce/9846605?s_rank=2">WooCommerce</a>, <a href="https://codecanyon.net/item/elegant-tabs-for-cornerstone/16825384?s_rank=5">Cornerstone</a>, and <a href="https://codecanyon.net/item/elegant-tabs-for-beaver-builder/17965885?s_rank=7">Beaver Builder</a>.</p><h2>11. <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a>
</h2><p>Like the Social Network Tabs for WordPress, the PullOut Widgets is a different take on tabs. It is specifically designed to turn any widget on your site into a pullout tab.</p><p><img width="624" alt="PullOut Widgets for WordPress" data-src="https://lh6.googleusercontent.com/uO1fWaWaZCpwPY_PjacKz-XhbDyHYWwQE382YXZhsE5XPz4Rpg0zQ5zCjz12qa8Hd-copoXBIw7JIkdHQN7jJRDrmCO5dM18KFJr0LyN2S8N8jCAURRPITUZ0kFymuO8dJO2gPb6" height="333"></p><p>Best features:</p><ul>
<li>289 icons for pullout tabs</li>
<li>32 sliding animation effects</li>
<li>unlimited pullout widget positioning on top, right, bottom or left side</li>
<li>unlimited widget colours</li>
</ul><p>The most successful websites are interactive, and <a href="https://codecanyon.net/item/pullout-widgets-for-wordpress/1810209?s_rank=7">PullOut Widgets for WordPress</a> gives your visitors plenty of chances to engage with your content.</p><h2>What Do You Think?</h2><p>Tell us what you think! Are there any more accordion or tab plugins out there that you like? What projects do you use these plugins for? Let us know in the comments or shoot us an email with your ideas.</p><p>These 11 Best Tab &amp; Accordion WordPress Widgets &amp; Plugins are just a few of the products available at Envato Market. If you haven’t found what you’re looking for here, we have plenty of other great options to fit your needs. So check out the selection of <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=tabs&amp;referrer=search&amp;view=list&amp;category=wordpress">tab</a> and <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;term=accordion&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=wordpress">accordion widgets and plugins</a>. And if you want to improve your WordPress skills, check out our ever so useful <a href="https://code.tutsplus.com/categories/wordpress">free WordPress tutorials</a>.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-03-04T19:47:44+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[New Course: Practical React Fundamentals]]></title>
      <link>//shineyrock.com/blog/read/new-course-practical-react-fundamentals</link>
      <guid>https://shineyrock.com/blog/read/new-course-practical-react-fundamentals#When:15:04:20Z</guid>
      <description><![CDATA[<p>If you want to build dynamic single-page applications quickly and easily, React is a wonderful solution. Learn how to use it—while building your own React app from scratch—in our comprehensive new course, <a href="https://code.tutsplus.com/courses/practical-react-fundamentals?ec_promo=teaser_post" target="_self">Practical React Fundamentals</a>.</p><h2>What You’ll Learn</h2><p>Millions of developers all over the world are beginning to see the power and ease with which you can build front-end web apps with React. So take a little time with <a href="https://tutsplus.com/authors/derek-jensen?ec_promo=teaser_post" target="_self">Derek Jensen</a> to learn the fundamental concepts that make up React! </p><p>In this course, you'll learn to build a complete web app—a simple hangman clone. </p><figure class="post_image"><a href="https://code.tutsplus.com/courses/practical-react-fundamentals?ec_promo=teaser_post" target="_self"><img alt="React app built in Practical React Fundamentals course" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/32680/image/React-App.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/32680/image/React-App.jpg"></a></figure><p>You'll learn how to create a new app project, build out all the components, handle states and styles, and work with web and lifecycle events. All this, and maybe even have a little fun while doing it!</p><h2>Watch the Introduction</h2><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_c0wz539esx videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you can download unlimited items from the huge Envato Elements library of 890,000 creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-02-04T15:04:20+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Short Course: Better Angular App Architecture With Modules]]></title>
      <link>//shineyrock.com/blog/read/short-course-better-angular-app-architecture-with-modules</link>
      <guid>https://shineyrock.com/blog/read/short-course-better-angular-app-architecture-with-modules#When:11:22:54Z</guid>
      <description><![CDATA[<p>In all of the holiday rush, maybe you missed a short course we published on the very last day of the year, <a href="https://code.tutsplus.com/courses/better-angular-app-architecture-with-modules?ec_promo=short_course" target="_self">Better Angular App Architecture With Modules</a>. Learn more about it and watch a free introductory video below.</p><h2>What You’ll Learn</h2><p>When you're just starting out with Angular, you'll probably write your app as a single module. This works fine for small apps, but for more complex production apps, the single-module approach will quickly get out of control and make the code hard to maintain.</p><p>In this course, <a href="https://tutsplus.com/authors/dan-wellman?ec_promo=short_course" target="_self">Dan Wellman</a> will teach you how to move from a small single-module Angular app to a larger, more complex multi-module architecture. </p><figure class="post_image"><a href="https://code.tutsplus.com/courses/better-angular-app-architecture-with-modules?ec_promo=short_course" target="_self"><img alt="Better Angular App Architecture With Modules screenshot" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/32596/image/Angular-Modules.jpg"></a></figure><p>Among other things, you'll learn about:</p><ul>
<li>adding submodules and feature modules<br>
</li>
<li>lazy-loading feature modules</li>
<li>handling services</li>
<li>creating a third-party module</li>
</ul><p>Along the way, you'll see a practical example of how to break an app down into discrete sections in order to minimise and organise the complexity that growth of the codebase brings.</p><h2>Watch the Introduction</h2><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_6h9iyqe5j2 videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=short_course" target="_self">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 870,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-01-21T11:22:54+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Preview Our New Course on Angular Material]]></title>
      <link>//shineyrock.com/blog/read/preview-our-new-course-on-angular-material</link>
      <guid>https://shineyrock.com/blog/read/preview-our-new-course-on-angular-material#When:13:50:14Z</guid>
      <description><![CDATA[<p>Angular Material makes it easy to create a great UI for your Angular app. See how it works in our new course, <a href="https://code.tutsplus.com/courses/building-app-uis-with-angular-material?ec_promo=teaser_post_long" target="_self">Building App UIs With Angular Material</a>. Keep reading for some free videos from the course.</p><h2>What You’ll Learn</h2><p>In this course, <a href="https://tutsplus.com/authors/dan-wellman?ec_promo=teaser_post_long" target="_self">Dan Wellman</a> will show you how to use Angular and Angular Material to build rich and interactive UIs for your web apps. You'll learn how to set up the library in a new project and how to use each of the main interface components and layout components. You'll also learn how to create forms and use overlay components such as dialogs and tooltips.<br></p><p>Here are a couple of free lessons from this course, as a preview of what you can expect:<br></p><h3>Adding Your First Material Component</h3><p>In this video, you'll learn how to add your first Material component, which will be the Material sidebar component. This is one of the components that you can generate using the Angular CLI, so it makes sense to start here.</p><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_9df2pyel13 videoFoam=true"> </div></div></div></figure><h3>Material Form Fields</h3><p>In this video, you'll learn about the Material form field container, which is the basis for creating styled and dynamic form controls using Angular Material.</p><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_c83j5oi8nb videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post_long" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 870,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-01-09T13:50:14+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Build Your Own CAPTCHA and Contact Form in PHP]]></title>
      <link>//shineyrock.com/blog/read/build-your-own-captcha-and-contact-form-in-php</link>
      <guid>https://shineyrock.com/blog/read/build-your-own-captcha-and-contact-form-in-php#When:17:11:11Z</guid>
      <description><![CDATA[<p>People write code every day to automate a variety of processes. We exploit the fact that computers are a lot faster and more accurate than humans, which lets us simplify a lot of mundane tasks. Unfortunately, these same abilities can be used to program computers to do something malicious like sending spam or guessing passwords. The focus of this tutorial will be on combating spam.</p><p>Let's say you have a website with a contact form to make it easy for visitors to contact you. All they have to do is fill out a form and hit the send button to let you know about a problem or request they have. This is an important feature of a public-facing website, but the process of filling out form values can be automated by malicious users to send a lot of spam your way. This type of spamming technique is not limited to just contact forms. Bots can also be used to fill your forums with spam posts or comments that link to harmful websites.</p><p>One way to solve this problem is to devise a test which can distinguish between bots which are trying to spread spam and people who legitimately want to contact you. This is where CAPTCHAs come in. They generally consist of images with a random combination of five or six letters written on a colored background. The idea is that a human will be able to read the text inside the image, but a bot won't. Checking the user-filled CAPTCHA value against the original can help you distinguish bots from humans. CAPTCHA stands for "completely automated public Turing test to tell computers and humans apart".</p><p>In this tutorial, we will learn how to create our own CAPTCHAs and then integrate them with the contact form we created in the tutorial.</p><h2>Creating the CAPTCHA<br>
</h2><p>We will use the PHP GD library to create our CAPTCHA. You can learn more about <a href="https://code.tutsplus.com/tutorials/rendering-text-and-basic-shapes-using-gd--cms-31767" rel="external" target="_blank">writing text and drawing shapes with GD</a> in one of my earlier tutorials. We will also have to write a little bit of code to create our random string to be written on the image that's created. Yet another tutorial, titled <a href="http://code.tutsplus.com/tutorials/generate-random-alphanumeric-strings-in-php--cms-32132" rel="external" target="_blank">Generating Random Alphanumeric Strings in PHP</a>, can help us in this regard.</p><h3>Generate a Random String</h3><p>All the code from this section will go in the <strong>captcha.php</strong> file. Let's begin by writing the function to create the random string.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php

$permitted_chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

function generate_string($input, $strength = 5) {
    $input_length = strlen($input);
    $random_string = '';
    for($i = 0; $i &lt; $strength; $i++) {
        $random_character = $input[mt_rand(0, $input_length - 1)];
        $random_string .= $random_character;
    }

    return $random_string;
}

$string_length = 6;
$captcha_string = generate_string($permitted_chars, $string_length);


?&gt;</pre><p>The <code class="inline">$permitted_chars</code> variable stores all the characters that we want to use to generate our CAPTCHA string. We are only using capital letters in the English alphabet to avoid any confusion that might arise due to letters or numbers that might look alike. You can use any set of characters that you like to increase or decrease the difficulty of the CAPTCHA.</p><p>Our function creates a five-letter string by default, but you can change that value by passing a different parameter to the <code class="inline">generate_string()</code> function.</p><h3>Render the CAPTCHA Background</h3><p>Once we have our random string, it's time to write the code to create the background of the CAPTCHA image. The image will be 200 x 50 pixels in size and will use five different colors for the background.<br></p><pre class="brush: php noskimlinks noskimwords">&lt;?php

$image = imagecreatetruecolor(200, 50);

imageantialias($image, true);

$colors = [];

$red = rand(125, 175);
$green = rand(125, 175);
$blue = rand(125, 175);

for($i = 0; $i &lt; 5; $i++) {
  $colors[] = imagecolorallocate($image, $red - 20*$i, $green - 20*$i, $blue - 20*$i);
}

imagefill($image, 0, 0, $colors[0]);

for($i = 0; $i &lt; 10; $i++) {
  imagesetthickness($image, rand(2, 10));
  $rect_color = $colors[rand(1, 4)];
  imagerectangle($image, rand(-10, 190), rand(-10, 10), rand(-10, 190), rand(40, 60), $rect_color);
}

?&gt;</pre><p>We begin with random values for the variables <code class="inline">$red</code>, <code class="inline">$green</code>, and <code class="inline">$blue</code>. These values determine the final color of the image background. After that, we run a <code class="inline">for</code> loop to create progressively darker shades of the original color. These colors are stored in an array. The lightest color is the first element of our <code class="inline">$colors</code> array, and the darkest color is the last element. The lightest color is used to fill the whole background of the image.</p><p>In the next step, we use a <code class="inline">for</code> loop to draw rectangles at random locations on our original image. The thickness of the rectangles varies between 2 and 10, while the color is chosen randomly from the last four values of our <code class="inline">$colors</code> array.</p><p>Drawing all these rectangles adds more colors to the background, making it a little harder to distinguish the foreground of the CAPTCHA string from the background of the image.</p><p>Your CAPTCHA background should now look similar to the following image.</p><figure class="post_image"><img alt="CAPTCHA background in PHP" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/32328/image/captcha_plain.png"></figure><h3>Render the CAPTCHA String</h3><p>For the final step, we just have to draw the CAPTCHA string on our background. The color, y-coordinate, and rotation of individual letters is determined randomly to make the CAPTCHA string harder to read.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php

$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$textcolors = [$black, $white];

$fonts = [dirname(__FILE__).'\fonts\Acme.ttf', dirname(__FILE__).'\fonts\Ubuntu.ttf', dirname(__FILE__).'\fonts\Merriweather.ttf', dirname(__FILE__).'\fonts\PlayfairDisplay.ttf'];

$string_length = 6;
$captcha_string = generate_string($permitted_chars, $string_length);

for($i = 0; $i &lt; $string_length; $i++) {
  $letter_space = 170/$string_length;
  $initial = 15;

  imagettftext($image, 20, rand(-15, 15), $initial + $i*$letter_space, rand(20, 40), $textcolors[rand(0, 1)], $fonts[array_rand($fonts)], $captcha_string[$i]);
}

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);

?&gt;</pre><p>As you can see, I'm using some fonts I downloaded from Google to get variation in the characters. There is a padding of 15 pixels on both sides of the image. The leftover space—170 pixels—is divided equally among all the CAPTCHA letters.</p><p>After rendering the text string above the background, your result should look similar to the image below. The characters will be different, but they should be slightly rotated and a mix of black and white.</p><figure class="post_image"><img alt="CAPTCHA background with text" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/32328/image/captcha_text.png"></figure><h2>Adding the CAPTCHA to Our Contact Form</h2><p>Now that we have created our CAPTCHA, it's time to add it to our contact form. We will use the contact form from <a href="http://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314" rel="external" target="_blank">my previous tutorial on how to create a PHP contact form</a> and add the CAPTCHA just above the <strong>Send Message</strong> button.</p><p>We will be using sessions to store the CAPTCHA text and then validating the text entered by website visitors. Here is the complete code of our <strong>captcha.php</strong> file:</p><pre class="brush: php noskimlinks noskimwords">&lt;?php

session_start();

$permitted_chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ';

function generate_string($input, $strength = 10) {
    $input_length = strlen($input);
    $random_string = '';
    for($i = 0; $i &lt; $strength; $i++) {
        $random_character = $input[mt_rand(0, $input_length - 1)];
        $random_string .= $random_character;
    }

    return $random_string;
}

$image = imagecreatetruecolor(200, 50);

imageantialias($image, true);

$colors = [];

$red = rand(125, 175);
$green = rand(125, 175);
$blue = rand(125, 175);

for($i = 0; $i &lt; 5; $i++) {
  $colors[] = imagecolorallocate($image, $red - 20*$i, $green - 20*$i, $blue - 20*$i);
}

imagefill($image, 0, 0, $colors[0]);

for($i = 0; $i &lt; 10; $i++) {
  imagesetthickness($image, rand(2, 10));
  $line_color = $colors[rand(1, 4)];
  imagerectangle($image, rand(-10, 190), rand(-10, 10), rand(-10, 190), rand(40, 60), $line_color);
}

$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$textcolors = [$black, $white];

$fonts = [dirname(__FILE__).'\fonts\Acme.ttf', dirname(__FILE__).'\fonts\Ubuntu.ttf', dirname(__FILE__).'\fonts\Merriweather.ttf', dirname(__FILE__).'\fonts\PlayfairDisplay.ttf'];

$string_length = 6;
$captcha_string = generate_string($permitted_chars, $string_length);

$_SESSION['captcha_text'] = $captcha_string;

for($i = 0; $i &lt; $string_length; $i++) {
  $letter_space = 170/$string_length;
  $initial = 15;

  imagettftext($image, 24, rand(-15, 15), $initial + $i*$letter_space, rand(25, 45), $textcolors[rand(0, 1)], $fonts[array_rand($fonts)], $captcha_string[$i]);
}

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?&gt;</pre><p>The fonts that you want to use will go into the <strong>fonts</strong> directory. Now, you simply have to add the following HTML code above the <strong>Send Message</strong> button from our previous tutorial on <a href="http://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314" rel="external" target="_blank">creating a contact form in HTML and PHP</a>.</p><pre class="brush: html noskimlinks noskimwords">&lt;div class="elem-group"&gt;
    &lt;label for="captcha"&gt;Please Enter the Captcha Text&lt;/label&gt;
    &lt;img src="captcha.php" alt="CAPTCHA" class="captcha-image"&gt;&lt;i class="fas fa-redo refresh-captcha"&gt;&lt;/i&gt;
    &lt;br&gt;
    &lt;input type="text" id="captcha" name="captcha_challenge" pattern="[A-Z]{6}"&gt;
&lt;/div&gt;</pre><p>Sometimes, the CAPTCHA text will be hard to read even for humans. In these situations, we want them to be able to ask for a new CAPTCHA in a user-friendly manner. The redo icon above helps us do exactly that. All you have to do is add the JavaScript below on the same page as the HTML for the contact form.</p><pre class="brush: javascript noskimlinks noskimwords">var refreshButton = document.querySelector(".refresh-captcha");
refreshButton.onclick = function() {
  document.querySelector(".captcha-image").src = 'captcha.php?' + Date.now();
}</pre><p>After integrating the CAPTCHA in the form and adding a refresh button, you should get a form that looks like the image below.</p><figure class="post_image"><img alt="PHP Contact form with CAPTCHA" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/32328/image/form_captcha_wide.png"></figure><p>The final step in our integration of the CAPTCHA we created with the contact form involves checking the CAPTCHA value input by users when filling out the form and matching it with the value stored in the session. Update the <strong>contact.php</strong> file from the previous tutorial to have the following code.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php

session_start();

if($_POST) {
    $visitor_name = "";
    $visitor_email = "";
    $email_title = "";
    $concerned_department = "";
    $visitor_message = "";

    if(isset($_POST['captcha_challenge']) &amp;&amp; $_POST['captcha_challenge'] == $_SESSION['captcha_text']) {

        if(isset($_POST['visitor_name'])) {
            $visitor_name = filter_var($_POST['visitor_name'], FILTER_SANITIZE_STRING);
        }

        if(isset($_POST['visitor_email'])) {
            $visitor_email = str_replace(array("\r", "\n", "%0a", "%0d"), '', $_POST['visitor_email']);
            $visitor_email = filter_var($visitor_email, FILTER_VALIDATE_EMAIL);

        }

        if(isset($_POST['email_title'])) {
            $email_title = filter_var($_POST['email_title'], FILTER_SANITIZE_STRING);
        }

        if(isset($_POST['concerned_department'])) {
            $concerned_department = filter_var($_POST['concerned_department'], FILTER_SANITIZE_STRING);
        }

        if(isset($_POST['visitor_message'])) {
            $visitor_message = htmlspecialchars($_POST['visitor_message']);
        }

        if($concerned_department == "billing") {
            $recipient = "billing@domain.com";
        }
        else if($concerned_department == "marketing") {
            $recipient = "marketing@domain.com";
        }
        else if($concerned_department == "technical support") {
            $recipient = "tech.support@domain.com";
        }
        else {
            $recipient = "contact@domain.com";
        }

        $headers  = 'MIME-Version: 1.0' . "\r\n"
        .'Content-type: text/html; charset=utf-8' . "\r\n"
        .'From: ' . $visitor_email . "\r\n";

        if(mail($recipient, $email_title, $visitor_message, $headers)) {
            echo '&lt;p&gt;Thank you for contacting us. You will get a reply within 24 hours.&lt;/p&gt;';
        } else {
            echo '&lt;p&gt;We are sorry but the email did not go through.&lt;/p&gt;';
        }
    } else {
        echo '&lt;p&gt;You entered an incorrect Captcha.&lt;/p&gt;';
    }

} else {
    echo '&lt;p&gt;Something went wrong&lt;/p&gt;';
}

?&gt;</pre><p>We updated this file to first check if the CAPTCHA value stored in the session is the same as the value input by the user. If they are different, we simply tell the visitors that they entered an incorrect CAPTCHA. You can handle the situation differently based on what your project needs.</p><h2>Final Thoughts</h2><p>In this tutorial, we created our own CAPTCHA in PHP from scratch and integrated it with a <a href="http://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314" rel="external" target="_blank">PHP contact form</a> we built in one of our earlier tutorials. We also made the CAPTCHA more user-friendly by adding a refresh button so that users get a new string with a new background in case the previous one was unreadable.</p><p>You can also use the logic from this tutorial to create a CAPTCHA that relies on solving basic mathematical equations like addition and subtraction. </p><p>If you want to add a CAPTCHA to your website, you should check out some of the form and CAPTCHA plugins available from CodeCanyon. Some of these have CAPTCHA and many other features like a file uploader built in. </p><p>If you have any questions or suggestions, feel free to let me know in the comments. You should also take a look at this list of <a href="https://code.tutsplus.com/articles/best-contact-form-php-scripts--cms-30639" rel="external" target="_blank">best PHP contact forms</a>.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/best-contact-form-php-scripts--cms-30639"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/30639/preview_image/php-wide-retina-preview.png"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">12 Best Contact Form PHP Scripts</div>
<div class="roundup-block__author">Nona Blackman</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/tutorials/create-a-contact-form-in-php--cms-32314"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/32314/preview_image/php-tutsplus.png"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">Create a Contact Form in PHP</div>
<div class="roundup-block__author">Monty Shokeen</div></a></li>
</ul><p></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2019-01-08T17:11:11+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Object-Oriented PHP With Classes and Objects]]></title>
      <link>//shineyrock.com/blog/read/object-oriented-php-with-classes-and-objects</link>
      <guid>https://shineyrock.com/blog/read/object-oriented-php-with-classes-and-objects#When:04:06:48Z</guid>
      <description><![CDATA[<p>In this article, we're going to explore the basics of object-oriented programming in PHP. We'll start with an introduction to classes and objects, and we'll discuss a couple of advanced concepts like inheritance and polymorphism in the latter half of this article.</p><h2>What Is Object-Oriented Programming (OOP)?</h2><p>Object-oriented programming, commonly referred to as OOP, is an approach which helps you to develop complex applications in a way that's easily maintainable and scalable over the long term. In the world of OOP, real-world entities such as <code class="inline">Person</code>, <code class="inline">Car</code>, or <code class="inline">Animal</code> are treated as objects. In object-oriented programming, you interact with your application by using objects. This contrasts with procedural programming, where you primarily interact with functions and global variables.</p><p>In OOP, there's a concept of "<strong>class</strong>", which is used to model or map a real-world entity to a template of data (<strong>properties</strong>) and functionality (<strong>methods</strong>). An "<strong>object</strong>" is an instance of a class, and you can create multiple instances of the same class. For example, there is a single <code class="inline">Person</code> class, but many person objects can be instances of this class—<code class="inline">dan</code>, <code class="inline">zainab</code>, <code class="inline">hector</code>, etc. </p><p>The class defines properties. For example, for the Person class, we might have <code class="inline">name</code>, <code class="inline">age</code>, and <code class="inline">phoneNumber</code>. Then each person object will have its own values for those properties. </p><p>You can also define methods in the class that allow you to manipulate the values of object properties and perform operations on objects. As an example, you could define a <code class="inline">save</code> method which saves the object information to a database.</p><h2>What Is a PHP Class?</h2><p>A class is a template which represents a real-world entity, and it defines properties and methods of the entity. In this section, we’ll discuss the basic anatomy of a typical PHP class.</p><p>The best way to understand new concepts is with an example. So let's have a look at the <code class="inline">Employee</code> class in the following snippet, which represents the employee entity.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
class Employee
{
  private $first_name;
  private $last_name;
  private $age;

  public function __construct($first_name, $last_name, $age)
  {
    $this-&gt;first_name = $first_name;
    $this-&gt;last_name = $last_name;
    $this-&gt;age = $age;
  }

  public function getFirstName()
  {
    return $this-&gt;first_name;
  }

  public function getLastName()
  {
    return $this-&gt;last_name;
  }

  public function getAge()
  {
    return $this-&gt;age;
  }
}
?&gt;</pre><p>The <code class="inline">class Employee</code> statement in the first line defines the <code class="inline">Employee</code> class. Then, we go on to declare the properties, the constructor, and the other class methods.</p><h3>Class Properties in PHP</h3><p>You could think of class properties as variables that are used to hold information about the object. In the above example, we’ve defined three properties<em>—</em><code class="inline">first_name</code>, <code class="inline">last_name</code>, and <code class="inline">age</code>. In most cases, class properties are accessed via instantiated objects.</p><p>These properties are <code class="inline">private</code>, which means they can only be accessed from within the class. This is the safest access level for properties. We’ll discuss the different access levels for class properties and methods later in this article.</p><h3>Constructors for PHP Classes</h3><p>A constructor is a special class method which is called automatically when you instantiate an object. We’ll see how to instantiate objects in the next couple of sections, but for now you just have to know that a constructor is used to initialize object properties when the object is being created.</p><p>You can define a constructor by defining the <code class="inline">__construct</code> method.</p><h3>Methods for PHP Classes</h3><p>We can think of class methods as functions that perform specific actions associated with objects. In most cases, they are used to access and manipulate object properties and perform related operations.</p><p>In the above example, we’ve defined the <code class="inline">getLastName</code> method, which returns the last name associated with the object. </p><p>So that’s a brief introduction to the class structure in PHP. In the next section, we’ll see how to instantiate objects of the <code class="inline">Employee</code> class.</p><h2>What Is an Object in PHP?</h2><p>In the previous section, we discussed the basic structure of a class in PHP. Now, when you want to use a class, you need to instantiate it, and the end result is an object. So we could think of a class as a blueprint, and an object is an actual thing that you can work with.</p><p>In the context of the <code class="inline">Employee</code> class which we've just created in the previous section, let's see how to instantiate an object of that class.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
$objEmployee = new Employee('Bob', 'Smith', 30);

echo $objEmployee-&gt;getFirstName(); // print 'Bob'
echo $objEmployee-&gt;getLastName(); // prints 'Smith'
echo $objEmployee-&gt;getAge(); // prints '30'
?&gt;</pre><p>You need to use the <code class="inline">new</code> keyword when you want to instantiate an object of any class along with its class name, and you'll get back a new object instance of that class.</p><p>If a class has defined the <code class="inline">__construct</code> method and it requires arguments, you need to pass those arguments when you instantiate an object. In our case, the <code class="inline">Employee</code> class constructor requires three arguments, and thus we've passed these when we created the <code class="inline">$objEmployee</code> object. As we discussed earlier, the <code class="inline">__construct</code> method is called automatically when the object is instantiated.</p><p>Next, we've called class methods on the <code class="inline">$objEmployee</code> object to print the information which was initialized during object creation. Of course, you can create multiple objects of the same class, as shown in the following snippet.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
$objEmployeeOne = new Employee('Bob', 'Smith', 30);

echo $objEmployeeOne-&gt;getFirstName(); // prints 'Bob'
echo $objEmployeeOne-&gt;getLastName(); // prints 'Smith'
echo $objEmployeeOne-&gt;getAge(); // prints '30'

$objEmployeeTwo = new Employee('John', 'Smith', 34);

echo $objEmployeeTwo-&gt;getFirstName(); // prints 'John'
echo $objEmployeeTwo-&gt;getLastName(); // prints 'Smith'
echo $objEmployeeTwo-&gt;getAge(); // prints '34'
?&gt;</pre><p>The following image is a graphical representation of the Employee class and some of its instances.</p><figure class="post_image"><img alt="Object Instantiation" data-src="https://cms-assets.tutsplus.com/uploads/users/413/posts/31910/image/object_instantiation.png"></figure><p>Simply put, a class is a blueprint which you can use to create structured objects.</p><h2>Encapsulation</h2><p>In the previous section, we discussed how to instantiate objects of the <code class="inline">Employee</code> class. It's interesting to note that the <code class="inline">$objEmployee</code> object itself wraps together properties and methods of the class. In other words, it hides those details from the rest of the program. In the world of OOP, this is called data encapsulation.</p><p>Encapsulation is an important aspect of OOP that allows you to restrict access to certain properties or methods of the object. And that brings us to another topic for discussion<i>: </i>access levels.</p><h3>Access Levels</h3><p>When you define a property or a method in a class, you can declare it to have one of these three access levels<em>—</em><code class="inline">public</code>, <code class="inline">private</code>, or <code class="inline">protected</code>.</p><h4>Public Access</h4><p>When you declare a property or a method as public, it can be accessed from anywhere outside the class. The value of a public property can be modified from anywhere in your code.</p><p>Let's look at an example to understand the public access level.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
class Person
{
  public $name;

  public function getName()
  {
    return $this-&gt;name;
  }
}

$person = new Person();
$person-&gt;name = 'Bob Smith';
echo $person-&gt;getName(); // prints 'Bob Smith'
?&gt;</pre><p>As you can see in the above example, we've declared the <code class="inline">name</code> property to be public. Hence, you can set it from anywhere outside the class, as we've done here.</p><h4>Private Access</h4><p>When you declare a property or a method as <code class="inline">private</code>, it can only be accessed from within the class. This means that you need to define getter and setter methods to get and set the value of that property.</p><p>Again, let's revise the previous example to understand the private access level.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
class Person
{
  private $name;

  public function getName()
  {
    return $this-&gt;name;
  }

  public function setName($name)
  {
    $this-&gt;name = $name;
  }
}

$person = new Person();
$person-&gt;name = 'Bob Smith'; // Throws an error
$person-&gt;setName('Bob Smith');
echo $person-&gt;getName(); // prints 'Bob Smith'
?&gt;</pre><p>If you try accessing a private property from outside the class, it'll throw the fatal error <code class="inline">Cannot access private property Person::$name<strong></strong></code>. Thus, you need to set the value of the private property using the setter method, as we did using the <code class="inline">setName</code> method.</p><p>There are good reasons why you might want to make a property private. For example, perhaps some action should be taken (updating a database, say, or re-rendering a template) if that property changes. In that case, you can define a setter method and handle any special logic when the property is changed.</p><h4>Protected Access</h4><p>Finally, when you declare a property or a method as <code class="inline">protected</code>, it can be accessed by the same class that has defined it and classes that inherit the class in question. We'll discuss inheritance in the very next section, so we'll get back to the protected access level a bit later.</p><h2>Inheritance</h2><p>Inheritance is an important aspect of the object-oriented programming paradigm which allows you to inherit properties and methods of other classes by extending them. The class which is being inherited is called the <strong>parent class</strong>, and the class which inherits the other class is called the <strong>child class</strong>. When you instantiate an object of the child class, it inherits the properties and methods of the parent class as well.</p><p>Let's have a look at the following screenshot to understand the concept of inheritance.</p><figure class="post_image"><img alt="Inheritance" data-src="https://cms-assets.tutsplus.com/uploads/users/413/posts/31910/image/inheritence.png"></figure><p>In the above example, the <code class="inline">Person</code> class is the parent class, and the <code class="inline">Employee</code> class extends or inherits the Person class and so is called a child class.</p><p>Let's try to go through a real-world example to understand how it works.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
class Person
{
  protected $name;
  protected $age;

  public function getName()
  {
    return $this-&gt;name;
  }

  public function setName($name)
  {
    $this-&gt;name = $name;
  }

  private function callToPrivateNameAndAge()
  {
    return "{$this-&gt;name} is {$this-&gt;age} years old.";
  }

  protected function callToProtectedNameAndAge()
  {
    return "{$this-&gt;name} is {$this-&gt;age} years old.";
  }
}

class Employee extends Person
{
  private $designation;
  private $salary;

  public function getAge()
  {
    return $this-&gt;age;
  }

  public function setAge($age)
  {
    $this-&gt;age = $age;
  }

  public function getDesignation()
  {
    return $this-&gt;designation;
  }

  public function setDesignation($designation)
  {
    $this-&gt;designation = $designation;
  }

  public function getSalary()
  {
    return $this-&gt;salary;
  }

  public function setSalary($salary)
  {
    $this-&gt;salary = $salary;
  }

  public function getNameAndAge()
  {
    return $this-&gt;callToProtectedNameAndAge();
  }
}

$employee = new Employee();

$employee-&gt;setName('Bob Smith');
$employee-&gt;setAge(30);
$employee-&gt;setDesignation('Software Engineer');
$employee-&gt;setSalary('30K');

echo $employee-&gt;getName(); // prints 'Bob Smith'
echo $employee-&gt;getAge(); // prints '30'
echo $employee-&gt;getDesignation(); // prints 'Software Engineer'
echo $employee-&gt;getSalary(); // prints '30K'
echo $employee-&gt;getNameAndAge(); // prints 'Bob Smith is 30 years old.'
echo $employee-&gt;callToPrivateNameAndAge(); // produces 'Fatal Error'
?&gt;</pre><p>The important thing to note here is that the <code class="inline">Employee</code> class has used the <code class="inline">extends</code> keyword to inherit the <code class="inline">Person</code> class. Now, the <code class="inline">Employee</code> class can access all properties and methods of the <code class="inline">Person</code> class that are declared as public or protected. (It can't access members that are declared as private.)</p><p>In the above example, the <code class="inline">$employee</code> object can access <code class="inline">getName</code> and <code class="inline">setName</code> methods that are defined in the <code class="inline">Person</code> class since they are declared as public. <br></p><p>Next, we've accessed the <code class="inline">callToProtectedNameAndAge</code> method using the <code class="inline">getNameAndAge</code> method defined in the <code class="inline">Employee</code> class, since it's declared as protected. Finally, the <code class="inline">$employee</code> object can't access the <code class="inline">callToPrivateNameAndAge</code> method of the <code class="inline">Person</code> class since it's declared as private.</p><p>On the other hand, you can use the <code class="inline">$employee</code> object to set the <code class="inline">age</code> property of the <code class="inline">Person</code> class, as we did in the <code class="inline">setAge</code> method which is defined in the <code class="inline">Employee</code> class, since the <code class="inline">age</code> property is declared as protected.</p><p>So that was a brief introduction to inheritance. It helps you to reduce code duplication, and thus encourages code reusability.</p><h2>Polymorphism</h2><p>Polymorphism is another important concept in the world of object-oriented programming which refers to the ability to process objects differently based on their data types.</p><p>For example, in the context of inheritance, if the child class wants to change the behavior of the parent class method, it can override that method. This is called method overriding. Let's quickly go through a real-world example to understand the concept of method overriding.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
class Message
{
  public function formatMessage($message)
  {
    return printf("&lt;i&gt;%s&lt;/i&gt;", $message);
  }
}

class BoldMessage extends Message
{
  public function formatMessage($message)
  {
    return printf("&lt;b&gt;%s&lt;/b&gt;", $message);
  }
}

$message = new Message();
$message-&gt;formatMessage('Hello World'); // prints '&lt;i&gt;Hello World&lt;/i&gt;'

$message = new BoldMessage();
$message-&gt;formatMessage('Hello World'); // prints '&lt;b&gt;Hello World&lt;/b&gt;'
?&gt;</pre><p>As you can see, we've changed the behavior of the <code class="inline">formatMessage</code> method by overriding it in the <code class="inline">BoldMessage</code> class. The important thing is that a message is formatted differently based on the object type, whether it's an instance of the parent class or the child class.</p><p>(Some object-oriented languages also have a kind of method overloading that lets you define multiple class methods with the same name but a different number of arguments. This isn't directly supported in PHP, but there are a couple of workarounds to achieve similar functionality.)</p><h2>Conclusion</h2><p>Object-oriented programming is a vast subject, and we've only scratched the surface of its complexity. I do hope that this tutorial helped you get you started with the basics of OOP and that it motivates you to go on and learn more advanced OOP topics.</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/courses/php-fundamentals"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/16/courses/221/preview_image/php400.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">PHP Fundamentals</div>
<div class="roundup-block__author">Jeremy McPeak</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/courses/php-object-oriented-programming-fundamentals"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/legacy-courses/CRS-104433.png"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">PHP Object Oriented Programming Fundamentals</div>
<div class="roundup-block__author">Joost Van Veen</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/courses/oop-in-php-with-tests"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/legacy-courses/CRS-97507.png"><div class="roundup-block__primary-category topic-code">OOP</div>
<div class="roundup-block__content-title">OOP in PHP With Tests</div>
<div class="roundup-block__author">Patkos Csaba</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/courses/php-design-patterns"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/71/courses/1058/preview_image/php400.jpg"><div class="roundup-block__primary-category topic-code">PHP</div>
<div class="roundup-block__content-title">PHP Design Patterns</div>
<div class="roundup-block__author">Jeremy McPeak</div></a></li>
</ul><p>Object-oriented programming is an important aspect in application development, irrespective of the technology you're working with. Today, in the context of PHP, we discussed a couple of basic concepts of OOP, and we also took the opportunity to introduce a few real-world examples.</p><p>Feel free to post your queries using the feed below!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-12-04T04:06:48+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Best Practices for ARIA Implementation]]></title>
      <link>//shineyrock.com/blog/read/best-practices-for-aria-implementation</link>
      <guid>https://shineyrock.com/blog/read/best-practices-for-aria-implementation#When:01:01:57Z</guid>
      <description><![CDATA[<p>Today, to mark the <a href="http://www.un.org/en/events/disabilitiesday/">International Day of Persons With Disabilities</a>, we are <a href="https://webdesign.tutsplus.com/series/web-accessibility-the-complete-learning-guide--cms-1301" target="_self">highlighting accessibility here at Envato Tuts+</a>.</p><p>ARIA is an important feature that web developers can use to help make their sites more accessible. In previous pieces, we talked about how you can implement ARIA, whether you’re doing so on an eCommerce site or in more niche places.</p><p>So far, the focus of this series has been on how to implement ARIA—for example, how to add a role to an element or how to code more accessible forms. With this piece, the focus is going to shift a bit towards other aspects of online accessibility, like why and when we should use ARIA. We’ll also cover some common questions asked on previous posts throughout the series.</p><p>Alright, let’s begin!</p><h2>What Is ARIA?</h2><p>At its base, ARIA is an extension to current web development languages (mainly HTML) that allows for enhanced accessibility to end users.</p><p>What exactly does that mean, though?</p><h3>Extending HTML With ARIA</h3><p>HTML has some shortcomings when it comes to how elements are defined and how elements can be related to one another.</p><p>In many cases, HTML elements (such as the <code class="inline">&lt;div&gt;</code> tag) are too broadly defined to be useful to someone navigating a site with a screen reader, or an element may have too many possible meanings to be interpreted (e.g. an image could also be used as a button). ARIA adds additional attributes to HTML elements to allow for definitions that can be layered on top of the already existing markup language, adding clarity as needed.</p><p>The second major benefit is the relation of elements. With HTML, every element exists as a child and/or a parent of another element. But this structure doesn't capture all semantic relationships. This can lead to scenarios like a controller and the element it controls not being clearly associated if they are placed in separate div containers. This becomes increasingly important in complex site structures or when altering the DOM using JavaScript.</p><p>Beyond those two benefits, there are a host of others that tend to get less attention, but provide excellent functionality nonetheless.</p><h3>ARIA for Advanced Accessibility</h3><p>Although much of the web is pushing towards easier-to-use UX, ARIA fills an important role for others who may not be able to simplify their structure. There are cases where a website might require tree controls, such as those commonly used by filesystems. By providing additional structure, ARIA makes these more advanced controls available to people who might not be able to access them otherwise—especially for users seeking to create a site with drag-and-drop capabilities.</p><p>Another key capability is that ARIA doesn’t just extend HTML—it can also be used to make other, less accessibility-friendly technologies available to more users. This is often the case for people using AJAX or DHTML for their web applications.</p><p>And really, those are just scratching the surface. If you’re interested in finding out more about the capabilities, attributes, and other useful parameters, take a look at the <a href="https://www.w3.org/WAI/standards-guidelines/aria/">WAI-ARIA overview</a>.</p><h2>Why Should We Use ARIA?</h2><p>As far as accessibility is concerned, ARIA has become one of the most widely adopted standards, with <a href="https://trends.builtwith.com/docinfo/WAI-ARIA">more than 25% of the top million websites</a> using it to some extent.</p><p>The biggest boon of using WAI-ARIA is that it increases accessibility on your site. Users that rely on screen readers, have low vision, or use alternative interfaces for the web benefit greatly from the implementation<em></em>—and in some cases, they may not be able to use a website to its full extent without it. For many, accessibility is seen as a core value of the web, and as developers, we should strive to provide it wherever possible.</p><p>Beyond the best practices aspect, there is also a business incentive to implement ARIA. <a href="https://nfb.org/blindness-statistics">With 2-3% of Americans having some form of low vision</a>, there is a significant portion of most markets that would benefit from use of the standard. In addition, having an implementation in place now will be beneficial as adoption of ARIA increasingly grows among non-standard web interfaces and creeps into devices such as smart speakers.</p><h2>Best Practices for ARIA Implementation</h2><p>Until now, we’ve focused on the actual methods of implementation in this series. With the basics of how to add ARIA to your site in place now, let’s take a look at some key guidelines for putting together your own implementation.</p><h3>Using a Light Touch Approach</h3><p>A good implementation of ARIA doesn’t need additional attributes and roles at every opportunity.</p><p>When possible, using the least amount of additional code to convey the necessary information is ideal. As an example, the overuse of ARIA is similar to making your site’s homepage a full sitemap for a visual user. People using screen readers will be overwhelmed by the amount of notifications and additional markup on a page that overutilizes ARIA, achieving the opposite of what we were seeking.</p><p>Providing enough additional markup to make your important elements’ context clear is the goal, and anything beyond that is probably not necessary.</p><h3>Avoiding Redundancy (Especially When Using HTML5)</h3><p>Throughout the previous posts in this series, we talked about the <code class="inline">role</code> attribute quite a bit. We placed it in every place that we needed the user to be aware of. There’s an important exception to this, however, that we didn’t talk about before, and that’s the need to avoid redundancy.</p><p>Whenever an element that you want to add ARIA to already clearly defines what it is, then you can skip adding ARIA to it. Why is this? Because ARIA is meant to extend existing code to make it more readable, but in some cases, code is already clear, structured, and easy to understand.</p><p>This happens frequently for people using elements introduced in HTML5. For example, when using the <code class="inline">&lt;button&gt;</code> element, you no longer need to add in the attribute <code class="inline">role="button"</code>, since the role is already explicitly defined by the HTML code. </p><h3>Testing With a Screen Reader</h3><p>Another key to creating a good ARIA implementation is to make sure that you are testing your site with a screen reader or two. You’re likely to be surprised at the details of how they function and how easy it is to make your website annoying to use by accident.</p><p>Many ARIA attributes can create notifications or alerts for the end user, and if you are utilizing an aria-live content area that changes every 10 seconds, it's possible that the implementation is making it more difficult to use your website.</p><h3>Iterative Accessibility for the Web</h3><p>When adding additional accessibility measures to your site, it's important to remember that it isn’t an all or nothing task. You don’t have to completely deck out your entire website in one attempt, and iterative additions are probably the best way to go.</p><p>Starting with major content areas and navigations and then spreading throughout the site slowly is a solid strategy, completing more as time goes on. Even if you schedule 15 or 30 minutes each month to add just a bit of accessibility to your site, it’s a step in the right direction.</p><h3>Good UX Is Good Accessibility (And Vice Versa)</h3><p>ARIA isn’t a cure-all for accessibility issues. It is crucial to place a heavy focus on good UX design, especially when it comes to text readability, as another tool in your accessibility toolkit.</p><p>If you’d like to delve deeper into the specifics of how UX and development (outside of ARIA) can be wielded to improve accessibility, take a look at the <a href="https://www.w3.org/TR/WCAG21/">Web Content Accessibility Guidelines</a>.</p><p>You can also take a look at our <a href="https://webdesign.tutsplus.com/series/web-accessibility-the-complete-learning-guide--cms-1301" target="_self">Complete Learning Guide to Web Accessibility</a>.</p><h2>Frequently Asked Questions About ARIA</h2><p>This series on ARIA resonated with a lot of readers and sparked discussion in the community. Let’s keep it up! Increasing awareness and improving these tutorials is the best way to bring accessibility to the forefront.  </p><p>Here are some of the most common questions and commentary that popped up around the web:</p><h3>What Browsers Support WAI-ARIA?</h3><p>A bunch! Most modern browsers support the features of ARIA to some extent, though this slightly changes from browser to browser. If you want to see specifics for each browser, you can use a tool like <a href="https://caniuse.com/#search=aria">Can I Use?</a></p><figure class="post_image"><img alt="Can I Use ARIA results" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/32238/image/caniuse aria.jpg"></figure><h3>Can ARIA Be Used With WordPress?</h3><p>Yep! A few WordPress themes already have ARIA integrated, but you can add it to any theme that you can edit the source code for. In addition, you can also use ARIA with almost any Content Management System!</p><h3>What Happens If ARIA Isn’t Supported?</h3><p>Since ARIA doesn’t affect rendering, nothing! In most cases, if a device doesn’t support ARIA, it’ll just be ignored entirely.</p><h2>Make the Web a Better Place!</h2><p>Putting all of the articles from this series together, I hope you now have all of the tools needed to improve the accessibility of your site!</p><p>If you have any questions, feedback, or have a correction for something I’ve said, please let me know in the comments!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-12-03T01:01:57+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Accessible Apps: Barriers to Access and Getting Started With Accessibility]]></title>
      <link>//shineyrock.com/blog/read/accessible-apps-barriers-to-access-and-getting-started-with-accessibility</link>
      <guid>https://shineyrock.com/blog/read/accessible-apps-barriers-to-access-and-getting-started-with-accessibility#When:00:30:32Z</guid>
      <description><![CDATA[<p>Today, we are highlighting accessibility—something we strive to think about every day here at <a href="https://tutsplus.com/tutorials/search/accessibility">Envato Tuts+</a>. December 3 is <a href="http://www.un.org/en/events/disabilitiesday/" title="Link: http://www.un.org/en/events/disabilitiesday/">International Day of Persons With Disabilities</a>. Created by the United Nations in 1992, this day seeks to promote the rights and well-being of persons with disabilities in all spheres of society. More than one billion people worldwide live with some form of disability.</p><p>In the context of web and app development, the goal of accessibility is that your tool works for all people, regardless of the hardware or software they are using, and wherever they fall on the spectrum of hearing, movement, visual, and cognitive ability. With rapid changes in digital and assistive technology, meeting this goal requires thought, testing, and an overall understanding of the way online tools are used by different people with diverse needs.</p><p><img alt="girl using a laptop computer" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32312/image/young-girl-sitting-at-desk-in-bedroom-using-AZ7YCUS.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/456/posts/32312/image/young-girl-sitting-at-desk-in-bedroom-using-AZ7YCUS.jpg"><br></p><p>There are tools here at Envato Tuts+ and across the web that can help you <a href="https://webdesign.tutsplus.com/series/web-accessibility-the-complete-learning-guide--cms-1301" target="_self">learn how to design and code for accessibility</a>, and I will link to some in this article. But in this post, I would like to look at the role of developers in web accessibility and talk about why the best time to think about accessibility is at the beginning of a project. I'll also introduce some emerging issues around developing for accessibility, and raise considerations around barriers to access and advocate for the importance of engaging with users at different stages of the development process. </p><h2>Thinking About Barriers to Access</h2><p>The UN’s <a href="http://www.un.org/en/events/disabilitiesday/" title="Link: http://www.un.org/en/events/disabilitiesday/">Convention on the Rights of Persons with Disabilities</a> points out that the existence of barriers is a central feature of disability—that disability is an evolving relationship between people with impairments and the social and environment barriers with which they interact. Barriers are in themselves disabling, and exclusion is a structural problem that lives in our systems, rather than in the bodies of those with impairments. Because of this, removing barriers is a prerequisite to social inclusion for all people.</p><p>Let's think a bit about accommodations and barriers to access.</p><p>Last week, a friend pointed out that light bulbs are an assistive device for people who rely on their vision to get around. Using light bulbs in a building is a way to mitigate this barrier, since sighted people need light to navigate the world, but people without sight do not need this accommodation, as they navigate using other strategies. What we consider a “normal” accommodation is socially conditioned, rather than an objective truth.</p><p>I bring up this example to disrupt the idea of “normal” and move away from thinking of accessible design as a special accommodation. If we prioritize making our technology barrier-free, rather than thinking about accessibility as an exception or afterthought, we can shift the concept of “normal” to accommodate all people and exclude none.</p><p>The strength of web technology is that, by its nature, it removes barriers that exist in the physical world. When building web and mobile app technology, it is vital that we not add barriers back in to the technology through the way we design our tools. In order to do this, we have to understand how different people use our tools and what their needs are. And just like when considering whether to build a ramp or a set of stairs, the best time to think about this is before we start building.</p><h2>Accessibility: Getting Started</h2><p>When it comes to building accessible web tools, there are two main considerations: take advantage of existing accessibility infrastructure, and stay out of the way of assistive devices and other accessibility strategies.</p><p>Using alt text for all non-text elements (images, graphs, charts, etc.) is an example of how you can take advantage of existing infrastructure. Screen readers rely on alt text to parse web content for visitors with visual impairments. This is not a complicated fix—alt text is simply good design. By designing for accessibility, you will improve the functionality of your website. In this case, search engines rely on alt text to better “read” websites. According to the W3, <a href="https://www.w3.org/standards/webdesign/accessibility" target="_self" title="Link: https://www.w3.org/standards/webdesign/accessibility">case studies show that accessible websites have better search results and increased audience reach</a>.</p><p>Ensuring that keyboard input works with your tool is an example of staying out of the way of users’ accessibility strategies. Using a mouse requires a degree of fine motor control that many people do not have, so they rely on keyboard input to navigate websites and apps. If your web tool can be navigated with keyboard input, it also allows assistive technologies that mimic the keyboard, such as speech input, to function properly. If you build a tool that cannot be navigated with keyboard input, you are unnecessarily creating an inaccessible environment for users.</p><p>Knowing how different people interact with your web tool gives you the ability to make choices that support their accessibility strategies. It is so much better to do this at the beginning of a project than try to address accessibility as an afterthought. An illustrative example: UC Berkeley ran into trouble when they made thousands of uncaptioned videos—inaccessible to people with hearing impairments—available online. The university was legally required to caption the content, but did not want to pay for the expensive project, and eventually cancelled the project outright.</p><p>By making websites more accessible, you make your web tools work better, more of the time, for more people. The power you have as a developer allows you to address accessibility issues at the earliest stages, when it is the easiest and least expensive time to do so.</p><h2>Tools and Guides on Accessibility</h2><p>Here at Envato Tuts+, we have a variety of information on <a href="https://tutsplus.com/tutorials/search/accessibility" target="_self" title="Link: https://tutsplus.com/tutorials/search/accessibility">how to build better, more accessible, web tools</a>. Here are a few to get you started.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31707/preview_image/zenified-code%20(4).png"><div class="roundup-block__primary-category topic-code">Accessibility</div>
<div class="roundup-block__content-title">Site Accessibility: Getting Started With ARIA</div>
<div class="roundup-block__author">Kyle Speaker</div></a></li></ul><p>ARIA (the Accessible Rich Internet Applications Suite) is a tool to make web content and apps more accessible, especially for people who use screen readers or cannot use a mouse. The main purpose of ARIA is to allow for advanced semantic structure within HTML as a counterpart to HTML’s syntax-heavy nature. In other words, HTML tells the browser where things go, and ARIA tells it how they interact. In this series, you'll learn how to use ARIA to make your web apps more accessible.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://webdesign.tutsplus.com/articles/keyboard-accessibility-tips-using-html-and-css--cms-31966"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/31966/preview_image/ally-pre.jpg"><div class="roundup-block__primary-category topic-webdesign">Accessibility</div>
<div class="roundup-block__content-title">Keyboard Accessibility Tips Using HTML and CSS</div>
<div class="roundup-block__author">Anna Monus</div></a></li></ul><p>In this post, you'll learn some tips to make your web page more keyboard accessible, using only basic HTML and CSS.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://webdesign.tutsplus.com/tutorials/how-to-make-custom-accessible-checkboxes-and-radio-buttons--cms-32074"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/30/posts/32074/preview_image/pre.png"><div class="roundup-block__primary-category topic-webdesign">Accessibility</div>
<div class="roundup-block__content-title">How to Make Custom Accessible Checkboxes and Radio Buttons</div>
<div class="roundup-block__author">Sami Keijonen</div></a></li></ul><p>It's important to make sure your checkboxes and radio buttons remain accessible to assistive technology (AT) and keyboard users. In this post, you'll learn how to make sure your custom checkboxes and radio buttons are accessible.</p><h3><a href="https://webdesign.tutsplus.com/series/web-accessibility-the-complete-learning-guide--cms-1301">Complete Learning Guide to Web Accessibility</a></h3><p>This is a collection of tutorials, articles, courses, and quick tips to walk you through the basics of accessibility.</p><p>I encourage you to also check out some source guides on accessibility from the W3. <a href="https://www.w3.org/WAI/fundamentals/accessibility-principles/">The W3 article on accessibility principles</a> is a good place to start. They also have an article about <a href="https://www.w3.org/WAI/people-use-web/tools-techniques/" target="_self">strategies internet users can employ to make the web more accessible</a>—this will get you started thinking about how different people have different accessibility needs and how you can code to support accessibility for everyone. And <a href="https://www.w3.org/WAI/users/browsing" target="_self" title="Link: https://www.w3.org/WAI/users/browsing">this article goes over ways to optimize your computer for more accessible web browsing</a>, which will give you an idea of some of the strategies people employ to make the internet more accessible for themselves.</p><h2>User Testing Is Everything</h2><p>You’ve thought about accessibility. You are committed to removing barriers to access in your web and mobile apps. You’ve built a tool with up-to-date accessibility guidelines in mind. Is your app accessible?</p><p>There are guides on <a href="https://webdesign.tutsplus.com/articles/how-we-test-for-accessibility-at-envato--cms-31952" target="_self" title="Link: https://webdesign.tutsplus.com/articles/how-we-test-for-accessibility-at-envato--cms-31952">Tools and Tips for Testing for Accessibility</a>, and that is an important part of the design process. Reading the guide and testing your web tool is a great idea. But go further: the gold standard in designing for accessibility is user testing. Involve users early in your project and throughout the development process.</p><p>Some accessibility requirements are easy to meet, and some are more challenging. Understanding how different people use your tools will give you so much insight into how to build for accessibility. Everyone has different needs, different browsers, different assistive devices. No guide or checklist is going to be able to fully capture the breadth of experience of the people using your tool.</p><p>Like learning that users are receiving error reports or a 404 page, be grateful if and when you receive feedback that your tool is not currently meeting a user’s accessibility needs. Solicit this kind of feedback. Keep an open dialog with users and find solutions to the issues they bring to your attention. </p><p>Anything you build will evolve—nothing is static in web and mobile technology. The real-life experience of your users is the most valuable input you can receive, so if you hear something is not working, say thank you. And then find a way to make it work.</p><h2>Conclusion</h2><p>Thank you for spending some time with me on this International Day of Persons With Disabilities. My intention with this article is to support the dialog around web and mobile accessibility and to give you a starting point for your own thoughts, research, and testing. Whether you are just getting started with programming or are an experienced programmer, it is so vital that you are prioritizing accessibility in your development projects, so that your tools can work well for each person who uses them.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-12-03T00:30:32+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Dramatically Speed Up Your React Front-End App Using Lazy Loading]]></title>
      <link>//shineyrock.com/blog/read/dramatically-speed-up-your-react-front-end-app-using-lazy-loading</link>
      <guid>https://shineyrock.com/blog/read/dramatically-speed-up-your-react-front-end-app-using-lazy-loading#When:13:00:12Z</guid>
      <description><![CDATA[<p>A constant challenge faced by front-end developers is the performance of our applications. How can we deliver a robust and full-featured application to our users without forcing them to wait an eternity for the page to load? The techniques used to speed up a website are so numerous that it can often be confusing to decide where to focus our energy when optimising for performance and speed.</p><p>Thankfully, the solution isn't as complicated as it sometimes might seem. In this post, I'll break down one of the most effective techniques used by large web apps to speed up their user experience. I'll go over a package to facilitate this and ensure that we can deliver our app to users <em>faster </em>without them noticing that anything has changed.</p><h2>What Does It Mean for a Website to Be Fast?</h2><p>The question of web performance is as deep as it is broad. For the sake of this post, I'm going to try and define performance in the simplest terms: <em>send as little as you can as fast as you can. </em>Of course, this might be an oversimplification of the problem, but practically speaking, we can achieve dramatic speed improvements by simply sending less data for the user to download and sending that data <em>fast.</em></p><p>For the purpose of this post, I'm going to focus on the first part of this definition—sending the least possible amount of information to the user's browser. </p><p>Invariably, the biggest offenders when it comes to slowing down our applications are images and JavaScript. In this post, I'm going to show you how to deal with the problem of large application bundles and speed up our website in the process.</p><h2>React Loadable</h2><p><a href="https://github.com/jamiebuilds/react-loadable" target="_self">React Loadable</a> is a package that allows us to lazy load our JavaScript only when it's required by the application. Of course, not all websites use React, but for the sake of brevity I'm going to focus on implementing React Loadable in a server-side rendered app built with Webpack. The final result will be multiple JavaScript files delivered to the user's browser automatically when that code is needed. If you want to try out the completed code, you can clone the <a href="https://github.com/tutsplus/dramatically-speed-up-your-react-front-end-app-with-lazy-loading" target="_self">example source code from our GitHub repo</a>.</p><p>Using our definition from before, this simply means we send <em>less </em>to the user up front so that data can be downloaded <em>faster</em> and our user will experience a more performant site.</p><h3>1. Add React <code class="inline">Loadable</code> to Your Component</h3><p>I'll take an example React component, <code class="inline">MyComponent</code>. I'll assume this component is made up of two files, <code class="inline">MyComponent/MyComponent.jsx</code> and <code class="inline">MyComponent/index.js</code>.</p><p>In these two files, I define the React component exactly as I normally would in <code class="inline">MyComponent.jsx</code>. In <code class="inline">index.js</code>, I import the React component and re-export it—this time wrapped in the <code class="inline">Loadable</code> function. Using the ECMAScript <a href="http://2ality.com/2017/01/import-operator.html" target="_self"><code class="inline">import</code></a> feature, I can indicate to Webpack that I expect this file to be dynamically loaded. This pattern allows me to easily lazy load any component I've already written. It also allows me to separate the logic between lazy loading and rendering. That might sound complicated, but here's what this would look like in practice:<br></p><pre class="brush: javascript noskimlinks noskimwords">// MyComponent/MyComponent.jsx

export default () =&gt; (
  &lt;div&gt;
    This component will be lazy-loaded!
  &lt;/div&gt;
)</pre><pre class="brush: javascript noskimlinks noskimwords">// MyComponent/index.js

import Loadable from 'react-loadable'

export default Loadable({
  // The import below tells webpack to
  // separate this code into another bundle
  loader: import('./MyComponent')
})</pre><p>I can then import my component exactly as I normally would:</p><pre class="brush: javascript noskimlinks noskimwords">// anotherComponent/index.js

import MyComponent from './MyComponent'

export default () =&gt; &lt;MyComponent /&gt;</pre><p>I've now introduced React Loadable into <code class="inline">MyComponent</code>. I can add more logic to this component later if I choose—this might include introducing a loading state or an error handler to the component. Thanks to Webpack, when we run our build, I'll now be provided with two separate JavaScript bundles: <code class="inline">app.min.js</code> is our regular application bundle, and <code class="inline">myComponent.min.js</code> contains the code we've just written. I'll discuss how to deliver these bundles to the browser a little later.</p><h3>2. Simplify the Setup With Babel</h3><p>Ordinarily, I'd have to include two extra options when passing an object to the <code class="inline">Loadable</code> function, <code class="inline">modules</code> and <code class="inline">webpack</code>. These help Webpack identify which modules we should be including. Thankfully, we can obviate the need to include these two options with every component by using the <code class="inline">react-loadable/babel</code> plugin. This automatically includes these options for us:</p><pre class="brush: javascript noskimlinks noskimwords">// input file

import Loadable from 'react-loadable'

export default Loadable({
  loader: () =&gt; import('./MyComponent')
})</pre><pre class="brush: javascript noskimlinks noskimwords">// output file

import Loadable from 'react-loadable'
import path from 'path'

export default Loadable({
  loader: () =&gt; import('./MyComponent'),
  webpack: () =&gt; [require.resolveWeak('./MyComponent')],
  modules: [path.join(__dirname, './MyComponent')]
})</pre><p>I can include this plugin by adding it to my list of plugins in my <strong>.babelrc</strong> file, like so:</p><pre class="brush: javascript noskimlinks noskimwords">{
  "plugins": ["react-loadable/babel"]
}</pre><p>I'm now one step closer to lazy loading our component. However, in my case, I'm dealing with server-side rendering. Currently, the server will not be able to render our lazy-loaded components.</p><h3>3. Rendering Components on the Server</h3><p>In my server application, I have a standard configuration that looks something like this:</p><pre class="brush: javascript noskimlinks noskimwords">// server/index.js

app.get('/', (req, res) =&gt; {
  const markup = ReactDOMServer.renderToString(
    &lt;MyApp/&gt;
  )

  res.send(`
    &lt;html&gt;
      &lt;body&gt;
        &lt;div id="root"&gt;${markup}&lt;/div&gt;
        &lt;script src="/build/app.min.js"&gt;&lt;/script&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  `)
})

app.listen(8080, () =&gt; {
  console.log('Running...')
})
</pre><p>The first step is going to be to instruct React Loadable that I want all modules to be preloaded. This allows me to decide which ones should be loaded immediately on the client. I do this by modifying my <code class="inline">server/index.js</code> file like so:</p><pre class="brush: javascript noskimlinks noskimwords">// server/index.js

Loadable.preloadAll().then(() =&gt; {
  app.listen(8080, () =&gt; {
    console.log('Running...')
  })
})</pre><p>The next step is going to be to push all components I want to render to an array so we can later determine which components require immediate loading. This is so the HTML can be returned with the correct JavaScript bundles included via script tags (more on this later). For now, I'm going modify my server file like so:</p><pre class="brush: javascript noskimlinks noskimwords">// server/index.js

import Loadable from 'react-loadable'

app.get('/', (req, res) =&gt; {
  const modules = []
  const markup = ReactDOMServer.renderToString(
    &lt;Loadable.Capture report={moduleName =&gt; modules.push(moduleName)}&gt;
      &lt;MyApp/&gt;
    &lt;/Loadable&gt;
  )

  res.send(`
    &lt;html&gt;
      &lt;body&gt;
        &lt;div id="root"&gt;${markup}&lt;/div&gt;
        &lt;script src="/build/app.min.js"&gt;&lt;/script&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  `)
})

Loadable.preloadAll().then(() =&gt; {
  app.listen(8080, () =&gt; {
    console.log('Running...')
  })
})
</pre><p>Every time a component is used that requires React <code class="inline">Loadable</code>, it will be added to the <code class="inline">modules</code> array. This is an automatic process done by React <code class="inline">Loadable</code>, so this is all that's required on our part for this process.</p><p>Now we have a list of modules that we know will need to be rendered immediately. The problem we now face is mapping these modules to the bundles that Webpack has automatically produced for us.</p><h3>4. Mapping Webpack Bundles to Modules</h3><p>So now I've instructed Webpack to create <strong>myComponent.min.js</strong>, and I know that <code class="inline">MyComponent</code> is being used immediately, so I need to load this bundle in the initial HTML payload we deliver to the user. Thankfully, React Loadable provides a way for us to achieve this, as well. In my client Webpack configuration file, I need to include a new plugin:</p><pre class="brush: javascript noskimlinks noskimwords">// webpack.client.config.js

import { ReactLoadablePlugin } from 'react-loadable/webpack'

plugins: [
  new ReactLoadablePlugin({
    filename: './build/loadable-manifest.json'
  })
]</pre><p>The <strong>loadable-manifest.json</strong> file will provide me a mapping between modules and bundles so that I can use the <code class="inline">modules</code> array I set up earlier to load the bundles I know I'll need. In my case, this file might look something like this:</p><pre class="brush: javascript noskimlinks noskimwords">// build/loadable-manifest.json

{
  "MyComponent": "/build/myComponent.min.js"
}</pre><p>This will also require a common Webpack manifest file to include the mapping between modules and files for internal Webpack purposes. I can do this by including another Webpack plugin:</p><pre class="brush: javascript noskimlinks noskimwords">plugins: [
  new webpack.optimize.CommonsChunkPlugin({
    name: 'manifest',
    minChunks: Infinity
  })
]</pre><h3>5. Including Bundles in Your HTML</h3><p>The final step in loading our dynamic bundles on the server is to include these in the HTML we deliver to the user. For this step, I'm going to combine the output of steps 3 and 4. I can start by modifying the server file I created above:</p><pre class="brush: javascript noskimlinks noskimwords">// server/index.js

import Loadable from 'react-loadable'
import { getBundles } from 'react-loadable/webpack'
import manifest from './build/loadable-manifest.json'

app.get('/', (req, res) =&gt; {
  const modules = []
  const markup = ReactDOMServer.renderToString(
    &lt;Loadable.Capture report={moduleName =&gt; modules.push(moduleName)}&gt;
      &lt;MyApp/&gt;
    &lt;/Loadable&gt;
  )

  const bundles = getBundles(manifest, modules)

  // My rendering logic below ...
})

Loadable.preloadAll().then(() =&gt; {
  app.listen(8080, () =&gt; {
    console.log('Running...')
  })
})
</pre><p>In this, I've imported the manifest and asked React Loadable to create an array with module/bundle mappings. The only thing left for me to do is to render these bundles to an HTML string:</p><pre class="brush: javascript noskimlinks noskimwords">// server/index.js

app.get('/', (req, res) =&gt; {
  // My App &amp; modules logic

  res.send(`
    &lt;html&gt;
      &lt;body&gt;
        &lt;div id="root"&gt;${markup}&lt;/div&gt;
        &lt;script src="/build/manifest.min.js"&gt;&lt;/script&gt;
        ${bundles.map(({ file }) =&gt;
          `&lt;script src="/build/${file}"&gt;&lt;/script&gt;`
        }).join('\n')}
        &lt;script src="/build/app.min.js"&gt;&lt;/script&gt;
      &lt;/body&gt;
    &lt;/html&gt;
  `)
})

Loadable.preloadAll().then(() =&gt; {
  app.listen(8080, () =&gt; {
    console.log('Running...')
  })
})</pre><h3>6. Load the Server-Rendered Bundles on the Client</h3><p>The final step to using the bundles that we've loaded on the server is to consume them on the client. Doing this is simple—I can just instruct React <code class="inline">Loadable</code> to preload any modules it's found to be immediately available:</p><pre class="brush: javascript noskimlinks noskimwords">// client/index.js

import React from 'react'
import { hydrate } from 'react-dom'
import Loadable from 'react-loadable'

import MyApplication from './MyApplication'

Loadable.preloadReady().then(() =&gt; {
  hydrate(
    &lt;MyApplication /&gt;,
    document.getElementById('root')
  );
});</pre><h2>Conclusion</h2><p>Following this process, I can split my application bundle into as many smaller bundles as I need. In this way, my app sends <em>less</em> to the user and <em>only when they need it.</em> I've reduced the amount of code that needs to be sent so that it can be sent <em>faster.</em> This can have significant performance gains for larger applications. It can also set smaller applications up for rapid growth should the need arise. </p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-11-15T13:00:12+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[15 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js]]></title>
      <link>//shineyrock.com/blog/read/15-best-modern-javascript-admin-templates-for-react-angular-and-vue.js1</link>
      <guid>https://shineyrock.com/blog/read/15-best-modern-javascript-admin-templates-for-react-angular-and-vue.js1#When:13:41:58Z</guid>
      <description><![CDATA[<p>Are you building an app and looking for tools that can help you streamline your build? Take the effort out of your next front-end app build with one of these powerful admin templates.</p><p>Whether you prefer to work with React, Angular, or Vue.js, there are a range of templates available on <a href="https://themeforest.net/tags/admin?sort=sales">ThemeForest</a> that make it painless to create beautiful, interactive UIs. Built using cutting-edge technology, these templates offer flexibility and dependability for your app build. Create a stunning UI easily by selecting from modular components and clean layouts so that you can focus on the business logic of your app build.</p><h2>React Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-react--cms-1136" target="_self">React</a> is a JavaScript library for building user interfaces that has taken the web development world by storm. React is known for its blazing-fast performance and has spawned an ecosystem of thousands of related modules on NPM, including many tooling options. </p><p>These admin templates and dashboards are a great starting point for your next React app.<br></p><h3><a href="https://themeforest.net/item/isomorphic-react-redux-admin-dashboard/20262330">1. Isomorphic Admin Dashboard</a></h3><figure class="post_image"><img alt="IsomorphicReact Redux Admin Dashboard" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/isomorphic.JPG"></figure><p>Isomorphic is a React and Redux-powered single-page admin dashboard. It's based on a progressive web application pattern and is highly optimized for your next React app. With no need to install or configure tools like Webpack or Babel, you can get started building your app immediately. </p><p>This template helps you write apps that behave consistently, run properly in different environments, and are easy to test. With Sass and CSS styling modules, multilingual support, a built-in Algolia search tool, Firestore CRUD, and easy-to-integrate code, you can use this template to build anything you want.</p><p>User justinr1234 says:</p><blockquote>“Easily the most well-designed template using React out there, from both a code and design perspective. Integrating the code off the shelf was a breeze. If you have an existing app or are looking to roll a new one on the front end, this template successfully solves the problem for either use case. Excellent product!”</blockquote><h3>2. <a href="https://themeforest.net/item/clean-ui-react-admin-template/21938700">Clean UI React Admin Template</a><br>
</h3><figure class="post_image"><img alt="Clean UI ReactReact Redux Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Clean.jpg"></figure><p>Are you building a single-page app and interested in moving to React and Redux? Don’t start from scratch—build a scalable, highly polished admin app with this React, Redux, Bootstrap, and Ant Design template that works well on mobile, tablet, and desktop. </p><p>Clean UI React is create-react-app based, so getting started is simple. Modular code allows you to add and remove components with ease. Developer friendly and highly customizable, this template includes 9 example apps, more than 50 pages, multiple layout options with easy-to-update Sass or CSS styling, and ample reusable React components.</p><p>User hermanaryadinata says: </p><blockquote>“The quality is incredibly high and the flexibility is limitless! Highly recommended to buy!”</blockquote><h3>3. <a href="https://themeforest.net/item/react-material-bootstrap-4-admin-template/20978545?s_rank=4">Jumbo React Admin Template</a>
</h3><figure class="post_image"><img alt="Jumbo React Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Jumbo.JPG"></figure><p>Kick-start your app project with Jumbo React, a complete admin template. This product includes two React templates, one based on Google Material Design and the other on the stunning flat style. Each template comes with multiple design concepts and hundreds of UI components and widgets, as well as an internationalization feature that allows you to develop a multilingual app. </p><p>Think of this template package as a starter kit to build your app. With it, you can develop a scalable React app rapidly and effectively and save yourself time and money in the process.</p><p>User Ace_Cooper says:</p><blockquote>“Love the amount of components out-of-the-box. Right what I needed to jump start a new project.”</blockquote><h3>4. <a href="https://themeforest.net/item/fuse-react-react-redux-material-design-admin-template/21769397?s_rank=5">Fuse Material Design Admin Template</a>
</h3><figure class="post_image"><img alt="Fuse Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Fuse.JPG"></figure><p>Looking for a template to get your React project started? Fuse is a complete admin template that follows Google’s Material Design guidelines and will allow you to learn some of the advanced aspects of React while you build your app. </p><p>This template uses Material UI as the primary UI library and Redux for state management. It comes with built-in page templates, routing, and authorization features, along with five example apps, more than 20 pages, and lots of reusable React components.</p><p>User DevX101 says:</p><blockquote>“Very well organized template ready for building a real app. Not just visual templates, but includes authorization and modular design. Great starter kit.”</blockquote><h2>Angular Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-angular--cms-1135" target="_self">Angular</a> is more than just the next version of a popular front-end framework. Angular takes all the best parts of AngularJS and improves them. It's a powerful and feature-complete framework that you can use to build fast, professional web apps. </p><p>Check out these templates that you can use to get your next Angular app off on the right foot with clean code and great design.</p><h3>1. <a href="https://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855" target="_self">Fuse Material Design Admin Template</a>
</h3><figure class="post_image"><img alt="Fuse Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/FuseAngular.JPG"></figure><p>This best-selling template is a 3-in-1 bundle, with Angular 7+, Bootstrap 4, and 21 layered PSD designs. Fuse is based on Google Material Design and comes with AoT compiler support, as well as a complete NgRx example app. This template includes configurable layouts, a skeleton project, built-in apps such as calendar, e-commerce, mail, and chat, and more than 20 pages to get you started. </p><p>Fuse supports all modern browsers (Chrome, Firefox, Safari, Edge) and comes with Bootstrap 4, HTML, and CSS versions, along with the Angular app.</p><p>User haseeb90 says:</p><blockquote><em>“This is a great theme. Comes with pre-built apps that you just need to plug your logic and back end into. The code quality is great and stays up-to-date with the latest Angular versions.”</em></blockquote><h3>2. <a href="https://themeforest.net/item/pages-admin-dashboard-template-web-app/9694847?s_rank=2">Pages Admin Dashboard Template</a>
</h3><figure class="post_image"><img alt="Pages Admin Dashboard Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/pages.JPG"></figure><p>Pages is the simplest and fastest way to build a web UI for your dashboard or app. This beautifully designed UI framework comes with hundreds of customizable features, which means that you can style every layout to look exactly the way you want it to. </p><p>Pages is built with a clean, intuitive, and fully responsive design that works on all major browsers and devices. Featuring developer-friendly code, full Sass and RTL support, and five unique dashboard layouts, this Angular 5+ ready template boasts flawless design and a 5-star rating.</p><p>User roly14 says: </p><blockquote>“Masterpiece. Simply stunning.”</blockquote><h3>3. <a href="https://themeforest.net/item/cliptwo-bootstrap-admin-template-with-angularjs/10290688" target="_self">Clip-Two Bootstrap Admin Template For AngularJS</a>
</h3><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/cliptwo.JPG"></figure><p>Clip-Two is an advanced, fully responsive admin template built with AngularJS. AngularJS, the original version of the popular Angular framework, lets you extend the HTML vocabulary. The resulting environment is expressive, readable, and quick to develop in. </p><p>Using a Bootstrap UI, Clip-Two is mobile-friendly and comes with ready-to-customize themes with six different skins and infinite styles with SASS. This template includes features like four level sidebar menus, CSS3 page transitions, custom scrollbar for vertical scrollable content, dynamic pagination, and RTL functionality.</p><p>User hafizminhas says:</p><blockquote>“This is one of the most outstanding Angular 1.x templates available in the market.”</blockquote><h3>4. <a href="https://themeforest.net/item/apex-angular-4-bootstrap-admin-template/20774875" target="_self">Apex Admin Template</a>
</h3><figure class="post_image"><img alt="Apex Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Apex.gif"></figure><p>Apex is a powerful and flexible admin template based on Angular 6+ and Bootstrap 4. The Angular CLI makes it easy to maintain and modify this app template. With easy-to-understand code and a handy starter kit, this template works right out of the box. Apex includes multiple solid and gradient menu color options and sizes, with an organized folder structure and more than 500 components and 50 widgets. </p><p>This template is fully responsive, clean on every device and modern browser, and comes with AoT and lazy loading. Choose from a few pre-made layout options and customize with ready-to-use elements and popular UI components.</p><p>User jklayh says:</p><blockquote>“These guys really know how to integrate everything well into one package, and the UI design is amazing. This is highly recommended.”</blockquote><h3>5. <a href="https://themeforest.net/item/stack-responsive-bootstrap-4-admin-template/20039431" target="_self">Stack Admin Template and Starter Kit</a>
</h3><figure class="post_image"><img alt="Stack Admin Template and Starter Kit" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Stack.jpg"></figure><p>Stack Admin is a Bootstrap 4 modern admin template with unlimited possibilities. This product includes eight pre-built templates with an organized folder structure, clean and commented code, and more than 1,500 pages and 1,000 components. Stack Admin provides RTL support, searchable navigation, unique menu layouts, and advanced cards. </p><p>With three niche dashboards, Stack Admin can be used for any type of web app: project management, e-commerce back ends, analytics, or any custom admin panels. This template looks great on all devices, and it comes with a kit to help developers get started quickly.</p><p>User sietzekeuning says:</p><blockquote>“Beautifully designed and has loads of very useful components. An absolute tip for anybody looking for a very well designed CMS!”</blockquote><h3><span class="wysiwyg-font-size-small">6. <a href="https://themeforest.net/item/fury-angular-2-material-design-admin-template/19325966">Fury Material Design Admin Template</a></span></h3><figure class="post_image"><img alt="Fury Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Fury.JPG"></figure><p><span class="wysiwyg-font-size-small">Clean, unique, and blazing fast, Fury is an admin template that offers you everything you need to get started with your next project. Built with Angular and Material Design, this template is the perfect framework for building large enterprise apps, and it allows for a modular component setup. </span></p><p><span class="wysiwyg-font-size-small">This template is designed to be lightweight and easy to customize. Features include completely customizable dashboard widgets and Angular Flex-Layout, to provide a fast and flexible way to create your layouts.</span></p><p><span class="wysiwyg-font-size-small">User CreativelyMe says:</span></p><blockquote>"The code quality is exceptional. It's clearly the work of a true craftsman. This template is truly a joy to work with, and continues to evolve over time. Excellent!!!"</blockquote><h3>7. <a href="https://themeforest.net/item/able-pro-responsive-bootstrap-4-admin-template/19300403" target="_self">Able Pro 7.0 Responsive Template</a>
</h3><figure class="post_image"><img alt="Able Pro 70 Responsive Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/able.JPG"></figure><p>Able Pro 7.0 is a fully responsive admin template that provides a flexible solution for your project development. Built with a Bootstrap 4 framework, this template has a Material look, with well structured and commented code. This retina-ready template comes with more than 150 pages and infinite design possibilities—use the Live Customizer feature to do one-click checks on color combinations and layout variations. </p><p>With more than 100 external plugins included, advanced menu layout options, and ready-to-deploy dashboards and landing pages, Able Pro 7.0 will streamline your app development process to save you time and effort.</p><p>User macugi says:</p><blockquote>“An amazing template. Very good design, good quality code and also very good customer support.”</blockquote><h2>Vue.js Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-vuejs--cms-1264" target="_self">Vue.js is a front-end JavaScript framework that is easy to learn</a> if you already know HTML and CSS. The versatility of Vue is great for small and large-scale web apps alike. On top of all this, it's blazing fast!</p><p>These Vue templates are sure to save you a lot of time and effort coding your next app.</p><h3>1. <a href="https://themeforest.net/item/vuely-vuejs-admin-template/21247764">Vuely—Material Design and Laravel Blade Admin Template</a>
</h3><figure class="post_image"><img alt="VuelyMaterial Design and Laravel Blade Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/vuely.JPG"></figure><p>Vuely is a fully responsive admin template designed to give you a hassle-free development experience. Carefully crafted to look beautiful on mobile and tablet devices with pre-designed custom pages and integrated features like charts, graphs, and data tables, this template allows you to create your back-end panel with ease. More than 200 UI elements and 78 custom widgets simplify your development process. </p><p>Vuely is translation ready with RTL support and comes with multiple color and theme options to give you the flexibility you need.</p><p>User alanoidster says:</p><blockquote>“Good design quality, comprehensive components and features, great customer support!”</blockquote><h3>2. <a href="https://themeforest.net/item/vuejs-laravel-admin-template/20119122" target="_self">VueJS Laravel Admin Template</a>
</h3><figure class="post_image"><img alt="VueJS Laravel Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/VueJS.JPG"></figure><p>Looking for a full featured admin template for your Vue.js project? Look no further. This Vue.js admin template is completely modular, so you can modify layouts, colors, and other features without disturbing the rest of the code. Simply customize it with the provided Sass variables. This template is well documented, with seven layout and multiple color scheme options. With all the components you need, this Vue.js template will get you started on your next dashboard build.</p><p>User JimOQuinn says:</p><blockquote>“Wow, the look and feel of the theme has progressed substantially since the initial release. Great job! Love the no-jQuery framework as I find VueJS much easier to work with. Looking forward to the next release. Keep up the good work!”</blockquote><h2>Multi-Framework Admin Templates</h2><p>Finally, here are some templates that work with multiple frameworks.</p><h3>1. <a href="https://themeforest.net/item/analog-admin-template/19518696" target="_self">Material Design </a><a href="https://themeforest.net/item/analog-admin-template/19518696" target="_self">Admin and Multipurpose Template</a>
</h3><figure class="post_image"><img alt="Material Design Admin and Multipurpose Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/vuematerial.JPG"></figure><p>This Material Design admin template provides you high performance and clean and modern Vue, React and Angular versions. This super flexible template uses SCSS, Gulp, Webpack, NPM Modern Workflow, and Flexbox, and has all the components you need to create your front-end app project. With stunning layouts, over 500 components and lifetime updates and customer support, this is the most complete admin app available.</p><p>User themeuser55 says: </p><blockquote>“This is an absolutely amazing theme. It is done with quality in mind, regularly updated, and you can tell the developer cares about his work and clients. I would suggest using this template if you are looking for a production worthy front end for a basis to any modern web application.”</blockquote><h3>2. <a href="https://themeforest.net/item/primer-angular-2-material-design-admin-template/19228165?s_rank=2">Primer—Angular and React Admin Template</a>
</h3><figure class="post_image"><img alt="PrimerAngular and React Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/primer.JPG"></figure><p>Primer is a creative Material Design admin template, with ahead-of-time (AoT) compilation for a more performant user experience. Fully responsive and packaged with both Angular and React versions, this template has left-to-right and right-to-left (LTR/RTL) support and light and dark colour schemes. Well documented and easy to customize, with this app template you get everything you need to start working on your SaaS, CRM, CMS, or dashboard based project.</p><p>User cjackett says:</p><blockquote>“This is a very well built template with great flexibility and lots of options. The author continues to update and improve the template, extending its functionality and incorporating new angular packages. Excellent work.”</blockquote><h2>Conclusion</h2><p>This is just a sample of the many app admin templates available on <a href="https://themeforest.net/tags/admin?sort=sales" target="_self">ThemeForest</a>. There is a template for you, no matter what your style or specifications. These templates will make coding the front end of your app easier and help you deliver an app that provides a high-quality user experience. All this will save you time and effort, letting you focus on the real details of coding your project.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-30T13:41:58+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[15 Best Modern JavaScript Admin Templates for React, Angular and Vue.js]]></title>
      <link>//shineyrock.com/blog/read/15-best-modern-javascript-admin-templates-for-react-angular-and-vue.js</link>
      <guid>https://shineyrock.com/blog/read/15-best-modern-javascript-admin-templates-for-react-angular-and-vue.js#When:19:20:20Z</guid>
      <description><![CDATA[<blockquote>Are you building an app and looking for tools that can help you streamline your build? Take the effort out of your next front-end app build with one of these powerful admin templates.</blockquote><p>Whether you prefer to work with React, Angular, or Vue.js, there are a range of templates available on <a href="https://themeforest.net/tags/admin?sort=sales">Theme Forest</a> that make it painless to create beautiful, interactive UIs. Built using cutting edge technology, these templates offer flexibility and dependability for your app build. Create a stunning UI easily by selecting from modular components and clean layouts so that you can focus on the business logic of your app build.</p><h2>React Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-react--cms-1136" target="_self">React</a> is a JavaScript library for building user interfaces that has taken the web development world by storm. React is known for its blazing-fast performance and has spawned an ecosystem of thousands of related modules on NPM, including many tooling options. These admin templates and dashboards are a great starting point for your next React app.<br></p><h3><a href="https://themeforest.net/item/isomorphic-react-redux-admin-dashboard/20262330">1. Isomorphic Admin Dashboard</a></h3><figure class="post_image"><img alt="IsomorphicReact Redux Admin Dashboard" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/isomorphic.JPG"></figure><p>Isomorphic is a React and Redux powered single page admin dashboard. It is based on a progressive web application pattern, and highly optimized for your next React app. With no need to install or configure tools like Webpack or Babel, you can get started building your app immediately. This template helps you write apps that behave consistently, run properly in different environments, and are easy to test. With Sass and CSS styling modules, multilingual support, a built-in Algolia search tool, Firestore CRUD, and easy-to-integrate code, you can use this template to build anything you want.</p><p>User justinr1234 says:</p><blockquote>“Easily the most well-designed template using React out there, from both a code and design perspective. Integrating the code off the shelf was a breeze. If you have an existing app or are looking to roll a new one on the front end, this template successfully solves the problem for either use case. Excellent product!”</blockquote><h3>2. <a href="https://themeforest.net/item/clean-ui-react-admin-template/21938700">Clean UI React Admin Template</a><br>
</h3><figure class="post_image"><img alt="Clean UI ReactReact Redux Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Clean.jpg"></figure><p>Are you building a single page app and interested in moving to React and Redux? Don’t start from scratch—build a scalable, highly-polished admin app with this React, Redux, Bootstrap, and Ant Design template that works well on mobile, tablet, and desktop. Clean UI React is create-react-app based, so getting started is simple. Modular code allows you to add and remove components with ease. Developer friendly and highly customizable, this template includes 9 example apps, more than 50 pages, multiple layout options with easy-to-update Sass or CSS styling, and ample reusable React components.</p><p>User hermanaryadinata says: </p><blockquote>“The quality is incredibly high and the flexibility is limitless! Highly recommended to buy!”</blockquote><h3>3. <a href="https://themeforest.net/item/react-material-bootstrap-4-admin-template/20978545?s_rank=4">Jumbo React Admin Template</a>
</h3><figure class="post_image"><img alt="Jumbo React Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Jumbo.JPG"></figure><p>Kick start your app project with Jumbo React, a complete admin template. This product includes two React templates, one based on Google Material Design, and the other on the stunning flat style. Each template comes with multiple design concepts and hundreds of UI components and widgets, as well as an internationalization feature that allows you to develop a multilingual app. Think of this template package as a starter kit to build your app. With it, you can develop a scalable React app rapidly and effectively and save yourself time and money in the process.</p><p>User Ace_Cooper says:</p><blockquote>“Love the amount of components out-of-the-box. Right what I needed to jump start a new project.”</blockquote><h3>4. <a href="https://themeforest.net/item/fuse-react-react-redux-material-design-admin-template/21769397?s_rank=5">Fuse Material Design Admin Template</a>
</h3><figure class="post_image"><img alt="Fuse Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Fuse.JPG"></figure><p>Looking for a template to get your React project started? Fuse is a complete admin template that follows Google’s Material Design guidelines, and will allow you to learn some of the advanced aspects of React while you build your app. This template uses Material UI as the primary UI library, and Redux for state management. It comes with built-in page templates, routing, and authorization features, along with five example apps, more than 20 pages, and lots of reusable React components.</p><p>User DevX101 says:</p><blockquote>“Very well organized template ready for building a real app. Not just visual templates, but includes authorization and modular design. Great starter kit.”</blockquote><h2>Angular Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-angular--cms-1135" target="_self">Angular</a> is more than just the next version of a popular front-end framework. Angular takes all the best parts of AngularJS and improves them. It's a powerful and feature-complete framework that you can use to build fast, professional web apps. </p><p>Check out these templates that you can use to get your next Angular app off on the right foot with clean code and great design.</p><h3>1. <a href="https://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855" target="_self">Fuse Material Design Admin Template</a>
</h3><figure class="post_image"><img alt="Fuse Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/FuseAngular.JPG"></figure><p>This best-selling template is a 3-in-1 bundle, with Angular 7+, Bootstrap 4 and 21 layered PSD designs. Fuse is based on Google Material Design and comes with AoT compiler support, as well as a complete NgRx example app. This template includes configurable layouts, a skeleton project, built-in apps such as calendar, e-commerce, mail, and chat, and more than 20 pages to get you started. Fuse supports all modern browsers (Chrome, Firefox, Safari, Edge) and comes with Bootstrap 4, HTML, and CSS versions, along with the Angular app.</p><p>User haseeb90 says:</p><blockquote><em>“This is a great theme. Comes with pre-built apps that you just need to plug your logic and back end into. The code quality is great and stays up-to-date with the latest Angular versions.”</em></blockquote><h3>2. <a href="https://themeforest.net/item/pages-admin-dashboard-template-web-app/9694847?s_rank=2">Pages Admin Dashboard Template</a>
</h3><figure class="post_image"><img alt="Pages Admin Dashboard Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/pages.JPG"></figure><p>Pages is the simplest and fastest way to build a web UI for your dashboard or app. This beautifully-designed UI framework comes with hundreds of customizable features, which means that you can style every layout to look exactly the way you want it to. Pages is built with a clean, intuitive, and fully responsive design that works on all major browsers and devices. Featuring developer friendly code, full SASS and RTL support, and five unique dashboard layouts, this Angular 5+ ready template boasts flawless design and a 5-star rating.</p><p>User roly14 says: </p><blockquote>“Masterpiece. Simply stunning.”</blockquote><h3>3. <a href="https://themeforest.net/item/cliptwo-bootstrap-admin-template-with-angularjs/10290688" target="_self">Clip-Two Bootstrap Admin Template For AngularJS</a>
</h3><figure class="post_image"><img alt="" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/cliptwo.JPG"></figure><p>Clip-Two is an advanced, fully responsive admin template built with AngularJS. AngularJS, the original version of the popular Angular framework, lets you extend the HTML vocabulary. The resulting environment is expressive, readable, and quick to develop in. Using a Bootstrap UI, Clip-Two is mobile-friendly and comes with ready-to-customize themes with six different skins and infinite styles with SASS. This template includes features like 4 level sidebar menus, CSS3 page transitions, custom scrollbar for vertical scrollable content, dynamic pagination, and RTL functionality.</p><p>User hafizminhas says:</p><blockquote>“This is one of the most outstanding Angular 1.x templates available in the market.”</blockquote><h3>4. <a href="https://themeforest.net/item/apex-angular-4-bootstrap-admin-template/20774875" target="_self">Apex Admin Template</a>
</h3><figure class="post_image"><img alt="Apex Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Apex.gif"></figure><p>Apex is a powerful and flexible admin template based on Angular 6+ and Bootstrap 4. The Angular CLI makes it easy to maintain and modify this app template. With easy-to-understand code and a handy starter kit, this template works right out of the box. Apex includes multiple solid and gradient menu color options and sizes, with organized folder structure and more than 500 components and 50 widgets. This template is fully responsive, clean on every device and modern browser, and comes with AoT and Lazy Loading. Choose from a few pre-made layout options and customize with ready-to-use elements and popular UI components.</p><p>User jklayh says:</p><blockquote>“These guys really know how to integrate everything well into one package, and the UI design is amazing. This is highly recommended.”</blockquote><h3>5. <a href="https://themeforest.net/item/stack-responsive-bootstrap-4-admin-template/20039431" target="_self">Stack Admin Template and Starter Kit</a>
</h3><figure class="post_image"><img alt="Stack Admin Template and Starter Kit" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Stack.jpg"></figure><p>Stack Admin is a Bootstrap 4 modern admin template with unlimited possibilities. This product includes 8 pre-built templates with organized folder structure, clean and commented code, and more than 1500 pages and 1000 components. Stack Admin provides RTL support, searchable navigation, unique menu layouts and advanced cards. With three niche dashboards, Stack Admin can be used for any type of web app: project management, e-commerce back ends, to analytics, or any custom admin panels. This template looks great on all devices, and comes with a kit to help developers get started quickly.</p><p>User sietzekeuning says:</p><blockquote>“Beautifully designed and has loads of very useful components. An absolute tip for anybody looking for a very well designed CMS!”</blockquote><h3><span class="wysiwyg-font-size-small">6. <a href="https://themeforest.net/item/fury-angular-2-material-design-admin-template/19325966">Fury Material Design Admin Template</a></span></h3><figure class="post_image"><img alt="Fury Material Design Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/Fury.JPG"></figure><p><span class="wysiwyg-font-size-small">Clean, unique and blazing fast, Fury is an admin template that offers you everything you need to get stared with your next project. Built with Angular and Material Design, this template is the perfect framework for building large enterprise apps, and allows for a modular component setup. This template is designed to be light weight and easy to customize. Features include completely customizable dashboard widgets and Angular Flex-Layout, to provide a fast and flexible way to create your layouts.</span></p><p><span class="wysiwyg-font-size-small">User CreativelyMe says:</span></p><blockquote>"The code quality is exceptional. It's clearly the work of a true craftsman. This template is truly a joy to work with, and continues to evolve over time. Excellent!!!"</blockquote><h3>7. <a href="https://themeforest.net/item/able-pro-responsive-bootstrap-4-admin-template/19300403" target="_self">Able Pro 7.0 Responsive Template</a>
</h3><figure class="post_image"><img alt="Able Pro 70 Responsive Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/able.JPG"></figure><p>Able Pro 7.0 is a fully responsive admin template that provides a flexible solution for your project development. Built with a Bootstrap 4 framework, this template has a Material look, with well structured and commented code. This Retina-ready template comes with more than 150 pages and infinite design possibilities—use the Live Customizer feature to do one-click checks on color combinations and layout variations. With more than 100 external plugins included, advanced menu layout options, and ready-to-deploy dashboards and landing pages, Able Pro 7.0 will streamline your app development process to save you time and effort.</p><p>User macugi says:</p><blockquote>“An amazing template. Very good design, good quality code and also very good customer support.”</blockquote><h2>Vue.js Admin Templates</h2><p><a href="https://code.tutsplus.com/series/learn-vuejs--cms-1264" target="_self">Vue.js is a front-end JavaScript framework that is easy to learn</a> if you already know HTML and CSS. The versatility of Vue is great for small and large-scale web apps alike. On top of all this, it's blazing fast!</p><p>These Vue templates are sure to save you a lot of time and effort coding your next app.</p><h3>1. <a href="https://themeforest.net/item/vuely-vuejs-admin-template/21247764">Vuely—Material Design and Laravel Blade Admin Template</a>
</h3><figure class="post_image"><img alt="VuelyMaterial Design and Laravel Blade Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/vuely.JPG"></figure><p>Vuely is a fully responsive admin template designed to give you a hassle-free development experience. Carefully crafted to look beautiful on mobile and tablet devices with pre-designed custom pages and integrated features like chart, graphs, and data-tables, this template allows you to create your back-end panel with ease. More than 200 UI elements and 78 custom widgets simplify your development process. Vuely is translation ready with RTL support and comes with multiple color and theme options to give you the flexibility you need.</p><p>User alanoidster says:</p><blockquote>“Good design quality, comprehensive components and features, great customer support!”</blockquote><h3>2. <a href="https://themeforest.net/item/vuejs-laravel-admin-template/20119122" target="_self">VueJS Laravel Admin Template</a>
</h3><figure class="post_image"><img alt="VueJS Laravel Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/VueJS.JPG"></figure><p>Looking for a full featured admin template for your VueJS project? Look no further. This VueJS admin template is completely modular, so you can modify layouts, colors, and other features without disturbing the rest of the code. Simply customize with provided Sass variables. This template is well documented, with seven layout and multiple color scheme options. With all the components you need, this VueJS template will get you started on your next dashboard build.</p><p>User JimOQuinn says:</p><blockquote>“Wow, the look and feel of the theme has progressed substantially since the initial release. Great job! Love the no-jQuery framework as I find VueJS much easier to work with. Looking forward to the next release. Keep up the good work!”</blockquote><h2>Multi-Framework Admin Templates</h2><p>Finally, here are some templates that work with multiple frameworks.</p><h3>1. <a href="https://themeforest.net/item/analog-admin-template/19518696" target="_self">Material Design </a><a href="https://themeforest.net/item/analog-admin-template/19518696" target="_self">Admin and Multipurpose Template</a>
</h3><figure class="post_image"><img alt="Material Design Admin and Multipurpose Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/vuematerial.JPG"></figure><p>This Material design admin template provides you high performance and clean and modern Vue, React and Angular versions. This super flexible template uses Scss, Gulp, Webpack, NPM Modern Workflow, and Flexbox, and has all the components you need to create your front end app project. With stunning layouts, over 500 components and lifetime updates and customer support, this is the most complete admin app available.</p><p>User themeuser55 says: </p><blockquote>“This is an absolutely amazing theme. It is done with quality in mind, regularly updated, and you can tell the developer cares about his work and clients. I would suggest using this template if you are looking for a production worthy front end for a basis to any modern web application.”</blockquote><h3>2. <a href="https://themeforest.net/item/primer-angular-2-material-design-admin-template/19228165?s_rank=2">Primer—Angular and React Admin Template</a>
</h3><figure class="post_image"><img alt="PrimerAngular and React Admin Template" data-src="https://cms-assets.tutsplus.com/uploads/users/456/posts/32099/image/primer.JPG"></figure><p>Primer is a creative Material Design admin template, with ahead-of-time (AoT) compilation for a more performant user experience. Fully responsive and packaged with both Angular and React versions, this template has left-to-right and right-to-left (LTR/RTL) support and light and dark colour schemes. Well documented and easy to customize, with this app template you get everything you need to start working on your SAAS, CRM, CMS, or dashboard based project.</p><p>User cjackett says:</p><blockquote>“This is a very well built template with great flexibility and lots of options. The author continues to update and improve the template, extending its functionality and incorporating new angular packages. Excellent work.”</blockquote><h2>Conclusion</h2><p>This is just a sample of the many app admin templates available on <a href="https://themeforest.net/tags/admin?sort=sales" target="_self">Theme Forest</a>. There is template for you, no matter what your style or specifications. These templates will make coding the front end of your app easier and help you deliver an app that provides a high quality user experience. All this will save you time and effort, and let you focus on the real details of coding your project.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-29T19:20:20+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[19 Best JavaScript Admin Templates for React, Angular, and Vue.js]]></title>
      <link>//shineyrock.com/blog/read/19-best-javascript-admin-templates-for-react-angular-and-vue.js</link>
      <guid>https://shineyrock.com/blog/read/19-best-javascript-admin-templates-for-react-angular-and-vue.js#When:22:09:39Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" id="iccv" class="content-block-wysi content-block">
<p>Are you building an app and looking for a JavaScript admin panel template to help you streamline your build? Take the effort out of your next front-end app build with one of these powerful React, Angular, and Vue.js admin templates.</p>
<p>With these JavaScript admin panel templates and dashboards, it's painless to create beautiful, interactive UIs. </p>
<p>Built using cutting-edge technology like React and Bootstrap, these dashboards and admin templates offer flexibility and dependability for your next app build. Create a stunning UI easily by selecting from modular components and clean layouts so that you can focus on the business logic of your app build.</p>
<h2 id="toc-y8bl-the-best-modern-javascript-admin-templates-on-themeforest">The Best Modern JavaScript Admin Templates on ThemeForest</h2>
<p>On ThemeForest, you'll discover an amazingly extensive library of the most powerful admin templates ever created. With a cheap one-time payment, you can purchase one of these high-quality admin templates and give your app users an excellent interactive experience.</p>
<figure class="post_image"><a href="https://themeforest.net/tags/admin?compatible_with=AngularJS,ReactJS&amp;sort=sales&amp;view=grid#content"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg" alt="Admin templates" loading="lazy" width="870px" height="581px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg" alt="Admin templates" loading="lazy" width="650px" height="436px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg" alt="Admin templates" loading="lazy" width="380px" height="258px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/admin_templates.jpg 2x"></a></figure>
<h2 id="toc-k1ht-angular-admin-templates">Angular Admin Templates</h2>
<p><a href="https://code.tutsplus.com/series/learn-angular--cms-1135" target="_self">Angular</a> is a powerful and feature-complete framework that you can use to build fast, professional web apps. </p>
<p>Check out these templates that you can use to get your next Angular app off on the right foot with clean code and great design.</p>
<h3 id="toc-5rft-bestseller fuse-material-design-admin-template">1. Bestseller: <a href="https://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855" target="_blank" rel="external noopener">Fuse Material Design Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/fuse-angularjs-material-design-admin-template/12931855"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/fuse_angular.png" alt="Fuse - Angular 13+ Admin Template " loading="lazy" width="870px" height="673px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/fuse_angular.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/fuse_angular.png" alt="Fuse - Angular 13+ Admin Template " loading="lazy" width="650px" height="504px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/fuse_angular.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/fuse_angular.png" alt="Fuse - Angular 13+ Admin Template " loading="lazy" width="380px" height="297px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/fuse_angular.png 2x"></a></figure>
<p>This best-selling template is a 3-in-1 bundle, with Angular 13+, Bootstrap 4, and 21 layered PSD designs. Fuse is based on Google's Material Design and comes with ahead-of-time compiler support, as well as a complete NgRx reactive Angular example app. This template includes configurable layouts, a skeleton project, built-in apps such as calendar, e-commerce, mail, and chat, and more than 20 pages to get you started. </p>
<p>Fuse supports all modern browsers (Chrome, Firefox, Safari, Edge) and comes with Bootstrap 4, HTML, and CSS versions, along with the Angular app.</p>
<h3 id="toc-7gub-pages-admin-dashboard-template">2. <a href="https://themeforest.net/item/pages-admin-dashboard-template-web-app/9694847?s_rank=2" target="_blank" rel="external noopener">Pages Admin Dashboard Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/pages-admin-dashboard-template-web-app/9694847?s_rank=2" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/pages.JPG" alt="Pages Admin Dashboard Template" width="870px" height="422px" loading="lazy" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/pages.JPG 2x"><img class="resized-image resized-image-tablet" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/pages.JPG" alt="Pages Admin Dashboard Template" width="650px" height="318px" loading="lazy" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/pages.JPG 2x"><img class="resized-image resized-image-mobile" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/pages.JPG" alt="Pages Admin Dashboard Template" width="380px" height="190px" loading="lazy" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/pages.JPG 2x"></a></figure>
<p>Pages is the simplest and fastest way to build a web UI for your dashboard or app. This beautifully designed UI framework comes with hundreds of customizable features, which means that you can style every layout to look exactly the way you want it to. </p>
<p>Pages is built with a clean, intuitive, and fully responsive design that works on all major browsers and devices. Featuring developer-friendly code, full Sass and RTL support, and five unique dashboard layouts, this Angular 8+ ready template boasts flawless design and a five-star rating.</p>
<h3 id="toc-nsom-apex-admin-template">3. <a href="https://themeforest.net/item/apex-angular-4-bootstrap-admin-template/20774875" target="_blank" rel="external noopener">Apex Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/apex-angular-4-bootstrap-admin-template/20774875" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/Apex.gif" alt="Apex Admin Template" width="870px" height="541px" loading="lazy"></a></figure>
<p>Apex is a powerful and flexible admin panel based on Angular 12+ and Bootstrap 4. The Angular CLI makes it easy to maintain and modify this Angular dashboard. With easy-to-understand code and a handy starter kit, this dashboard works right out of the box. Apex includes multiple solid and gradient menu color options and sizes, with an organized folder structure and more than 500 components and 50 widgets. </p>
<p>This template is fully responsive, clean on every device and modern browser, and comes with ahead-of-time compilation and lazy loading. Choose from a few pre-made layout options and customize them with ready-to-use elements and popular UI components.</p>
<h3 id="toc-hyfe-stack-admin-template-and-starter-kit">4. <a href="https://themeforest.net/item/stack-responsive-bootstrap-4-admin-template/20039431" target="_blank" rel="external noopener">Stack Admin Template and Starter Kit</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/stack-responsive-bootstrap-4-admin-template/20039431"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/Stack.jpg" alt="Stack Admin Template and Starter Kit" width="870px" height="469px" loading="lazy"></a></figure>
<p>With over 2,500 sales and overwhelmingly positive reviews and ratings, Stack Admin is a great choice for creating an admin dashboard. You get a range of pre-made layouts to choose from, as well as three niche dashboards. Stack Admin is very flexible and can be used for any type of web app. This template looks great on all devices, and it comes with a kit to help you get started quickly.</p>
<h3 id="toc-4wuh-able-pro-80-admin-template">5. <a href="https://themeforest.net/item/able-pro-responsive-bootstrap-4-admin-template/19300403" target="_blank" rel="external noopener">Able Pro 8.0 Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/able-pro-responsive-bootstrap-4-admin-template/19300403" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/able.JPG" alt="Able Pro 70 Responsive Template" width="870px" height="427px" loading="lazy"></a></figure>
<p>Able Pro 8.0 is a fully responsive Bootstrap admin template that provides a flexible solution for your project development. Built with the Bootstrap framework, this admin dashboard has a Material look, with well structured and commented code. This retina-ready template comes with more than 150 pages and infinite design possibilities—use the Live Customizer feature to do one-click checks on color combinations and layout variations. </p>
<p>With more than 100 external plugins included, advanced menu layout options, and ready-to-deploy dashboards and landing pages, Able Pro 8.0 will streamline your app development process to save you time and effort.</p>
<h3 id="toc-c0p2-fury-material-design-admin-template">6. <a href="https://themeforest.net/item/fury-angular-2-material-design-admin-template/19325966" target="_blank" rel="external noopener">Fury Material Design Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/fury-angular-2-material-design-admin-template/19325966" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/Fury.JPG" alt="Fury Material Design Admin Template" width="870px" height="428px" loading="lazy"></a></figure>
<p><span>Clean, unique, and blazing fast, Fury is an admin template that offers you everything you need to get started with your next project. Built with Angular and Material Design, this template is the perfect framework for building large enterprise apps, and it allows for a modular component setup. </span></p>
<p><span>This template is designed to be lightweight and easy to customize. Features include completely customizable dashboard widgets and Angular Flex Layout, to provide a fast and flexible way to create your layouts.</span></p>
<h3 id="toc-vrws-egret-admin-template">7. <a href="https://themeforest.net/item/egret-angular-4-material-design-admin-template/20161805#" target="_self">Egret Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/egret-angular-4-material-design-admin-template/20161805#"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg" alt="Egret - Angular 14+ Material Design Admin Dashboard Template" loading="lazy" width="870px" height="711px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg" alt="Egret - Angular 14+ Material Design Admin Dashboard Template" loading="lazy" width="650px" height="532px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg" alt="Egret - Angular 14+ Material Design Admin Dashboard Template" loading="lazy" width="380px" height="313px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/32099/image-upload/dark_theme.jpg 2x"></a></figure>
<p>Egret gives you a headstart for your next project thanks to its collection of responsive and reusable Material Design components, including beautiful pages for login, signup, profile, and gallery. You will also find dynamic features like navigation, multiple breadcrumb styles, lazy loading, charts, tables, icons, dropdown, database, and Google maps. The template is multi-language ready and supports RTL. Finally, it comes in a light and dark theme.</p>
<h2 id="toc-bnrb-react-dashboards-and-admin-templates">React Dashboards and Admin Templates</h2>
<p><a href="https://code.tutsplus.com/series/learn-react--cms-1136" target="_self">React</a> is a JavaScript library for building user interfaces that has taken the web development world by storm. React is known for its blazing-fast performance and has spawned an ecosystem of thousands of related modules on NPM, including many tooling options.</p>
<p>These admin templates and dashboards are a great starting point for your next React app.</p>
<h3 id="toc-vhpl-fuse-material-design-admin-template">1. <a href="https://themeforest.net/item/fuse-react-react-redux-material-design-admin-template/21769397?s_rank=5" target="_blank" rel="external noopener">Fuse Material Design Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/fuse-react-react-redux-material-design-admin-template/21769397?s_rank=5" target="_blank" rel="external noopener"><img class="loaded resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/Fuse.JPG" alt="Fuse Material Design Admin Template" width="870px" height="416px" loading="lazy"></a></figure>
<p>Looking for a template to get your React project started? Fuse is a complete JavaScript admin panel template that follows Google’s Material Design guidelines and will allow you to learn some of the advanced aspects of React while you build your app. </p>
<p>This React admin template uses Material UI as the primary UI library and Redux for state management. It comes with built-in page templates, routing, and authorization features, along with five example apps, more than 20 pages, and lots of reusable React components.</p>
<h3 id="toc-9rkk-isomorphic-admin-dashboard">2. <a href="https://themeforest.net/item/isomorphic-react-redux-admin-dashboard/20262330" target="_blank" rel="external noopener">Isomorphic Admin Dashboard</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/isomorphic-react-redux-admin-dashboard/20262330" target="_blank" rel="external noopener"><img class="loaded resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/isomorphic.JPG" alt="IsomorphicReact Redux Admin Dashboard" width="870px" height="405px" loading="lazy"></a></figure>
<p>Isomorphic is a React and Redux-powered JavaScript admin panel template. It's based on a progressive web application pattern and is highly optimized for your next React app. With no need to install or configure tools like Webpack or Babel, you can get started building your app immediately. </p>
<p>This React dashboard helps you write apps that behave consistently, run properly in different environments, and are easy to test. With Sass and CSS styling modules, multilingual support, a built-in Algolia search tool, Firestore CRUD, and easy-to-integrate code, you can use this template to build anything you want.</p>
<h3 id="toc-544a-jumbo-react-admin-template">3. <a href="https://themeforest.net/item/react-material-bootstrap-4-admin-template/20978545?s_rank=4" target="_blank" rel="external noopener">Jumbo React Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/react-material-bootstrap-4-admin-template/20978545?s_rank=4" target="_blank" rel="external noopener"><img class="loaded resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/Jumbo.JPG" alt="Jumbo React Admin Template" width="870px" height="423px" loading="lazy"></a></figure>
<p>Kick-start your app project with Jumbo React, a complete JavaScript admin panel template. This product includes two React templates, one based on Google Material Design and the other on the stunning flat style. Each template comes with multiple design concepts and hundreds of UI components and widgets, as well as an internationalization feature that allows you to develop a multilingual app. </p>
<p>Think of this template package as a starter kit to build your app. With it, you can develop a scalable React app rapidly and effectively, saving yourself time and money in the process.</p>
<h3 id="toc-2aef-skote-react-admin-and-dashboard-template">4. <a href="https://themeforest.net/item/skote-react-admin-dashboard-template/26318700" target="_self">Skote React Admin and Dashboard Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/skote-react-admin-dashboard-template/26318700"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/32099/image-upload/verti_light.jpg" alt="Skote - React Admin and Dashboard Template " loading="lazy" width="870px" height="658px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/32099/image-upload/verti_light.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/32099/image-upload/verti_light.jpg" alt="Skote - React Admin and Dashboard Template " loading="lazy" width="650px" height="493px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/32099/image-upload/verti_light.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/32099/image-upload/verti_light.jpg" alt="Skote - React Admin and Dashboard Template " loading="lazy" width="380px" height="290px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/32099/image-upload/verti_light.jpg 2x"></a></figure>
<p>Skote is an attractive minimalist React.js admin dashboard template. This React.js admin template comes with reusable pages and components. </p>
<p>Notable features include:</p>
<ul>
<li>customizable dark and light layouts with RTL options. </li>
<li>RTL and JSON objects for all layouts</li>
<li>multi-language support</li>
<li>Facebook and Google authentication</li>
<li>Firebase back-end and authentication</li>
</ul>
<h3 id="toc-fbrj-dandelion-pro">5. <a href="https://themeforest.net/item/dandelion-pro-react-admin-dashboard-template/22890261" target="_self">Dandelion Pro</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/dandelion-pro-react-admin-dashboard-template/22890261"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/Dandelion.png" alt="Dandelion" loading="lazy" width="870px" height="437px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/Dandelion.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/Dandelion.png" alt="Dandelion" loading="lazy" width="650px" height="329px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/Dandelion.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/Dandelion.png" alt="Dandelion" loading="lazy" width="380px" height="197px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/Dandelion.png 2x"></a></figure>
<p>Dandelion Pro<span> is a full-featured React admin template with a clean, modern design. </span><span>It features over 40 reusable and easy-to-modify React components and modules. </span></p>
<p><span>This template is perfect for personal, creative, and corporate dashboards. </span><span>Did I mention that Dandelion is based on React Boilerplate and will also help you </span><span>learn advanced development with React, Redux, JSS, and ES6?</span></p>
<h2 id="toc-4v0u-vuejs-admin-templates">Vue.js Admin Templates</h2>
<p><a href="https://code.tutsplus.com/series/learn-vuejs--cms-1264" target="_blank" rel="external noopener">Vue.js is a front-end JavaScript framework that is easy to learn</a> if you already know HTML and CSS. The versatility of Vue is great for small- and large-scale web apps alike. On top of all this, it's blazing fast!</p>
<p>These Vue templates are sure to save you a lot of time and effort coding your next app.</p>
<h3 id="toc-438b-vuexy-vue-and-laravel-admin-dashboard-template">1. <a href="https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599" target="_blank" rel="external noopener">Vuexy: Vue and Laravel Admin Dashboard Template</a> </h3>
<figure class="post_image"><a href="https://themeforest.net/item/vuexy-vuejs-html-laravel-admin-dashboard-template/23328599" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35868/image/EBF90CF9-439A-4D83-8E75-E5C37AA6C5FE.jpeg" alt="VuexyVue and Laravel Admin Dashboard Template " width="870px" height="514px" loading="lazy"></a></figure>
<p>A powerful admin dashboard template built on Vue.js, Vuexy is developer-friendly, rich with features, and highly customizable. Bringing your vision to life is a piece of cake!</p>
<p>Not only is Vuexy fast and easy to use, but it is also highly scalable.</p>
<h3 id="toc-tbfq-piaf-vue-admin-template">2. <a href="https://themeforest.net/item/piaf-vuejs-admin-dashboard/23160320" target="_blank" rel="external noopener">Piaf: Vue Admin Template</a> </h3>
<figure class="post_image"><a href="https://themeforest.net/item/piaf-vuejs-admin-dashboard/23160320" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35868/image/DCE428AF-8124-4AC6-9547-7CDF6EB1BF52.jpeg" alt="Piaf - Vue Admin Template" width="870px" height="544px" loading="lazy"></a></figure>
<p>Piaf is built with Vue, without jQuery. A lot of work has gone into design harmony between components and layouts of this Vue admin template. From carousels to charts, switches to lists, you can see it in the colors, icons, and composition. This Vue admin template is simple and pleasant to use and does the job well. </p>
<h3 id="toc-opmb-vuely-material-design-and-laravel-blade-admin-template">3. <a href="https://themeforest.net/item/vuely-vuejs-admin-template/21247764" target="_blank" rel="external noopener">Vuely: Material Design and Laravel Blade Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/vuely-vuejs-admin-template/21247764" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/vuely.JPG" alt="VuelyMaterial Design and Laravel Blade Admin Template" width="870px" height="415px" loading="lazy"></a></figure>
<p>Vuely is a fully responsive JavaScript admin panel template designed to give you a hassle-free development experience. Carefully crafted to look beautiful on mobile and tablet devices, with pre-designed custom pages and integrated features like charts, graphs, and data tables, this template allows you to create your back-end panel with ease. More than 200 UI elements and 78 custom widgets simplify your development process. </p>
<p>Vuely is translation-ready, with RTL support, and comes with multiple color and theme options to give you the flexibility you need.</p>
<h3 id="toc-u79m-clear-vue-and-laravel-admin-template">4. <a href="https://themeforest.net/item/clear-bootstrap-vuejs-admin-template/19339739" target="_blank" rel="external noopener">Clear: Vue and Laravel Admin Template</a> </h3>
<figure class="post_image"><a href="https://themeforest.net/item/clear-bootstrap-vuejs-admin-template/19339739" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35868/image/193472F4-FC37-4B37-9DA3-0795071C0FF9.jpeg" alt="Clear - Vue Js  Laravel Admin Template" width="870px" height="573px" loading="lazy"></a></figure>
<p>If you're looking for a clean, uncluttered JavaScript admin template, then Clear is the way to go. The Clear Vue admin template comes with features like:</p>
<ul>
<li>task and contact application</li>
<li>Vue version build system updated with Laravel mix</li>
<li>extended Vue.js eCommerce dashboard</li>
</ul>
<p>The awesome layouts come in two simple and stylish versions: light and dark. It looks good across dashboards, components, widgets, and various charts. In addition, the code is very clean and developer-friendly. You can start using the Clear admin template in no time. Just follow the code and documentation. </p>
<h3 id="toc-gh3u-pragmatic-vuejs-admin-template">5. <a href="https://themeforest.net/item/pragmatic-vuejs-admin-template/21775201" target="_self">Pragmatic VueJS Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/pragmatic-vuejs-admin-template/21775201"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg" alt="Pragmatic - VueJS Admin Template" loading="lazy" width="870px" height="457px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg" alt="Pragmatic - VueJS Admin Template" loading="lazy" width="650px" height="344px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg" alt="Pragmatic - VueJS Admin Template" loading="lazy" width="380px" height="205px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1997/posts/32099/image-upload/Screenshot_12_.jpg 2x"></a></figure>
<p>This fully responsive and highly customizable admin template is packed with hundreds of page templates, thousands of fonts and icons, over 70 layout combinations, and many chart choices. In addition, it supports multiple languages including RTL. </p>
<p>Other notable features include:</p>
<ul>
<li>multi-level dropdown menu</li>
<li>Crypto dashboard</li>
<li>built-in apps</li>
<li>validation forms </li>
<li>export to CSV</li>
</ul>
<h3 id="toc-w8h1-vuejs-laravel-admin-template">6. <a href="https://themeforest.net/item/vuejs-laravel-admin-template/20119122" target="_blank" rel="external noopener">VueJS Laravel Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/vuejs-laravel-admin-template/20119122" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/VueJS.JPG" alt="VueJS Laravel Admin Template" width="870px" height="424px" loading="lazy"></a></figure>
<p>Looking for a full-featured admin panel template for your Vue.js project? Look no further. This Vue admin template is completely modular, so you can modify layouts, colors, and other features without disturbing the rest of the code. Simply customize it with the provided Sass variables. This template is well documented, with seven layouts and multiple color scheme options. With all the components you need, this Vue.js template will get you started on your next dashboard build.</p>
<h2 id="toc-6veh-multi-framework-admin-templates">Multi-Framework Admin Templates</h2>
<p>Finally, here are some templates that work with multiple frameworks.</p>
<h3 id="toc-wdsx-bestseller metronic">1. Bestseller: <a href="https://themeforest.net/item/metronic-responsive-admin-dashboard-template/4021469" target="_blank" rel="external noopener">Metronic</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/metronic-responsive-admin-dashboard-template/4021469" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1997/posts/35868/image/A5EFE2F5-D888-41B1-86D8-5CFD88AC1A40.jpeg" alt="Metronic" width="870px" height="442px" loading="lazy"></a></figure>
<p>Metronic has been called the mother of all JavaScript admin panel templates. For one, it works smoothly across many frameworks like Bootstrap 4, React, Angular 12, Vue, and Laravel. Secondly, it has a well-structured design and is easy to customize. In addition, the CSS and JavaScript of this best-selling multi-framework admin template are of the highest coding standard. To help you easily implement it in your app, it comes with extensive documentation and video tutorials. </p>
<h3 id="toc-bzwn-cuba-dashboard-template">2. <a href="https://themeforest.net/item/cuba-bootstrap-responsive-admin-dashboard-template/27530933" target="_self">Cuba Dashboard Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/cuba-bootstrap-responsive-admin-dashboard-template/27530933"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/cuba.png" alt="Cuba Dashboard Template" loading="lazy" width="870px" height="1364px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/cuba.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/cuba.png" alt="Cuba Dashboard Template" loading="lazy" width="650px" height="1016px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/cuba.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/cuba.png" alt="Cuba Dashboard Template" loading="lazy" width="380px" height="589px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/cuba.png 2x"></a></figure>
<p><span>Cuba Admin is a multipurpose, premium bootstrap admin template built with Bootstrap 4, HTML5, CSS, and JQuery. It features 5 dashboards, over 100 pages, and 16 workable elements to customize your project fully. The UI is clean and looks great on all devices. Some of the web applications you can create with this plugin include:</span></p>
<ul>
<li><span>a custom admin panel</span></li>
<li><span>an app back end</span></li>
<li><span>CMS, CRM, and many more</span></li>
</ul>
<h3 id="toc-420i-primer-angular-and-react-admin-template">3. <a href="https://themeforest.net/item/primer-angular-2-material-design-admin-template/19228165?s_rank=2" target="_blank" rel="external noopener">Primer: Angular and React Admin Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/primer-angular-2-material-design-admin-template/19228165?s_rank=2" target="_blank" rel="external noopener"><img class="resized-image resized-image-desktop" src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/456/posts/32099/image/primer.JPG" alt="PrimerAngular and React Admin Template" width="870px" height="450px" loading="lazy"></a></figure>
<p>The Primer admin template comes with ahead-of-time (AoT) compilation for a better user experience. Fully responsive and packaged with both Angular and React versions, this template has left-to-right and right-to-left support and light and dark color schemes. Well documented and easy to customize, this app template gives you everything you need to start working on your SaaS, CRM, CMS, or dashboard-based project.</p>
<h3 id="toc-jgnk-poco-admin-dashboard-template">4. <a href="https://themeforest.net/item/poco-responsive-admin-dashboard-template/26501947" target="_self">Poco Admin Dashboard Template</a>
</h3>
<figure class="post_image"><a href="https://themeforest.net/item/poco-responsive-admin-dashboard-template/26501947"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/Poco.png" alt="Poco Admin Dashboard Template" loading="lazy" width="870px" height="718px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/Poco.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/Poco.png" alt="Poco Admin Dashboard Template" loading="lazy" width="650px" height="537px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/Poco.png 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/Poco.png" alt="Poco Admin Dashboard Template" loading="lazy" width="380px" height="316px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/Poco.png 2x"></a></figure>
<p><span>Poco is a fully responsive Bootstrap 4 HTML, React, Angular, and Laravel admin template which offers everything you need to design a modern-looking admin dashboard.</span></p>
<p><span>Some of its best features include:</span></p>
<ul>
<li><span>a huge collection of reusable components</span></li>
<li><span>unique features</span></li>
<li><span>eye-catching design</span></li>
<li><span>charts</span></li>
<li><span>ability to export data</span></li>
</ul>
<h2 id="toc-ngxj-get-your javascript-admin-templates-on-themeforest-now">Get Your JavaScript Admin Templates on ThemeForest Now! </h2>
<p>This is just a sample of the many app admin templates available on <a href="https://themeforest.net/tags/admin?sort=sales" target="_self">ThemeForest</a>. There is a template for you, no matter what your style or specifications. These templates will make coding the front end of your app easier and help you deliver an app that provides a high-quality user experience. All this will save you time and effort, letting you focus on the real details of coding your project.</p>
<figure class="post_image"><a href="https://themeforest.net/tags/admin?compatible_with=AngularJS,ReactJS&amp;sort=sales&amp;view=grid#content"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=850/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg" alt="Admin angular templates" loading="lazy" width="870px" height="579px" class="resized-image resized-image-desktop" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1700/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=630/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg" alt="Admin angular templates" loading="lazy" width="650px" height="434px" class="resized-image resized-image-tablet" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=1260/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg 2x"><img src="https://cms-assets.tutsplus.com/cdn-cgi/image/width=360/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg" alt="Admin angular templates" loading="lazy" width="380px" height="257px" class="resized-image resized-image-mobile" srcset="https://cms-assets.tutsplus.com/cdn-cgi/image/width=720/uploads/users/1885/posts/39711/image-upload/Admin_angular_templates.jpg 2x"></a></figure>
<p><em>This post has been updated with contributions from <a href="https://tutsplus.com/authors/esther-kalei" target="_self">Esther Vaati</a>. Esther is a software developer and writer for Envato Tuts+.</em></p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-27T22:09:39+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[New Course: Build an App With JavaScript and the MEAN Stack]]></title>
      <link>//shineyrock.com/blog/read/new-course-build-an-app-with-javascript-and-the-mean-stack</link>
      <guid>https://shineyrock.com/blog/read/new-course-build-an-app-with-javascript-and-the-mean-stack#When:10:39:02Z</guid>
      <description><![CDATA[<p>You can make your web development work a whole lot easier by taking advantage of the MEAN stack (MongoDB, Express, Angular, and Node.js). Find out how in our comprehensive new course, <a href="https://code.tutsplus.com/courses/build-an-app-from-scratch-with-javascript-and-the-mean-stack?ec_promo=teaser_post" target="_self">Build an App From Scratch With JavaScript and the MEAN Stack</a>. </p><h2>What You’ll Learn</h2><p>Full-stack web development requires coding both a front-end for the browser and a back-end server. Using JavaScript for both parts of the app makes life a lot simpler for full-stack devs. With the MEAN technologies, you can code a cutting-edge web app in JavaScript, from the front-end all the way down to the database.</p><p>In this detailed 3.5-hour course, <a href="https://tutsplus.com/authors/derek-jensen?ec_promo=teaser_post" target="_self">Derek Jensen</a> will show you how to use the MEAN technologies to build full-stack web apps using only JavaScript (and its close cousin TypeScript). You'll start from absolute scratch, scaffolding an empty project, and build up a complete web app using the MEAN stack. </p><figure class="post_image"><a href="https://code.tutsplus.com/courses/build-an-app-from-scratch-with-javascript-and-the-mean-stack?ec_promo=teaser_post" target="_self"><img alt="App created with the MEAN stack" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31963/image/MEAN-Stack-app.jpg"></a></figure><p>You'll learn how to configure a MongoDB database, how to write a database abstraction layer, and how to create a REST API to make that data available to the front-end. On the client side, you'll learn how to structure an Angular app, how to create a service to connect with the back-end API, and how to implement each of the UI components that make a complete app.<br></p><h2>Watch the Introduction</h2><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_d7xgyscf4e videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 700,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-18T10:39:02+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Hands-on With ARIA: Accessibility Recipes for Web Apps]]></title>
      <link>//shineyrock.com/blog/read/hands-on-with-aria-accessibility-recipes-for-web-apps</link>
      <guid>https://shineyrock.com/blog/read/hands-on-with-aria-accessibility-recipes-for-web-apps#When:12:31:40Z</guid>
      <description><![CDATA[<p>In the confusing world of web applications, ARIA can help improve accessibility and ease of use for your creations. HTML isn't able to handle many types of relationship between elements on the page, but ARIA is ideal for almost any kind of setup you can come up with. Let’s take a look at what ARIA is, how it can apply to your web app, and some quick recipes you can use for your own sites.</p><h2>Basics of ARIA</h2><p>ARIA, also called WAI-ARIA, stands for the Web Accessibility Initiative–Accessible Rich Internet Applications. This initiative, updated by the W3C, aims to give developers a new set of schemas and attributes for making their creations more accessible. It specifically aims to cover the inherent gaps left by HTML. If you’re not familiar with what it does already, you should take a look at <a href="https://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707" target="_self">our primer on ARIA</a>. You might also be interested in our pieces on <a href="https://code.tutsplus.com/tutorials/hands-on-with-aria-homepage-elements-and-standard-navigation--cms-31826" target="_self">ARIA for the Homepage</a> and <a href="https://code.tutsplus.com/tutorials/hands-on-with-aria-ecommerce-implementations--cms-31890" target="_self">ARIA for eCommerce</a>.</p><p>Briefly, though, ARIA has three main features that we'll be focusing on:</p><ol>
<li>Creating relationships outside of the parent-child association: HTML only allows for relationships between parent and child elements, but the associations we want to define aren't always nested within each other. ARIA lets us define element relationships outside of this constraint.</li>
<li>Defining advanced controls and interactivity: HTML covers many basic UI elements, but there are many more advanced controls that are used around the web that are hard to define outside of their visual component. ARIA helps with that.</li>
<li>Providing access to "live" area update attributes: the <code class="inline">aria-live</code> attribute gives screen readers and other devices a listener for when content on the page changes. This allows for easier communication of when on-screen content changes.</li>
</ol><h2>ARIA and Web Applications</h2><p>Before, we looked at adding ARIA to the common elements of eCommerce pages and site homepages. With web apps, however, each one differs drastically from the last. Forms and functions shift between each app, and often even between versions of the same app. Because of this, we’ll treat our implementations here like recipes in a cookbook rather than a wholesale conversion of a page.</p><p>When it comes to web apps, a user’s intent is more difficult to discern in a generalized sense. With eCommerce, no matter which site you are on, it is likely that the visitors are looking to purchase a product or service. Web apps serve a variety of purposes, so instead, we’ll focus on creating nuanced controls that are accessible and user friendly.</p><p>Let’s get into some of these control types.</p><h3>Controlling Live Updates With Buttons</h3><p>The first control we’re going to look at is a displayed value updated by a button press. These types of controls are commonly seen where an element is displaying a quantity that may be adjusted by buttons labelled ‘<strong>+</strong>’ and ‘<strong>-</strong>’, but can take many forms, such as arrow buttons that let you cycle through predefined statuses.</p><p>A standard implementation can leave some gaps in understanding for the user. It is unclear what elements the buttons affect, how they affect them, and when the element’s value changes.</p><p>Below, we’ll use ARIA to create a connection between the buttons and the value display element using the <code class="inline">aria-controls</code> attribute. Then, we’ll make the use of the buttons clear by using <code class="inline">aria-label</code> and HTML <code class="inline">&lt;label&gt;</code>. Finally, we’ll utilize the aria <code class="inline">alert</code> role and the <code class="inline">aria-live</code> attribute to let our user know when the value is being updated.</p><p>Let’s take a look at what that code looks like:</p><pre class="brush: html noskimlinks noskimwords">&lt;form action=""&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;Adjust Quantity&lt;/legend&gt;
    &lt;div&gt;
	  &lt;label for="qty-element"&gt;Current Quantity&lt;/label&gt;
	  &lt;input type="text" role="alert" aria-live="assertive" value="0" id="qty-element" /&gt;
	  &lt;button type="button" aria-label='Add to Quantity' aria-controls="qty-element"&gt;+&lt;/button&gt;
	  &lt;button type="button" aria-label='Subtract from Quantity' title="subtract 10" aria-controls="qty-element"&gt;=&lt;/button&gt;
	&lt;/div&gt;
  &lt;/fieldset&gt;
&lt;/form&gt;</pre><h3>ARIA Popups and Hover Tooltips</h3><p>When outfitting a site with ARIA, it is common to use "progressive accessibility". The idea behind this term is that taking a site or web app from its basic form to fully accessible is a daunting task. To deal with this in a way that still makes forward movement, you can implement new features progressively and iteratively.</p><p>For a tooltip with a related popup or modal, this means that we can break the problem into two steps, rolling each out as we can. In this case, the tooltip we’re talking about is the common image of a small question mark that opens additional information when hovered over.</p><p>To let users know that the question mark image is actually a tooltip, we’ve defined it by using an appropriate role, like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;img src="question-mark.jpg" role='tooltip' /&gt;</pre><p>There are a few issues with this implementation, though. Users may still not be aware that hovering over the tooltip initiates a popup with further information. Here’s how we can add that to our code:</p><pre class="brush: html noskimlinks noskimwords">&lt;img src="question-mark.jpg" role='tooltip' aria-haspopup='true' aria-controls='tooltip-popup' /&gt;

&lt;div id='tooltip-popup' aria-hidden='true'&gt;
    Tooltip text
&lt;/div&gt;</pre><h3>Accessible Input Tooltips</h3><p>Instead of a hover-based tooltip, it’s also common for a web app to utilize forms where each input has its own associated tooltip.</p><p>Without additional ARIA markup, it can be difficult to tell which tooltips apply to which input for a user. Not having this relation in place can render your helper text useless in some cases.</p><p>To correct for this, we’ll wrap our tooltips within their own elements. Each of these can be nested near their related input, have their relations established with ARIA, and then can be triggered with JavaScript (or just CSS if you’re crafty).</p><p>Here’s how that could look:</p><pre class="brush: plain noskimlinks noskimwords">&lt;form action=""&gt;
  &lt;fieldset&gt;
    &lt;legend&gt;User Login&lt;/legend&gt;
    &lt;div&gt;
      &lt;input type="text" id="user" aria-describedby="user-tip" /&gt;
	  &lt;label for="user"&gt;Your Username&lt;/label&gt;
      &lt;div role="tooltip" id="user-tip"&gt;Tooltip about their username&lt;/div&gt;
	&lt;/div&gt;
	&lt;div&gt;
      &lt;input type="password" id="password" aria-describedby="password-tip" /&gt;
      &lt;label for="password"&gt;Your Username&lt;/label&gt;
      &lt;div role="tooltip" id="password-tip"&gt;Tooltip about their password&lt;/div&gt;
	&lt;/div&gt;
  &lt;/fieldset&gt;
&lt;/form&gt;</pre><h3>Status Alerts</h3><p>“Our service is currently down”, “Your account is suspended”, and related status alerts are commonly used among web apps, and display important information for users. Without ARIA, they can get buried within the information on a page and cause a variety of issues.</p><p>Utilizing the ARIA <code class="inline">alert</code> role and the <code class="inline">aria-live</code> attribute, we can make sure that our users are aware of any issues quickly once they arrive on a page.</p><p>We can set up this type of status alert like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id="system-status" role="alert" aria-live="assertive"&gt;
    &lt;p&gt;The system is offline!&lt;/p&gt;
&lt;/div&gt;</pre><h3>Creating a Toolbar</h3><p>Finally, let’s take a look at another common control element used within web apps: the toolbar. For our purposes, we’re going to be marking up a toolbar that works like this: our web app shows a large amount of data, oriented in a table. Above this table, our toolbar has several buttons that allow users to sort the table in various ways. These buttons include classic sort options such as <strong>A to Z</strong> and <strong>Z to A</strong>.</p><p>Relationally, these leave some problems concerning accessibility. First, it isn’t clear that those buttons affect the table—we’ll solve this using the <code class="inline">aria-controls</code> attribute. It also isn’t clear that the buttons are associated with each other, which may be a useful piece of information for our users. To define this, we’ll be using the <code class="inline">toolbar</code> role. Finally, a user doesn’t necessarily know which button was pressed last. To correct this, we’ll use the <code class="inline">aria-pressed</code> attribute.</p><p>When using the <code class="inline">aria-pressed</code> attribute, it's important to note that you’ll have to update these elements as the user interacts with them. This will likely require changing the attributes through JavaScript or jQuery.</p><p>Here’s what our toolbar code looks like:</p><pre class="brush: html noskimlinks noskimwords">&lt;div role="toolbar" aria-label="Sorting Toolbs" aria-controls="data-table"&gt;
  &lt;button type="button" aria-pressed="false" aria-label='Sort Alphabetically, A to Z'&gt;A to Z&lt;/button&gt;
  &lt;button type="button" aria-pressed="true" aria-label='Sort Alphabetically, Z to A'&gt;Z to A&lt;/button&gt;
  &lt;button type="button" aria-pressed="false" aria-label='Sort Numerically'&gt;Numerical&lt;/button&gt;
&lt;/div&gt;

&lt;table id='data-table'&gt;
 ...
&lt;/table&gt;</pre><h2>Adding ARIA to Your Own Web Apps</h2><p>With this handful of new control schemes and relations under your belt, you’re well on your way to making your own web app fully accessible! After you’ve added these new markups in, think about how you could apply these attributes to other parts of your user interface to maximize the usability of your creation.</p><p>Are there attributes, roles, or other features of ARIA that you’d like to know about? Or maybe you have some questions about your own implementations, or corrections for this article? Get in contact using the comment section below, or by tagging kylejspeaker on Twitter!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-12T12:31:40+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[10 Best WordPress Facebook Widgets]]></title>
      <link>//shineyrock.com/blog/read/10-best-wordpress-facebook-widgets</link>
      <guid>https://shineyrock.com/blog/read/10-best-wordpress-facebook-widgets#When:10:17:34Z</guid>
      <description><![CDATA[<p>Facebook has over 2.23 billion active users worldwide who spend an average of 20 minutes per visit. That explains why, “on average, the Like and Share Buttons are viewed across almost 10 million websites daily” (via <a href="https://zephoria.com/top-15-valuable-facebook-statistics/" rel="external" target="_blank">Zephoria</a>).<br></p><p>Truth be told, Facebook cannot be ignored. Fortunately, <a href="https://codecanyon.net/category/wordpress/social-networking?tags=facebook" target="_self">CodeCanyon has some excellent plugins and widgets that will help you to integrate Facebook into your WordPress-powered website</a>. From Facebook event calendars to a good-looking Facebook like box, here are the 10 best WordPress Facebook widgets worth your consideration:</p><h2>
<span class="sectionnum">1.</span> <a href="https://codecanyon.net/item/wordpress-facebook-plugin-facebook-feed-widget/20611532" target="_self">Facebook Feed</a>
</h2><p>The <a href="https://codecanyon.net/item/wordpress-facebook-plugin-facebook-feed-widget/20611532" target="_self">Facebook Feed WordPress widget</a> is essentially four Facebook plugins in one.</p><p>With it, you can display your Facebook Posts Feed, Image Gallery, Video Gallery, and Events Calendar.</p><figure class="post_image"><img alt="Facebook Feed" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31736/image/Facebook%20Feed.jpg"></figure><p>Features include:</p><ul>
<li>fully responsive and ready for any screen size</li>
<li>includes Like and Share actions</li>
<li>supports Visual Composer</li>
<li>and more</li>
</ul><p>Facebook Feed is a great way to get your Facebook content on your website.</p><h2>
<span class="sectionnum">2.</span> <a href="https://codecanyon.net/item/top-social-stories-plugin-and-widget/5888553" rel="external" target="_blank">Top Social Stories</a>
</h2><p>You can add more than just your Facebook feed with <a href="https://codecanyon.net/item/top-social-stories-plugin-and-widget/5888553" target="_self">Top Social Stories</a>: it lets you easily track daily interactions on Facebook, Twitter, and more.</p><figure class="post_image"><img alt="Top Social Stories" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31736/image/Top%20Social%20Stories.jpg"></figure><p>Features include:</p><ul>
<li>display top stories based on most shares</li>
<li>export data to custom fields</li>
<li>works for custom post types</li>
<li>fully customizable</li>
<li>and more</li>
</ul><p>Whether you need it solely for Facebook or you want to add other social media feeds into the mix, <a href="https://codecanyon.net/item/top-social-stories-plugin-and-widget/5888553" rel="external" target="_blank">Top Social Stories</a> is a great way to display social media posts.</p><h2>
<span class="sectionnum">3.</span> <a href="https://codecanyon.net/item/facebook-group-widget/6428392" rel="external" target="_blank">Facebook Group Widget</a>
</h2><p>This <a href="https://codecanyon.net/item/facebook-group-widget/6428392" target="_self">WordPress Facebook group widget</a> is a great way to bridge the activity between your WordPress website and Facebook group.</p><p>The Facebook Group Widget displays the latest discussion from any public Facebook group.</p><figure class="post_image"><img alt="Facebook Group Widget" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/003.png"></figure><p>This widget is:</p><ul>
<li>CSS customizable</li>
<li>well documented</li>
<li>easy to use</li>
<li>responsive</li>
</ul><p>Adjust the number of Facebook posts, set the word limit and a few other options, and you'll have the <a href="https://codecanyon.net/item/facebook-group-widget/6428392" rel="external" target="_blank">Facebook Group Widget</a> easily added to your WordPress widget area.<br></p><h2>
<span class="sectionnum">4.</span> <a href="https://codecanyon.net/item/facebook-plugins-comments-dialogs-for-wordpress/235576" rel="external" target="_blank">Facebook Plugins, Comments &amp; Dialogs for WordPress</a>
</h2><p>The previous WordPress Facebook widget plugins have all targeted specific niche use-cases. <a href="https://codecanyon.net/item/facebook-plugins-comments-dialogs-for-wordpress/235576" target="_self">Facebook Plugins, Comments &amp; Dialogs for WordPress</a>, however, is an all-in-one Facebook widget solution.</p><figure class="post_image"><img alt="Facebook Plugins Comments  Dialogs for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/004.png"></figure><p>This WordPress Facebook plugin includes:</p><ul>
<li>11 total Facebook plugins integrated with one line of code</li>
<li>8 customizable Facebook widgets</li>
<li>integrate Facebook comments</li>
<li>shortcode support</li>
<li>and much more</li>
</ul><p>If you'd like the most feature-rich solution for integrating Facebook into your website, you need to consider the <a href="https://codecanyon.net/item/facebook-plugins-comments-dialogs-for-wordpress/235576" rel="external" target="_blank">Facebook Plugins, Comments &amp; Dialogs for WordPress</a> plugin.</p><h2>
<span class="sectionnum">5.</span> <a href="https://codecanyon.net/item/facebook-recent-comments-widget-for-wordpress/7522372" rel="external" target="_blank">Facebook Recent Comments Widget</a>
</h2><p>The <a href="https://codecanyon.net/item/facebook-recent-comments-widget-for-wordpress/7522372" target="_self">Facebook Recent Comments Widget</a> for WordPress brings the comment activity from your Facebook page and brings it to your WordPress widget area.<br></p><p>It's SEO friendly and super easy to use!</p><figure class="post_image"><img alt="Facebook Recent Comments Widget for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/005.png"></figure><p>You can:</p><ul>
<li>receive email notifications for Facebook comment box comments</li>
<li>manually or automatically approve comments to display</li>
<li>and customize the widget</li>
</ul><p><a href="https://codecanyon.net/item/facebook-recent-comments-widget-for-wordpress/7522372" rel="external" target="_blank">Facebook Recent Comments Widget for WordPress</a> is an easy way to display the latest Facebook comments on your WordPress-powered website.<br></p><h2>
<span class="sectionnum">6.</span> <a href="https://codecanyon.net/item/facebook-subscribe-for-wordpress/1276062" rel="external" target="_blank">Facebook Subscribe for WordPress</a>
</h2><p>The Facebook Subscribe for WordPress plugin is the easiest way to add the Facebook Subscribe button to WordPress.</p><p>It also includes full template tag support along with easy-to-use shortcodes.</p><figure class="post_image"><img alt="Facebook Subscribe for WordPress" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/006.jpg"></figure><p>Additional features include:</p><ul>
<li>built-in TinyMCE plugin to create subscribe buttons</li>
<li>supports button options, profile URL, layout, etc.</li>
<li>Facebook Locale API for other languages</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/facebook-subscribe-for-wordpress/1276062" rel="external" target="_blank">Facebook Subscribe for WordPress</a> gives you everything you need to easily create Facebook Subscribe buttons without needing to know any code.<br></p><h2>
<span class="sectionnum">7.</span> <a href="https://codecanyon.net/item/social-stream-for-wordpress-with-carousel/11948779" rel="external" target="_blank">Social Stream for WordPress with Carousel</a>
</h2><p>Social Stream for WordPress with Carousel is a viable option whether you're interested in only displaying Facebook content or content from multiple social media networks at one time.<br></p><p>With Social Stream, you can funnel all your social media streams to your WordPress-powered website in style.</p><figure class="post_image"><img alt="Social Stream for WordPress with Carousel" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/007.jpg"></figure><p>There are several display options included with this social media carousel:</p><ul>
<li>combine multiple social media feeds into one</li>
<li>3 different styles and customizable colors</li>
<li>over 60 animation effects</li>
<li>responsive feed layout</li>
<li>and more</li>
</ul><p>If you're interested in mixing in other social media streams along with your Facebook feed, <a href="https://codecanyon.net/item/social-stream-for-wordpress-with-carousel/11948779" rel="external" target="_blank">Social Stream for WordPress with Carousel</a> may be exactly what you're looking for.<br></p><h2>
<span class="sectionnum">8.</span> <a href="https://codecanyon.net/item/facebook-events-calendar-for-wordpress/22340219" rel="external" target="_blank">Facebook Events Calendar</a>
</h2><p>Display your Facebook events using a widget or shortcode with the Facebook Events Calendar.</p><p>This full-featured solution not only looks great, but has some great features as well.</p><figure class="post_image"><img alt="Facebook Events Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31736/image/Facebook%20Events%20Calendar.jpg"></figure><p>Features include:</p><ul>
<li>full and compact layouts</li>
<li>quick-view popups for each day</li>
<li>calendar and list views</li>
<li>and more</li>
</ul><p>The <a href="https://codecanyon.net/item/facebook-events-calendar-for-wordpress/22340219" rel="external" target="_blank">Facebook Events Calendar</a> is easy to use and one of the best ways to display your Facebook Page public events on your website. No need to maintain two calendars any more!</p><h2>
<span class="sectionnum">9.</span> <a href="https://wordpress.org/plugins/jetpack/" rel="external" target="_blank">Jetpack by WordPress.com</a>
</h2><p>If you're already using Jetpack by WordPress.com and only need a Facebook Like Box, using the free Jetpack plugin is a clear winner.</p><p>Open your Jetpack options, make sure the like box is enabled, and simply go into your widgets to place and configure it accordingly.</p><figure class="post_image"><img alt="Jetpack by WordPresscom" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/jetpack%20facebook%20image.png"></figure><p>Set your options:</p><ul>
<li>show faces, stream, or cover photo</li>
<li>Facebook page URL</li>
<li>title and height</li>
</ul><p>And that's it. <a href="https://wordpress.org/plugins/jetpack/" rel="external" target="_blank">Jetpack by WordPress.com</a> is simple, free, and may be all that you even need.</p><h2>
<span class="sectionnum">10.</span> Facebook Social Plugins</h2><p><a href="https://wordpress.org/plugins/facebook/" rel="external" target="_blank">Facebook does have a free plugin</a> that's available in the WordPress Plugin Directory. However, while it has many options, it has not been updated in over two years and its ratings are dismal.</p><p>I suggest you avoid it.</p><p>However, Facebook does provide everything you need to create your own Facebook widget.</p><figure class="post_image"><img alt="Facebook Social Plugins" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/27289/image/facebook%20image.jpg"></figure><p>You can create:</p><ul>
<li>embedded comments</li>
<li>share buttons</li>
<li>follow buttons</li>
<li>Like buttons</li>
<li>and more</li>
</ul><p>Follow the online prompts and step-by-step instructions to configure your code. Dropping your snippet into the WordPress Text Widget may be all that's required for you to successfully set up your <a href="https://developers.facebook.com/docs/plugins" rel="external" target="_blank">Facebook social plugin</a>.</p><h2>Build Your Own WordPress Facebook Widget</h2><p>While most people will find the previously mentioned plugins and solutions useful, there are those who may find building their own WordPress Facebook widget the way to go.</p><p>There is extensive <a href="https://developers.facebook.com/docs/" rel="external" target="_blank">documentation from Facebook</a>, and the <a href="https://developers.facebook.com/docs/plugins" rel="external" target="_blank">Social Plugins</a> provided by Facebook are a great place to begin building simple widgets.</p><p>And you'll find many <a href="http://code.tutsplus.com/categories/wordpress" rel="external" target="_blank">WordPress How-To Tutorials</a> from Envato that will help:</p><ul>
<li>
<a href="http://code.tutsplus.com/series/introduction-to-creating-your-first-wordpress-widget--cms-721" rel="external" target="_blank">Creating Your First WordPress Widget</a><br>
</li>
<li>
<a href="http://code.tutsplus.com/articles/tips-for-best-practices-in-wordpress-development--cms-20649" rel="external" target="_blank">Tips for Best Practices in WordPress Development</a><br>
</li>
<li><a href="http://code.tutsplus.com/tutorials/using-tools-for-quality-wordpress-development--cms-24809" rel="external" target="_blank">Using Tools for Quality WordPress Development</a></li>
<li><a href="http://code.tutsplus.com/series/tools-of-the-smart-wordpress-developer--cms-838" rel="external" target="_blank">Toolbox of the Smart WordPress Developer</a></li>
<li>and <a href="http://code.tutsplus.com/categories/wordpress" rel="external" target="_blank">more</a>!<br>
</li>
</ul><p>There are also <a href="http://code.tutsplus.com/courses/search/WordPress" rel="external" target="_blank">Envato Tuts+ WordPress courses</a> that can help you on your way to building your own WordPress Facebook widget.</p><h2>Conclusion</h2><p>There are many other Facebook WordPress plugins on <a href="https://codecanyon.net/tags/facebook?category=wordpress" rel="external" target="_blank">CodeCanyon</a> if you still haven't found exactly what you're looking for. Of course, if you still can't find what you're looking for, perhaps it's time to think about building your own and <a href="https://author.envato.com/join" target="_self">becoming an Envato author</a>?</p><p>It's just a matter of comparing prices, options, and reading a few user reviews before finding the right Facebook widget. Facebook is a powerful social media platform that should not be overlooked. Integrating it into your website can make a big difference.</p><p><strong>What kind of Facebook widget are you looking for?</strong></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-10-04T10:17:34+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Hands-on With ARIA: Accessibility for eCommerce]]></title>
      <link>//shineyrock.com/blog/read/hands-on-with-aria-accessibility-for-ecommerce</link>
      <guid>https://shineyrock.com/blog/read/hands-on-with-aria-accessibility-for-ecommerce#When:00:09:18Z</guid>
      <description><![CDATA[<p>Looking to make your site more accessible? Or maybe you want to make it easier to traverse your site overall using browsers and other interfaces? Using ARIA, you can do both. Let’s take a look at what ARIA is and how it can benefit an eCommerce site. We'll also go through some examples step by step.</p><h2>What Is ARIA?</h2><p>WAI-ARIA stands for the Web Accessibility Initiative–Accessible Rich Internet Applications. This initiative takes the form of a set of guidelines and attributes that are maintained by the W3C. Using these attributes, we can create relations between our site elements that can’t be expressed through HTML alone. The most important for our use here is that we can define element relations outside of the parent-child relationship, and more clearly connect UI elements for our users.</p><p>At this point, it might be a good idea to check out <a href="https://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707" target="_self">our original primer on ARIA</a> to brush up on some of its foundations.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31707/preview_image/zenified-code%20(4).png"><div class="roundup-block__primary-category topic-code">Accessibility</div>
<div class="roundup-block__content-title">Site Accessibility: Getting Started With ARIA</div>
<div class="roundup-block__author">Kyle Speaker</div></a></li></ul><h2>Adding ARIA to eCommerce</h2><p>Previously, we talked about <a href="https://code.tutsplus.com/tutorials/hands-on-with-aria-homepage-elements-and-standard-navigation--cms-31826" target="_self">how to apply ARIA to a general website</a> that resembled a common small business homepage. This time, we’re going to take a closer look at how ARIA can improve the user experience for large eCommerce sites.</p><p>We’re going to focus on four key areas of eCommerce that pose unique situations: product pages, category pages (or product aggregate pages), multi-level navigation, and faceted navigation. We’ll be using these two wireframes to guide us through the process:</p><figure class="post_image"><img alt="Product Page Wireframe" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31890/image/untitled_page.png"><figcaption>A very basic product mockup</figcaption></figure><figure class="post_image"><img alt="Category Page Wireframe" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/31890/image/untitled_page.png"><figcaption>Example of a Product Listing Page mockup</figcaption></figure><h3>Preparing for ARIA</h3><p>In the case of most websites, adding ARIA is a fairly straightforward process. You define the pieces of your site, break them down into landmarks and elements, and add in the necessary code.</p><p>We’re going to follow a similar process with our eCommerce site, but we now have a new layer of intricacy. With the complexity that comes with eCommerce sites, ARIA can become a rabbit hole in many cases. While it is important to improve the accessibility of your site as much as possible, we unfortunately will often run into business constraints. Because of this, we’ll want to do a little more planning upfront, prioritizing each of our ARIA additions.</p><p>By doing this prioritization, we can ensure that the most important aspects of our site are improved first, making the user experience as good as we can in the time available.</p><p>Let’s kick it off by taking a look at some product pages.</p><h3>ARIA for Product Pages</h3><p>A staple page for any eCommerce site, these pages typically show a product, its available variations, and a way to add the item to a cart. Each of these interactive elements should be considered separately.</p><p>For our product page, let’s break it into pieces like this: our core product information, interactive elements that affect the product, our add to cart button, and an expanded content section.</p><p>If we needed to prioritize the implementation on this page, we would want to group it like so:</p><ol>
<li>Core product info, interactive elements, add to cart button</li>
<li>Expanded product content</li>
</ol><p>The main factor at play here is something we talked about in a previous article: ARIA helps to define an element’s intent. In the case of the expanded content, most of the HTML elements that are being used have elements with semantic meaning and intent that match. This means that while it is useful to put additional ARIA information if we can, it is likely less important than completing the other three areas.</p><h4>Core Product Information</h4><p>Let’s start off by adding ARIA to our core product information. This is pretty straightforward due to the simplicity of the elements being used here. The code looks like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Our code before any changes --&gt;
&lt;div class='row-wrapper'&gt;

    &lt;div class='left-column'&gt;
        &lt;img src='bag-image.jpg' alt='brown bag' /&gt;
    &lt;/div&gt;

    &lt;div class='right-column'&gt;
        &lt;h1&gt;A Nice Bag&lt;/h1&gt;
        &lt;p&gt;Bag Size:&lt;br/&gt;100x150mm&lt;/p&gt;

        &lt;select name='color-options'&gt;
            &lt;option value="brown"&gt;Brown&lt;/option&gt;
            &lt;option value="black"&gt;Black&lt;/option&gt;
        &lt;/select&gt;

        &lt;input type="checkbox" value="Glossy"&gt;

        &lt;button&gt;Add to cart&lt;/button&gt;
    &lt;/div&gt;

&lt;/div&gt;</pre><p>For starters, we'll add a role to the main div, and a relationship between the image and the product title heading. </p><pre class="brush: html noskimlinks noskimwords">&lt;div class='row-wrapper' role='main'&gt;

    &lt;div class='left-column'&gt;
        &lt;img src='bag-image.jpg' alt='brown bag' aria-labelledby='product-title' /&gt;
    &lt;/div&gt;

    &lt;div class='right-column'&gt;
        &lt;h1 id='product-title'&gt;A Nice Bag&lt;/h1&gt;

        ...


    &lt;/div&gt;

&lt;/div&gt;</pre><h4>Interactive Product Elements</h4><p>This is where product pages can get a little tricky. Products on an eCommerce site can have quite a few different types of variations present. Beyond just the types available, the number of them that can be utilized simultaneously adds another layer of complexity. In our example, we have three elements that come into play: size, color, and quantity.</p><p>Let’s take a look at how you can mark that up. Here's the code for the ARIA-enhanced selection and checkbox elements:</p><pre class="brush: html noskimlinks noskimwords">  &lt;select name='color-options' aria-label='Color Selection Drop Down'&gt;
    &lt;option role='option' aria-selected='false' value="brown"&gt;Brown&lt;/option&gt;
    &lt;option role='option' aria-selected='false' value="black"&gt;Black&lt;/option&gt;
  &lt;/select&gt;

  &lt;input type="checkbox" value="Glossy" role="checkbox" aria-checked="false" aria-label='Glossy Bag?'&gt;<br></pre><h4>Add to Cart Button</h4><p>The cart button is similar to a standard button, but we’re going to go out of our way to label it more clearly than other buttons:</p><pre class="brush: html noskimlinks noskimwords">&lt;button aria-label="Add to Cart"&gt;Add to Cart&lt;/button&gt;</pre><h4>Expanded Product Content</h4><p>Finally, the expanded content area is treated just like a typical content area. Depending on your product pages, however, it might be a good idea to separate your main content landmarks from your supplementary content landmarks. The tabs add an extra layer to the code here as well. Here’s how we’d do it in our example:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id="tabs" role='comlementary' aria-label="Expanded Content Area"&gt;
    &lt;ul role="tablist"&gt;
        &lt;li role="presentation"&gt;&lt;a href="#more-info" id="tab-more-info" role="tab" aria-selected="true" tabindex="0"&gt;Product Info&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;div id="more-info" role="tabpanel" aria-hidden="false" aria-labelledby="tab-more-info"&gt;
        More product info...
    &lt;/div&gt;
&lt;/div&gt;</pre><h3>Adding ARIA to Category Pages</h3><p>While product pages can be considered an alternative form of content page in most respects, a site’s category pages, also called Product Listing Pages (PLPs), are a whole different beast. They are operating as a large navigation structure, allowing users to sort through hundreds or even thousands of products.</p><p>This makes them increasingly complex, becoming even more so as additional layers of content and filters are added (we’ll talk about faceted navigation and filters in the next section). Let’s look at the two mains areas of our PLP outside of the filters: the product blocks and the pagination.</p><p>Here's our starting code frame:</p><pre class="brush: html noskimlinks noskimwords">&lt;h1&gt;Product Listing Page&lt;/h1&gt;

&lt;div id='faceted-navigation'&gt;

    &lt;p&gt;Color Sort&lt;/p&gt;
	&lt;a href="#"&gt;Red&lt;/a&gt;
	&lt;a href="#"&gt;Green&lt;/a&gt;
	&lt;a href="#"&gt;Black&lt;/a&gt;

	&lt;p&gt;Size Sort&lt;/p&gt;
	&lt;a href="#"&gt;Large&lt;/a&gt;
	&lt;a href="#"&gt;Small&lt;/a&gt;

&lt;/div&gt;

&lt;div id='product-listings'&gt;

	&lt;div id='product-block'&gt;
		&lt;h2&gt;A Nice Bag&lt;/h2&gt;

		&lt;img src="bag.jpg" alt="A paper bag" /&gt;

		&lt;button&gt;Add to cart&lt;/button&gt;
	&lt;/div&gt;
	...

&lt;/div&gt;

&lt;div id='pagination'&gt;

	1
	&lt;a href="#"&gt;2&lt;/a&gt;
	&lt;a href="#"&gt;3&lt;/a&gt;
	...
	&lt;a href="#"&gt;Last&lt;/a&gt;

&lt;/div&gt;</pre><h4>Handling Pagination</h4><p>Pagination is the name given to the small links at the bottom of our product listings here. Typically, they’re represented by numbers or arrows, but they can come in various other forms. On the HTML side of things, pagination links look just like regular links. We’ll say that ours is controlling the product listings without redirecting to another page.</p><p>To make it known that it's controlling a content area in this way, we have to declare it as a controller, define what it is controlling, and then mark that content area as live. Here’s what that looks like in our case:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id='product-listings' role='main' aria-live='polite'&gt;

	...

&lt;/div&gt;

&lt;div id='pagination' role='navigation' aria-label='Pagination Links'&gt;

	1
	&lt;a href="#" aria-controls='product-listings'&gt;2&lt;/a&gt;
	&lt;a href="#" aria-controls='product-listings'&gt;3&lt;/a&gt;
	...
	&lt;a href="#" aria-controls='product-listings'&gt;Last&lt;/a&gt;

&lt;/div&gt;</pre><p>When we create our live area here, we utilize the <code class="inline">"polite"</code> setting that ARIA makes available. If your changes are pertinent and need to be addressed by the user quickly, or you need to prioritize among several live areas, you can use the value <code class="inline">"assertive"</code> as well.</p><h4>Marking Up Repetitive Elements</h4><p>A unique challenge that comes up with product landing pages is the intensive navigation complexity within the product listings themselves. From a visual perspective, it can be easy enough to group the information, using visual cues to determine what information applies to which product.</p><p>Doing so with ARIA has a few more layers than the previous applications we’ve covered. Marking a “buy now” button a standard button can create confusion when there are 20 of these buttons on a page. To solve this, we’ll need to create clear connections between each product and its related elements.</p><p>Here’s how we’ll do that:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id='product-listings' role='main' aria-live='polite'&gt;

    &lt;div id='product-block'&gt;
		&lt;h2 id='product-title'&gt;A Nice Bag&lt;/h2&gt;

		&lt;img src="bag.jpg" alt="A paper bag" /&gt;

		&lt;button aria-labelledby='product-title'&gt;Add to cart&lt;/button&gt;
	&lt;/div&gt;

	...

&lt;/div&gt;</pre><p>While this does help a bit with clarifying relations for the user, it's still not the best implementation. A better way would be to dynamically generate an aria-label by concatenating the product-title element with an additional phrase such as "add to cart".</p><h2>Using ARIA With Faceted Navigation</h2><p>Faceted navigation refers to the filters and options that are commonly shown on eCommerce sites, letting you narrow down your search results. These come in many flavors—from sizes to color and beyond. For our example, we’re going to make two assumptions:</p><ol>
<li><p>Our faceted navigation updates the products live on the page. This isn’t always the case, as sometimes eCommerce sites might generate a new page when a filter is applied, but we’ll be working as if the site updates content live.</p></li>
<li><p>Our faceted navigation allows for the selection of multiple filters. Not every eCommerce site does this, and there are definitely cases where it shouldn’t be allowed. However, this creates an extra layer of complexity outside of the scope of this article.</p></li>
</ol><h3>Setting Up Your Controls</h3><p>The HTML behind our filters is similar to that of pagination, appearing in the code as basic links. For our uses, though, the intent of the filters is to alter information that is currently on the page. Because of this, we’ll want to mark the entire container around the filters, making it clear that this is a controller for another area on the page:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id='faceted-navigation' role='navigation' aria-controls='product-listings'&gt;

    &lt;p&gt;Color Sort&lt;/p&gt;
    &lt;a href="#" aria-label='Sort by Red'&gt;Red&lt;/a&gt;
	&lt;a href="#" aria-label='Sort by Green'&gt;Green&lt;/a&gt;
	&lt;a href="#" aria-label='Sort by Black'&gt;Black&lt;/a&gt;

	&lt;p&gt;Size Sort&lt;/p&gt;
	&lt;a href="#" aria-label='Sort by Large'&gt;Large&lt;/a&gt;
	&lt;a href="#" aria-label='Sort by Small'&gt;Small&lt;/a&gt;

&lt;/div&gt;</pre><h3>Defining Live Areas</h3><p>Like pagination, these updates are happening live on the page. Because of this, we’ll want to mark the main content on our page as being “live”. Note that we did this previously in the pagination section, but we’ll be repeating the step here for consistency.</p><p>The code should look like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id='product-listings' role='main' aria-live='polite'&gt;

    &lt;div id='product-block'&gt;
    	&lt;h2 id='product-title'&gt;A Nice Bag&lt;/h2&gt;

		&lt;img src="bag.jpg" alt="A paper bag" /&gt;

		&lt;button aria-labelledby='product-title'&gt;Add to cart&lt;/button&gt;
	&lt;/div&gt;

	...

&lt;/div&gt;</pre><h2>Testing Your Implementations<br>
</h2><p>Our implementations are now all in place, so let’s put them through some tests. My favorite tools for doing so include <a href="https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?hl=en">Google’s Accessibility Developer Tools</a> or <a href="https://www.ibm.com/able/dynamic-assessment-plug-in.html">IBM’s Dynamic Assistant Plugin</a>, but depending on your project’s scale, you might need to create your own testing script.</p><p>If you need a tool that operates outside of Chrome, or just don’t prefer the two mentioned above, <a href="https://www.w3.org/WAI/ER/tools/">W3C has a list of other accessibility tools</a> that are available.</p><h2>Making eCommerce More Accessible</h2><p>With these new additions to your ARIA toolset, you should now be able to appropriately mark up almost any eCommerce site. To ensure the best user experience with an eCommerce site, remember to keep your navigation as simple as possible, and express intent clearly.</p><p>Have further questions on this topic? Did I miss something important? Tell me in the comments below!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-09-29T00:09:18+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[New eBooks Available for Subscribers]]></title>
      <link>//shineyrock.com/blog/read/new_ebooks_available_for_subscribers</link>
      <guid>https://shineyrock.com/blog/read/new_ebooks_available_for_subscribers#When:10:56:52Z</guid>
      <description><![CDATA[<p>Do you want to learn more about big data analytics? How about creating microservices with Kotlin, or learning Node.js development? Our <a href="https://tutsplus.com/ebooks?ec_promo=teaser_post_ebooks" target="_self">latest batch of eBooks</a> will teach you all you need to know about these topics and more.</p><figure class="post_image"><a href="https://tutsplus.com/ebooks?ec_promo=teaser_post_ebooks" target="_self"><img alt="New eBooks available" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/ebook-promo-2018.jpg"></a></figure><h2>What You’ll Learn<br>
</h2><p>This month, we’ve made eight new eBooks available for Envato Tuts+ subscribers to download. Here’s a summary of what you can learn from them.</p><h3>1. <a href="https://code.tutsplus.com/ebooks/security-with-go?ec_promo=teaser_post_ebooks" target="_self">Security With Go</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/security-with-go?ec_promo=teaser_post_ebooks" target="_self"><img alt="Security With Go" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Go-security.jpg"></a></figure><p>Go is becoming more and more popular as a language for security experts. <em>Security With Go </em>is the first Golang security book, and it is useful for both blue team and red team applications. With this book, you will learn how to write secure software, monitor your systems, secure your data, attack systems, and extract information.</p><h3>2. <a href="https://code.tutsplus.com/ebooks/rust-programming-by-example?ec_promo=teaser_post_ebooks" target="_self">Rust Programming by Example</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/rust-programming-by-example?ec_promo=teaser_post_ebooks" target="_self"><img alt="Rust Programming By Example" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Rust.jpg"></a></figure><p>Rust is an open source, safe, concurrent, practical language created by Mozilla. It runs blazingly fast, prevents segfaults, and guarantees safety. This book gets you started with essential software development by guiding you through the different aspects of Rust programming. With this approach, you can bridge the gap between learning and implementing immediately.</p><h3>3. <a href="https://code.tutsplus.com/ebooks/practical-big-data-analytics?ec_promo=teaser_post_ebooks" target="_self">Practical Big Data Analytics</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/practical-big-data-analytics?ec_promo=teaser_post_ebooks" target="_self"><img alt="Practical Big Data Analytics" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Big-data.jpg"></a></figure><p>With the help of this guide, you will be able to bridge the gap between the theoretical world of technology with the practical ground reality of building corporate Big Data and data science platforms. You will get hands-on exposure to Hadoop and Spark, build machine learning dashboards using R and R Shiny, create web-based apps using NoSQL databases such as MongoDB, and even learn how to write R code for neural networks.</p><p>By the end of the book, you will have a very clear and concrete understanding of what Big Data analytics means, how it drives revenues for organizations, and how you can develop your own Big Data analytics solution using the different tools and methods articulated in this book.<br></p><h3>4. <a href="https://code.tutsplus.com/ebooks/learn-ios-11-programming-with-swift-4-second-edition?ec_promo=teaser_post_ebooks" target="_self">Learn iOS 11 Programming With Swift 4</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/learn-ios-11-programming-with-swift-4-second-edition?ec_promo=teaser_post_ebooks" target="_self"><img alt="Learn iOS 11 Programming with Swift 4" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/IOS-Swift.jpg"></a></figure><p>You want to build iOS applications but where do you start? Forget sifting through tutorials and blog posts—this book is a direct route into iOS development, taking you through the basics and showing you how to put the principles into practice. So take advantage of this developer-friendly guide and start building applications that may just take the App Store by storm!</p><h3>5. <a href="https://code.tutsplus.com/ebooks/learning-nodejs-development?ec_promo=teaser_post_ebooks" target="_self">Learning Node.js Development</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/learning-nodejs-development?ec_promo=teaser_post_ebooks" target="_self"><img alt="Learning Nodejs Development" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Node.jpg"></a></figure><p>Learning Node.js Development is a practical, project-based book that provides you with everything you need to get started as a Node.js developer. If you are looking to create real-world Node applications, or you want to switch careers or launch a side project to generate some extra income, then you're in the right place. This book has been written around a single goal—turning you into a professional Node developer capable of developing, testing, and deploying real-world production applications.</p><h3>6. <a href="https://code.tutsplus.com/ebooks/hands-on-microservices-with-kotlin?ec_promo=teaser_post_ebooks" target="_self">Hands-on Microservices With Kotlin</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/hands-on-microservices-with-kotlin?ec_promo=teaser_post_ebooks" target="_self"><img alt="Hands-On Microservices with Kotlin" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Kotlin.jpg"></a></figure><p>Microservices help you design scalable, easy-to-maintain web applications; Kotlin allows you to take advantage of modern idioms to simplify your development and create high-quality services. </p><p>This book guides you in designing and implementing services and producing production-ready, testable, lean code that's shorter and simpler than a traditional Java implementation. Reap the benefits of using the reactive paradigm and take advantage of non-blocking techniques to take your services to the next level in terms of industry standards. </p><h3>7. <a href="https://code.tutsplus.com/ebooks/hands-on-data-structures-and-algorithms-with-javascript?ec_promo=teaser_post_ebooks" target="_self">Hands-on Data Structures and Algorithms With JavaScript</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/hands-on-data-structures-and-algorithms-with-javascript?ec_promo=teaser_post_ebooks" target="_self"><img alt="Hands-On Data Structures and Algorithms with JavaScript" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/JS-Structures.jpg"></a></figure><p>Do you want to build applications that are high-performing and fast? Are you looking for complete solutions to implement complex data structures and algorithms in a practical way? If either of these questions rings a bell, then this book is for you!</p><p>You'll start by building stacks and understanding performance and memory implications. You will learn how to pick the right type of queue for the application. You will then use sets, maps, trees, and graphs to simplify complex applications. You will learn to implement different types of sorting algorithm before gradually calculating and analyzing space and time complexity. Finally, you'll increase the performance of your application using micro optimizations and memory management.</p><p>By the end of the book you will have gained the skills and expertise necessary to create and employ various data structures in a way that is demanded by your project or use case.<br></p><h3>8. <a href="https://code.tutsplus.com/ebooks/django-restful-web-services?ec_promo=teaser_post_ebooks" target="_self">Django RESTful Web Services</a>
</h3><figure class="post_image"><a href="https://code.tutsplus.com/ebooks/django-restful-web-services?ec_promo=teaser_post_ebooks" target="_self"><img alt="Django RESTful Web Services" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31876/image/Django.jpg"></a></figure><p>If you are a Python developer and want to efficiently create RESTful web services with Django for your apps, then this is the right book for you. The book starts off by showing you how to install and configure the environment, required software, and tools to create RESTful web services with Django and the Django REST framework. You then move on to working with advanced serialization and migrations to interact with SQLite and non-SQL data sources, creating API views to process diverse HTTP requests on objects, include security and permissions, and much more. </p><p>By the end of the book, you will be able to build RESTful web services with Django.</p><h2>Start Reading With a Combined Subscription</h2><p>You can read our new eBooks straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post_ebooks" target="_self">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to these eBooks, but also to our growing library of over 1,000 video courses on Envato Tuts+.</p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 680,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-09-19T10:56:52+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Hands-on With ARIA: Homepage Elements and Standard Navigation]]></title>
      <link>//shineyrock.com/blog/read/hands-on-with-aria-homepage-elements-and-standard-navigation</link>
      <guid>https://shineyrock.com/blog/read/hands-on-with-aria-homepage-elements-and-standard-navigation#When:12:39:51Z</guid>
      <description><![CDATA[<p>Looking to make your website more accessible? Want to be the first in line as new online interfaces come to market? Look no further than ARIA.</p><p>This set of standards maintained by the W3C (World Wide Web Consortium) gives you the best of both worlds by adding a number of attributes that allow HTML to be extended in meaningful ways. Here, we’ll walk through what ARIA is, see how it can benefit an informational website, and go through a use case step by step with code examples. Let’s get started!</p><h2>ARIA Basics</h2><p>ARIA (or sometimes WAI-ARIA) is the acronym for a set of accessibility standards, called the Web Accessibility Initiative–Accessible Rich Internet Applications. You can check out more about the <a href="https://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707">foundations of ARIA in my previous article</a>, but let’s go over some of its pillars now.</p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/site-accessibility-getting-started-with-aria--cms-31707"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31707/preview_image/zenified-code%20(4).png"><div class="roundup-block__primary-category topic-code">Accessibility</div>
<div class="roundup-block__content-title">Site Accessibility: Getting Started With ARIA</div>
<div class="roundup-block__author">Kyle Speaker</div></a></li></ul><h3>Defining Non-Traditional Relationships</h3><p>A majority of websites are built using HTML, which primarily relates elements to each other in a hierarchical fashion through parent-child relationships. This structure is great for defining content, but falls short when it comes to defining user interfaces. For example, in many sites and web applications, an area of content is controlled by buttons within a sibling element—the siblings have the same parent element, but in HTML they don't have a direct relationship with each other. Because of this, it becomes difficult to define which User Interface (UI) elements control which pieces of content when using assistive technologies.</p><p>This carries through to newer interfaces as well. For example, if you are trying to navigate a website through a smart device, it becomes difficult when element changes are not visible.</p><p>ARIA allows you to tie HTML elements together using additional attributes to represent these types of controls.</p><h3>Non-Rigid Element Classification</h3><p>Another shortcoming of HTML is its inability to separate structure from intent.</p><p>For example, you may want to make an image element into a clickable button. However, HTML still largely defines that image as only an image, and everything beyond that happens elsewhere.</p><p>With ARIA, intent can be separated out from an element, allowing for images to be marked as buttons or a link to be defined as a tooltip. This gives more control to the developer concerning the UI, creating more clearly set relationships.</p><h3>Creating Landmark Areas</h3><p>Beyond marking elements within the UI, ARIA also gives access to the role attribute—used to define areas of a page. For example, you can mark your main menu as navigation and your article’s content area as main content. This makes it easier for users to move throughout the important areas of your site, and can prevent confusion for those with uncommon or complex site layouts.</p><h2>Use Case: Small Business Homepage</h2><p>To get some experience adding ARIA to a site, we’re going to take a wireframe of a site that might be used by a small business and implement our attributes step by step.</p><figure class="post_image"><img alt="Example Page Wireframe" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31826/image/untitled_page.png"><figcaption>The page wireframe we'll be marking up</figcaption></figure><p>For the sake of clarity, the code we’ll be working with is stripped down, with CSS classes and any functionality from a CMS removed.</p><p>The first thing we’ll want to do is break up our wireframe into parts to make adding in ARIA simpler overall. In the picture below, you’ll see that I’ve chosen to break the site down into five main parts: </p><ul>
<li>navigation</li>
<li>content</li>
<li>sidebar</li>
<li>contact forms</li>
<li>specialized UI elements</li>
</ul><p>In our case, it looks like this:</p><figure class="post_image"><img alt="Wireframe broken into sections" data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31826/image/aria1_withselections.png"><figcaption>The sections we'll be working with</figcaption></figure><p>When breaking your site down into areas like this, we’re looking for two things. The first is for major elements that can be defined by an ARIA landmark: banner, navigation, main, complementary, content info, search, and form. These represent the necessary parts of our site, and anything unnecessary for utilizing it won’t be marked as a landmark (e.g. advertisements).</p><p>The second thing to look for is specific elements that need to be clarified with ARIA. In most cases, this is pretty simple (such as marking an image as an image), but for some UI elements, it can get a bit tricky.</p><p>Once we know what areas need to have ARIA implemented, we can start to move through them systematically. Let’s get started with the site’s navigation.</p><h3>Navigation</h3><p>In our example, you’ll notice that we have a few types of navigation. The first is a menu as seen on most sites, listing some pages for the site. Directly below is a smaller menu that holds options for users.</p><p>We want to mark these with the <code class="inline">role="navigation"</code> attribute so that they can easily be picked out as the site’s menus. This leads to the question: should they be grouped together into a single navigation landmark, or marked as two separate landmarks?</p><p>To answer this question in your own projects, you can typically ask yourself two questions:</p><ol>
<li><p>Is the intent for these menus different? In our example, the top menu navigates the site’s pillar pages, while the smaller menu focuses on things that a logged-in user might need. These intents are different, so it makes sense to separate them.</p></li>
<li><p>Are the menus within the same parent element? I know this seems counterintuitive since ARIA is designed to help us overcome these types of relationship restrictions, but in this case it is less about what is possible and more about what is right for the user. Having a single menu defined, but with half of it in one location and the other half elsewhere, makes navigation more difficult.</p></li>
</ol><p>For our case, we are going to treat our navigations as two separate landmarks. So we’ll make some changes to the code. To start with, we have just our basic HTML:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Example code before ARIA --&gt;

&lt;div id=’menus’&gt;
    &lt;ul&gt;
		&lt;li&gt;Home&lt;/li&gt;
		&lt;li&gt;About&lt;/li&gt;
		&lt;li&gt;Services&lt;/li&gt;
		&lt;li&gt;Location&lt;/li&gt;
		&lt;li&gt;Contact Us&lt;/li&gt;
	&lt;/ul&gt;
    &lt;ul&gt;
		&lt;li&gt;Login&lt;/li&gt;
		&lt;li&gt;Account&lt;/li&gt;
		&lt;li&gt;Settings&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;</pre><p>Now, we'll annotate it with some landmarks.</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Example code after adding landmarks --&gt;

&lt;div id=’navigation-menu’ role=’navigation’&gt;
    &lt;ul&gt;
        ...
	&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=’user-menu’ role=’navigation’&gt;
    &lt;ul&gt;
        ...
	&lt;/ul&gt;
&lt;/div&gt;
</pre><p>The next step in defining these landmarks is to give the user a hint as to what the intent of each menu is. If we leave them both as navigation without any further information, it just makes things more difficult to interpret. So let’s add meaningful labels to them using the <code class="inline">aria-label</code> attribute:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Example code after adding labels --&gt;

&lt;div id=’navigation-menu’ role=’navigation’ aria-label=’Main Navigation’&gt;
    &lt;ul&gt;
        ...
	&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=’user-menu’ role=’navigation’ aria-label=’User Menu’&gt;
    &lt;ul&gt;
        ...
	&lt;/ul&gt;
&lt;/div&gt;
</pre><p>Beyond that, we’ll want to add additional role markup to our menu to let users know that this is a menu, and mark each link within as a menu item:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Code after ARIA implementation --&gt;

&lt;div id=’navigation-menu’ role=’navigation’ aria-label=’Main Navigation’&gt;
    &lt;ul role=’menu’&gt;
		&lt;li role=’menuitem’&gt;Home&lt;/li&gt;
		&lt;li role=’menuitem’&gt;About&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Services&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Location&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Contact Us&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;
&lt;div id=’user-menu’ role=’navigation’ aria-label=’User Menu’&gt;
    &lt;ul role=’menu’&gt;
		&lt;li role=’menuitem’&gt;Login&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Account&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Settings&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;
</pre><h3>Content Area</h3><p>Now on to the content area. Here, we’ll be marking the container that holds the entirety of our main content with <code class="inline">role=”main”</code>. Again, for comparison, here's our starter code. </p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Our code before ARIA --&gt;

&lt;div&gt;
    &lt;img src=”#” onclick=”#” /&gt;

	&lt;p&gt; Lorem …
		&lt;a href=”#” onclick=”#”&gt;scelerisque&lt;/a&gt;
	…&lt;/p&gt;

	&lt;form action="#"&gt;
      		&lt;input type="text" placeholder="Enter Your Search Text" name="search"&gt;
     		 &lt;button type="submit"&gt;Find It&lt;/button&gt;
    	&lt;/form&gt;
&lt;/div&gt;</pre><p>And here's what it looks like after we add the <code class="inline">"main"</code> landmark.</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Adding in the 'main' landmark --&gt;

&lt;div role=”main”&gt;
    &lt;img src=”#” onclick=”#” /&gt;

	&lt;p&gt; Lorem …
		&lt;a href=”#” onhover=”#”&gt;scelerisque&lt;/a&gt;
	…&lt;/p&gt;

	&lt;form action="#"&gt;
      		&lt;input type="text" placeholder="Enter Your Search Text"&gt;
     		 &lt;button type="submit"&gt;Find It&lt;/button&gt;
    	&lt;/form&gt;
&lt;/div&gt;
</pre><p>Within that content, we’ll go on to find any element that has an intent that doesn’t match its HTML definition.</p><p>First, we’ll take care of the image acting as a button by adding the <code class="inline">"button"</code> role:</p><pre class="brush: html noskimlinks noskimwords">&lt;img src=”#” onclick=”#” role=”button” /&gt;</pre><p>This link that activates a modal is a bit trickier, because it depends on what is in the modal itself. For us, we’re going to say it’s a tooltip:</p><pre class="brush: html noskimlinks noskimwords">&lt;a href=”#” onhover=”#” role:’tooltip’&gt;scelerisque&lt;/a&gt;<br></pre><p>Within our main content, we also have a search form. This has an extra layer of complexity to it, in that it’s a search form using HTML elements, and it also qualifies as a search box landmark. We would mark it up like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;div role=’search’&gt;
&lt;form action="#"&gt;
          	&lt;input type="text" placeholder="Enter Your Search Text" role=’textbox’&gt;
     		 &lt;button type="submit" role=’button’&gt;Find It&lt;/button&gt;
    	&lt;/form&gt;
&lt;/div&gt;</pre><p>Beyond that, you can define every element with its proper ARIA tag. For most sites, this can be too much of a time burden on the development process, though in most CMSs it can be automated. In cases where it can’t be, if an element’s HTML definition matches its use intent, then it can be considered low priority when making ARIA implementations. Here’s what the main content area looks like after making all these changes:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- The completed content area --&gt;

&lt;div role=”main”&gt;
    &lt;img src=”#” onclick=”#” role=”button” /&gt;

	&lt;p&gt; Lorem …
		&lt;a href=”#” onhover=”#” role:’tooltip’&gt;scelerisque&lt;/a&gt;
	…&lt;/p&gt;

&lt;div role=’search’&gt;
&lt;form action="#"&gt;
      		&lt;input type="text" placeholder="Enter Your Search Text" role=’textbox’&gt;
     		 &lt;button type="submit" role=’button’&gt;Find It&lt;/button&gt;
    	&lt;/form&gt;
&lt;/div&gt;
&lt;/div&gt;
</pre><h3>Sidebar</h3><p>The sidebar of a site can take many forms. In our case, it provides additional content related to the site, with a list of related posts at the bottom.</p><p>Here's the starting markup for the sidebar:</p><pre class="brush: html noskimlinks noskimwords">&lt;aside id=’sidebar’&gt;
    &lt;div&gt;
    	&lt;h2&gt;More About Us&lt;/h2&gt;
    	&lt;p&gt;Lorem...&lt;/p&gt;
    &lt;/div&gt;
	&lt;div&gt;
    	&lt;h2&gt;Related Posts&lt;/h2&gt;
    	&lt;ul&gt;
    		&lt;li&gt;Post&lt;/li&gt;
    		&lt;li&gt;Post&lt;/li&gt;
    		&lt;li&gt;Blog Post&lt;/li&gt;
    	&lt;/ul&gt;
    &lt;/div&gt;
&lt;/aside&gt;
</pre><p>To define the content, we’ll want to give it the <code class="inline">"complementary"</code> role, letting users know that the information in the sidebar is additional content related to the main content. That can look like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;div role=’complementary’&gt;
    &lt;h2&gt;More About Us&lt;/h2&gt;
	&lt;p&gt;Lorem...&lt;/p&gt;
&lt;/div&gt;
</pre><p>The related posts below could be considered a form of navigation, allowing users to further explore the posts of the site. We’ll want to mark it with a <code class="inline">"navigation"</code> role, and give it an appropriate label, like so:</p><pre class="brush: html noskimlinks noskimwords">&lt;div role=’navigation’ aria-labelledby=’posts-heading’&gt;
    &lt;h2 id=’posts-heading’&gt;Related Posts&lt;/h2&gt;
	&lt;ul role=’menu’&gt;
		&lt;li role=’menuitem’&gt;Post&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Post&lt;/li&gt;
		&lt;li role=’menuitem’&gt;Blog Post&lt;/li&gt;
	&lt;/ul&gt;
&lt;/div&gt;
</pre><p>Each site’s sidebar is different and may require a different combination of roles and landmarks. If your sidebar has an advertisement, then it’s best not to mark that element. If there’s a search form within your sidebar, then mark it with the appropriate role as well. Any menus that appear in a sidebar should follow the same pattern as we discussed in the navigation section: </p><ul>
<li>a <code class="inline">"navigation"</code> landmark</li>
<li>a <code class="inline">"menu"</code> role for the menu container</li>
<li>roles of <code class="inline">"menuitem"</code> for each of the nested items</li>
</ul><p>Here’s what our final sidebar looks like:</p><pre class="brush: html noskimlinks noskimwords">&lt;aside id=’sidebar’&gt;
    &lt;div role=’complementary’&gt;
    	&lt;h2&gt;More About Us&lt;/h2&gt;
    	&lt;p&gt;Lorem...&lt;/p&gt;
    &lt;/div&gt;
	&lt;div role=’navigation’ aria-labelledby=’posts-heading’&gt;
    	&lt;h2 id=’posts-heading’&gt;Related Posts&lt;/h2&gt;
    	&lt;ul role=’menu’&gt;
    		&lt;li role=’menuitem’&gt;Post&lt;/li&gt;
    		&lt;li role=’menuitem’&gt;Post&lt;/li&gt;
    		&lt;li role=’menuitem’&gt;Blog Post&lt;/li&gt;
    	&lt;/ul&gt;
    &lt;/div&gt;
&lt;/aside&gt;
</pre><h3>Handling Contact Forms</h3><p>Finally, at the bottom of our page is a call-to-action form, asking for the user’s name and email, with a standard submit button below. When it comes to forms, there are three parts to keep in mind:</p><ol>
<li><p>Give the form the landmark role of <code class="inline">"form"</code>: since the form is a major part of the site, we need to make it easy for users to get to it. We do so by giving it a landmark role</p></li>
<li><p>Assign matching roles to elements. Forms are a common area for intent and HTML definitions to be mismatched. Add in ARIA roles where necessary, especially when it comes to checkboxes, sliders, tooltips, and other elements that can be implemented in multiple ways.</p></li>
<li><p>Match the labels with the appropriate elements. HTML handles this in a basic way, letting you use the <code class="inline">&lt;label&gt;</code> element to associate a label with an input. Forms can easily have a more complex structure that prevents that from working; fortunately we can fix that with the <code class="inline">aria-labelledby</code> attribute.</p></li>
</ol><p>Let’s take a look at what our updated code looks like:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Contact form after ARIA --&gt;

&lt;form action="#" role=’form’&gt;

    &lt;label for="textbox" id=’textbox-label’&gt;Text box&lt;/label&gt;
  	&lt;input type="text" id="textbox" role=’textbox’ aria-labelledby=’textbox-label’&gt;

    &lt;select name="combobox" role=’combobox’ aria-label=’Descriptive Name Dropdown’&gt;
		&lt;option value="choice1" aria-label=’Choice #1’&gt;Choice #1&lt;/option&gt;
  		&lt;option value="choice2" aria-label=’Choice #2’&gt;Choice #2&lt;/option&gt;
	&lt;/select&gt;

	&lt;input type=”checkbox” checked  role=’checkbox’ aria-label=’Get a Newsletter Checkbox’ aria-check=’true’’&gt;Checkbox

  	&lt;input type="submit" value="Submit" role=’button’&gt;

&lt;/form&gt;
</pre><h2>Testing Your Implementation</h2><p>With all of our implementations in place, we now need to check that they are working correctly. To do this, it’s easiest to use an existing accessibility tool such as <a href="https://chrome.google.com/webstore/detail/accessibility-developer-t/fpkknkljclfencbdbgkenhalefipecmb?hl=en">Google’s Accessibility Developer Tools</a> or <a href="https://www.ibm.com/able/dynamic-assessment-plug-in.html">IBM’s Dynamic Assistant Plugin</a>.</p><p>Both of these integrate with Chrome’s developer tools to allow for real-time inspection of your site’s accessibility. W3C also maintains a <a href="https://www.w3.org/WAI/ER/tools/" target="_self">larger list of tools for accessibility</a>.</p><h2>Making the Web More Accessible</h2><p>Our site wireframe now has ARIA! While there is still a lot of ARIA left to explore, you now have enough knowledge to make a large portion of the sites you work on more accessible. Beyond that, your site is also better prepared to handle any number of new internet-traversing technologies that might arise.</p><p>Is there another aspect of ARIA that you’d like us to explore? Have questions about this article? Feel free to add them in the comments below!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-09-18T12:39:51+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[20 Best jQuery Image Sliders]]></title>
      <link>//shineyrock.com/blog/read/20-best-jquery-image-sliders</link>
      <guid>https://shineyrock.com/blog/read/20-best-jquery-image-sliders#When:10:54:54Z</guid>
      <description><![CDATA[<p>Let's be honest—sliders are fun. A little bit of movement can really bring a page to life.<br></p><p>Sliders—also known as "carousels" or "image sliders"—are interactive elements for showing images or other media in a web page. </p><p>Take a look at these 20 useful <a href="https://codecanyon.net/category/javascript/sliders" rel="external" target="_blank">jQuery sliders</a> from Envato Market and you'll see there's more to sliders than you might have imagined.</p><h2>1. <a href="https://codecanyon.net/item/royalslider-touchenabled-jquery-image-gallery/461126" rel="external" target="_blank">RoyalSlider</a>
</h2><p>Having a touch-friendly and responsive slider for your website is more important now than ever before, and RoyalSlider is both.</p><p>Developed with HTML5 and CSS3 best practices, it's a solid choice.<br></p><figure class="post_image"><img alt="RoyalSlider  Touch-Enabled jQuery Image Gallery " data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/royal%20slider-image.jpg"></figure><p>Here are a few of the other <em>royally</em> cool features:</p><ul>
<li>SEO optimized</li>
<li>highly configurable<br>
</li>
<li>over 10 starter templates</li>
<li>includes fallbacks for CSS3 transitions</li>
<li>and more</li>
</ul><p>I think the best feature is the modular architecture that gives devs the option to exclude what they don't need from the main JS file, keeping things as lean as possible.<br></p><p><a href="https://codecanyon.net/item/royalslider-touchenabled-jquery-image-gallery/461126" rel="external" target="_blank">The RoyalSlider</a> is a solid JavaScript slider that should be a nice addition to any web dev's toolbox.<br></p><h2>2. <a href="https://codecanyon.net/item/slider-revolution-responsive-jquery-plugin/2580848" rel="external" target="_blank">Slider Revolution</a>
</h2><p>It's not easy to be "revolutionary" in the slider space. There are only so many options you can make available when it comes to sliders, but the Slider Revolution does a great job trying.</p><p>When it comes to jQuery sliders, this one delivers on just about everything you'll want.<br></p><figure class="post_image"><img alt="Slider Revolution Responsive jQuery Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/slider%20revolution-image.jpg"></figure><p>The list of features for this slider is <em>long</em>, so I'll just hit the high points:</p><ul>
<li>parallax effects and custom animations<br>
</li>
<li>SEO optimized and lazy loading options</li>
<li>add unlimited layers and slides with link options<br>
</li>
<li>includes "ready to use" styles <em>and</em> is highly customizable</li>
<li>and much more<br>
</li>
</ul><p>The ability to drop in an image, video player embed, and social media source makes <a href="https://codecanyon.net/item/slider-revolution-responsive-jquery-plugin/2580848" rel="external" target="_blank">Slider Revolution</a> one of the most flexible and customizable options you'll find.<br></p><h2>3. <a href="https://codecanyon.net/item/layerslider-responsive-jquery-slider-plugin/922100" rel="external" target="_blank">LayerSlider</a>
</h2><p>The name doesn't do this jQuery slider justice. Its 200+ 2D and 3D slide transitions will turn some heads.</p><figure class="post_image"><img alt="LayerSlider Responsive jQuery Slider Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/layerslider-image.jpg"></figure><p>Some of the notable features include:</p><ul>
<li>skin design PSD template included</li>
<li>13 skins and 3 navigation types</li>
<li>add a fixed image over the slider<br>
</li>
<li>SEO friendly and lazy load images<br>
</li>
<li>hardware-accelerated CSS3 transitions with jQuery fallback</li>
<li>and more<br>
</li>
</ul><p>Like the previous slider, you can drop in just about any content—even HTML5 self-hosted multimedia content.<br></p><p>The <a href="https://codecanyon.net/item/layerslider-responsive-jquery-slider-plugin/922100" rel="external" target="_blank">LayerSlider</a> brings a lot of action to the slider space and is downright handsome.<br></p><h2>4. <a href="https://codecanyon.net/item/jquery-banner-rotator-slideshow/109046" rel="external" target="_blank">jQuery Banner Rotator / Slideshow</a>
</h2><p>The jQuery Banner Rotator / Slideshow slider is a straightforward solution. It's simple without sacrificing essentials.</p><figure class="post_image"><img alt="jQuery Banner Rotator  Slideshow" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/jquery%20banner%20rotator-image.jpg"></figure><p>It includes:</p><ul>
<li>tooltips, text descriptions, etc.<br>
</li>
<li>thumbnail and component viewing options</li>
<li>timer and delay options on a global or per-slider basis<br>
</li>
<li>multiple transitions for all slides or different for each one</li>
<li>more</li>
</ul><p>While the <a href="https://codecanyon.net/item/jquery-banner-rotator-slideshow/109046" rel="external" target="_blank">jQuery Banner Rotator / Slideshow</a> is basic compared to other jQuery sliders, it should not be overlooked if you want a simple, clean interface.<br></p><h2>5. <a href="https://codecanyon.net/item/all-in-one-slider-responsive-jquery-slider-plugin/1534434" rel="external" target="_blank">All In One Slider Responsive jQuery Slider Plugin</a>
</h2><p>Every slider comes to market with its own unique perspective and provides a solution to whatever slider niche is being targeted.</p><p>But not this one.</p><p>The All In One Slider Responsive jQuery Slider Plugin is... well... <em>all in one</em>.<br></p><figure class="post_image"><img alt="All In One Slider Responsive Jquery Slider Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/all%20in%20one%20slider-image.jpg"></figure><p>I think most web devs and designers have a go-to solution, but at the same time are always on the lookout for something new.</p><p>This just might be that something new as it includes:</p><ul>
<li>banner rotator</li>
<li>thumbnails banner</li>
<li>banner with playlist</li>
<li>content slider</li>
<li>carousel</li>
</ul><p>And all of these slider styles include most—if not all—of the features needed in a jQuery slider.<br></p><p>Will the <a href="https://codecanyon.net/item/all-in-one-slider-responsive-jquery-slider-plugin/1534434" rel="external" target="_blank">All In One Slider Responsive jQuery Slider Plugin</a> be <em>your</em> all-in-one slider solution?<br></p><h2>6. <a href="https://codecanyon.net/item/unoslider-responsive-touch-enabled-slider/657866" rel="external" target="_blank">UnoSlider</a>
</h2><p>If your slider isn't touch-enabled and responsive, you're not doing it right.</p><p>The UnoSlider does it right.</p><figure class="post_image"><img alt="UnoSlider - Responsive Touch Enabled Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/unoslider-image.JPG"></figure><p>This slider finds its sweet spot between simple and feature rich.</p><p>Features include:</p><ul>
<li>easily themeable</li>
<li>12 pre-built themes</li>
<li>40 present transitions<br>
</li>
<li>IE6+ support (because it's still out there!)</li>
<li>and more</li>
</ul><p>The feature set leans more towards design and style, making the <a href="https://codecanyon.net/item/unoslider-responsive-touch-enabled-slider/657866" rel="external" target="_blank">UnoSlider</a> a great content slider to theme.<br></p><h2>7. <a href="https://codecanyon.net/item/master-slider-jquery-touch-swipe-slider/6337671" rel="external" target="_blank">Master Slider</a>
</h2><p>Looking for one jQuery slider to rule them all?</p><p>Try the Master Slider on for size...<br></p><figure class="post_image"><img alt="Master Slider - jQuery Touch Swipe Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/master%20slider%20-%20image.JPG"></figure><p>When it comes to good looks, this one is in the upper echelon:</p><ul>
<li>smart preloading</li>
<li>over 25 templates</li>
<li>hardware-accelerated transitions</li>
<li>supports touch navigation and swipe gestures</li>
<li>and much more<br>
</li>
</ul><p>The interactive transitions, animated layers, and hotspots will really catch your eye.<br></p><p>The <a href="https://codecanyon.net/item/master-slider-jquery-touch-swipe-slider/6337671" rel="external" target="_blank">Master Slider</a> collection is a masterpiece.<br></p><h2>8. <a href="https://codecanyon.net/item/touchcarousel-jquery-content-scroller-and-slider/896401" rel="external" target="_blank">TouchCarousel</a>
</h2><p>TouchCarousel touts "free support and upgrades", but there's a lot more to this lightweight carousel-style jQuery slider.<br></p><figure class="post_image"><img alt="TouchCarousel - jQuery Content Scroller and Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/touch%20carousel%20image.JPG"></figure><p>With "touch" in the name, it's obviously fully responsive and supports touch navigation.</p><p>Other features include:</p><ul>
<li>SEO friendly<br>
</li>
<li>smart autoplay</li>
<li>hardware-accelerated CSS3 transitions</li>
<li>customizable UI with four Photoshop skins</li>
<li>and more</li>
</ul><p>However, <a href="https://codecanyon.net/item/touchcarousel-jquery-content-scroller-and-slider/896401" rel="external" target="_blank">TouchCarousel</a> takes mobile to a whole new level with its unique physics-based scrolling.<br></p><h2>9. <a href="https://codecanyon.net/item/advanced-slider-jquery-xml-slider/132618" rel="external" target="_blank">Advanced Slider</a>
</h2><p>A jQuery slider isn't just for the web. It can also be useful when integrated into applications, just like you can do with the Advanced Slider.</p><figure class="post_image"><img alt="Advanced Slider - jQuery XML Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/advanced%20sllider%20image.JPG"></figure><p>Using HTML markup or XML, this advanced slider packs a lot of punch:</p><ul>
<li>animated layers and smart video</li>
<li>100+ transitions and 150+ customizable properties</li>
<li>15 slider skins, 7 scrollbar skins, and built-in lightbox support</li>
<li>keyboard navigation, touchscreen support, and fully customizable interface</li>
<li>and much, much more</li>
</ul><p>The best feature, however, has got to be the <a href="https://codecanyon.net/item/advanced-slider-jquery-xml-slider/132618" rel="external" target="_blank">Advanced Slider</a> API—making it the perfect slider solution for your application.<br></p><h2>10. <a href="https://codecanyon.net/item/jquery-slider-zoom-inout-effect-fully-responsive/2457203" rel="external" target="_blank">jQuery Slider Zoom In/Out Effect Fully Responsive</a>
</h2><p>This is one of those jQuery sliders that makes you visit the demo before you start reading about the features, because you want to know what the heck "zoom in/out effect" even means.</p><p>Think screensaver.<br></p><figure class="post_image"><img alt="jquery Slider Zoom InOut Effect Fully Responsive" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/sliders%20zoom%20in%20out%20image.JPG"></figure><p>While the effect is fairly slight, the zoom effect in a slider adds a nice touch in a world wide web full of static image sliders.</p><p>This slick slider's features include:</p><ul>
<li>CSS3 layer transitions</li>
<li>exit animation parameters for layers</li>
<li>fixed, full width, and fullscreen options</li>
<li>CSS and HTML formatted animated text</li>
<li>and more<br>
</li>
</ul><p>While most sliders try to deliver many effects in one package, <a href="https://codecanyon.net/item/jquery-slider-zoom-inout-effect-fully-responsive/2457203" rel="external" target="_blank">the jQuery Slider Zoom In/Out Effect Fully Responsive</a> slider delivers the Ken Burns effect and delivers it well.<br></p><h2>11. <a href="https://codecanyon.net/item/content-timeline-jqueryhtml5css3-plugin/2617834" rel="external" target="_blank">Content Timeline</a>
</h2><p>Content Timeline is a beautifully designed and powerful slider—a perfect solution for timelines.</p><p>From desktop to mobile, timelines have never looked so good.</p><figure class="post_image"><img alt="Content Timeline" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31397/image/011.jpg"></figure><p>It's simple. Take your content, sort it by the date, call the function, and that's it!</p><p>Features include:</p><ul>
<li>powerful and lightweight</li>
<li>11 customizable settings</li>
<li>fully interactive, flexible, and intuitive</li>
<li>full responsive and built for mobile and desktop</li>
<li>and more</li>
</ul><p>With seven embedded script control methods and included easing effects, <a href="https://codecanyon.net/item/content-timeline-jqueryhtml5css3-plugin/2617834" rel="external" target="_blank">Content Timeline</a> is one of the best timeline sliders you'll find.</p><h2>12. <a href="https://codecanyon.net/item/sexy-slider/87148" rel="external" target="_blank">Sexy Slider</a>
</h2><p>The Sexy Slider isn't nearly as sexy as it used to be, but it has aged well, making it a trustworthy solution.<br></p><figure class="post_image"><img alt="Sexy Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/sexy%20slider%20image.JPG"></figure><p>It's not very impressive at first blush, but with some fine-tuning, this flexible jQuery slider can be configured to fit your design perfectly.</p><p>It includes:</p><ul>
<li>auto slide<br>
</li>
<li>image captions</li>
<li>continuous sliding<br>
</li>
<li>6 transition effects</li>
<li>and more<br>
</li>
</ul><p><a href="https://codecanyon.net/item/sexy-slider/87148" rel="external" target="_blank">Sexy Slider</a> is just waiting for you to unlock its power and discover its full potential.<br></p><h2>13. <a href="https://codecanyon.net/item/master-slider-jquery-touch-swipe-slider/6337671" rel="external" target="_blank">Master Slider jQuery Slider Plugin with Visual Builder</a>
</h2><p>The Master Slider jQuery Slider Plugin with Visual Builder makes building a slider a snap—without sacrificing good looks.</p><p>This premium image and content slider offers some really nice hardware-accelerated transitions that will surely catch your eye.</p><figure class="post_image"><img alt="Master Slider jQuery Slider Plugin with Visual Builder" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31397/image/013.jpg"></figure><p>Features include:</p><ul>
<li>smart preloading</li>
<li>built for both mobile and desktop</li>
<li>over 80 ready-to-use sample sliders</li>
<li>masked layer transitions, layer actions, and overlay layers</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/master-slider-jquery-touch-swipe-slider/6337671" rel="external" target="_blank">Master Slider jQuery Slider Plugin with Visual Builder</a> is fully customizable, SEO friendly, and also supports videos. And of course, the most obvious: a visual builder.<br></p><h2>14. <a href="https://codecanyon.net/item/translucent-responsive-banner-rotator-slider/801607" rel="external" target="_blank">Translucent</a>
</h2><p>Most jQuery slider plugins include some sort of design chrome, and while you can configure it to your liking, sometimes you just want to keep everything contained within the slide itself.</p><p>Enter the Translucent slider.</p><figure class="post_image"><img alt="Translucent - Responsive Banner Rotator  Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/translucent%20responsive%20banner%20-%20image.JPG"></figure><p>There are a lot of presets, so all you'll need to do is configure it and go!</p><p>Features include:</p><ul>
<li>6 style variations</li>
<li>4 transition effects</li>
<li>2 touch swipe transitions</li>
<li>configurable buttons and captions</li>
<li>and more<br>
</li>
</ul><p>Like others, it's touch-friendly, responsive, and leverages hardware acceleration.<br></p><p><a href="https://codecanyon.net/item/translucent-responsive-banner-rotator-slider/801607" rel="external" target="_blank">Translucent</a> is a minimal slider design that does a great job pushing the content to the front.<br></p><h2>15. <a href="https://codecanyon.net/item/unleash-jquery-responsive-accordion-slider/1851823" rel="external" target="_blank">Unleash</a>
</h2><p>Looking for an accordion slider? Then Unleash is what you want!</p><p>Packed with features, this beautiful slider is one of the best accordion sliders you'll find.</p><figure class="post_image"><img alt="Unleash" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31397/image/015.jpg"></figure><p>Features include:</p><ul>
<li>HTML5 video support for desktop</li>
<li>hardware-accelerated animations</li>
<li>fully responsive</li>
<li>supports touch</li>
<li>and more</li>
</ul><p>Unleash the <a href="https://codecanyon.net/item/unleash-jquery-responsive-accordion-slider/1851823" rel="external" target="_blank">Unleash</a> jQuery responsive accordion slider.</p><h2>16. <a href="https://codecanyon.net/item/aviaslider-jquery-slideshow/105090" rel="external" target="_blank">AviaSlider</a>
</h2><p>AviaSlider is another good-looking slider that includes some really nice effects.</p><p>This easy-to-use jQuery slideshow plugin includes eight predefined transitions, but you can create more.</p><figure class="post_image"><img alt="AviaSlider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31397/image/016.jpg"></figure><p>Some other features include:</p><ul>
<li>includes image preloader</li>
<li>autoplay stops when users interact</li>
<li>works with prettyPhoto Lightbox out of the box</li>
<li>and more</li>
</ul><p><a href="https://codecanyon.net/item/aviaslider-jquery-slideshow/105090" rel="external" target="_blank">AviaSlider</a> packs a punch, despite the packed version weighing in at only 8kb.</p><h2>17. <a href="https://codecanyon.net/item/jquery-slider-evolution/270714" rel="external" target="_blank">Slider Evolution</a>
</h2><p>Start a slider revolution with Slider Evolution! Now you can easily create JavaScript sliders with some of the best effects.</p><figure class="post_image"><img alt="Slider Evolution" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/31397/image/017.jpg"></figure><p>With <a href="https://codecanyon.net/item/jquery-slider-evolution/270714" rel="external" target="_blank">Slider Evolution</a>, you can create an unlimited number of sliders, each with customized settings, to be placed anywhere on your website.</p><h2>18. <a href="https://codecanyon.net/item/accordionza-jquery-plugin/101685" rel="external" target="_blank">Accordionza</a><br>
</h2><p>jQuery sliders don't get much lighter than this.</p><p>Using only 3kb to load, Accordionza is a super lightweight accordion slider option.<br></p><figure class="post_image"><img alt="Accordionza - jQuery Plugin " data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/according-plgin-image.jpg"></figure><p>And if you don't like the three included styles, you can tweak the HTML and CSS of this flexible accordion.</p><p>Features include:</p><ul>
<li>keyboard navigation</li>
<li>easily configure effects and controls<br>
</li>
<li>progressive enhancement (viewable without JavaScript enabled)</li>
<li>and more</li>
</ul><p>Keep in mind that <a href="https://codecanyon.net/item/accordionza-jquery-plugin/101685" rel="external" target="_blank">Accordionza</a> can display many kinds of mixed content, making it an excellent choice for a flexible, go-to accordion slider option.<br></p><h2>19. <a href="https://codecanyon.net/item/mightyslider-responsive-multipurpose-slider/5898508" rel="external" target="_blank">mightySlider</a>
</h2><p>The mightySlider is mighty indeed.</p><p>You can use it not only as a simple image slider, but also as a full one-directional slider with item-based navigation—making for a nice one-page website design.<br></p><figure class="post_image"><img alt="mightySlider - Responsive Multipurpose Slider" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/mightyslider%20image.JPG"></figure><p>You'll find plenty of options under the hood:</p><ul>
<li>keyboard, mouse, and touch support</li>
<li>hardware-accelerated CSS3 transitions</li>
<li>clean, valid markup and SEO optimized</li>
<li>unlimited slides, caption layers, and caption effects</li>
<li>and much more</li>
</ul><p>The API is powerful and developer-friendly, adding to the many ways it can be used.<br></p><p>With its clean and well-commented code, the <a href="https://codecanyon.net/item/mightyslider-responsive-multipurpose-slider/5898508" rel="external" target="_blank">mightySlider</a> is an excellent, forward-thinking jQuery slider.</p><h2>20. <a href="https://codecanyon.net/item/parallax-slider-responsive-jquery-plugin/3217681" rel="external" target="_blank">Parallax Slider</a>
</h2><p>The Parallax Slider works like the <a href="https://codecanyon.net/item/jquery-responsive-onebyone-slider-plugin/684613" rel="external" target="_blank">jQuery Responsive OneByOne Slider Plugin</a>, allowing you to animate each layer separately within a particular slide.</p><p>You can do this with multiple slides, or even just one slide, adding some compelling parallax animation to your website.<br></p><figure class="post_image"><img alt="Parallax Slider - Responsive jQuery Plugin" data-src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25960/image/parallax%20effect%20image.JPG"></figure><p>This comes with four different types of sliders, all offering the same animated, parallax effect.</p><p>Like many other jQuery sliders, it also includes:</p><ul>
<li>fully customizable<br>
</li>
<li>touchscreen support</li>
<li>fully responsive and unlimited layers</li>
<li>autoplay, loop, height &amp; width, and timer parameters</li>
<li>and more<br>
</li>
</ul><p>Animated layers are not limited to text and images either. You can also include YouTube, Vimeo, and HTML5 video.<br></p><p><a href="https://codecanyon.net/item/parallax-slider-responsive-jquery-plugin/3217681" rel="external" target="_blank">The Parallax Slider</a> is another fine example of how Flash-like effects can be executed better than Flash—and be supported across <em>all</em> devices.<br></p><h2>Conclusion<br>
</h2><p>It's interesting to see how the jQuery slider has evolved from something that just transitioned from one image to the next, into a broad range of creative tools. We see sliders that are 3D, parallax, full page, and are fully responsive and viewable on the desktop or smartphone.</p><p>If you didn't find a jQuery slider you liked in this list, you could always take an Envato Tuts+ <a href="http://code.tutsplus.com/categories/jquery" rel="external" target="_blank">jQuery Code Tutorial</a> and develop something completely new and unique. Otherwise, dig through the many other great jQuery sliders on <a href="https://codecanyon.net/category/javascript/sliders">Envato Market</a>—there are plenty to choose from.<br></p><p>What's your favorite jQuery slider and why?</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-09-13T10:54:54+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Site Accessibility: Getting Started With ARIA]]></title>
      <link>//shineyrock.com/blog/read/site-accessibility-getting-started-with-aria</link>
      <guid>https://shineyrock.com/blog/read/site-accessibility-getting-started-with-aria#When:19:37:20Z</guid>
      <description><![CDATA[<figure class="final-product final-product--image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/1526/posts/31707/final_image/zenified-code%20(4).png" alt="Final product image"><figcaption>What You'll Be Creating</figcaption></figure><p>Using standard HTML alone, modern web apps can lock out users with accessibility needs. </p><p>HTML is the predominant markup language online, being <a href="https://w3techs.com/technologies/details/ml-html/all/all" target="_self">used by nearly 83% of existing websites</a>. While there have been some changes in the 25 years since its creation, even newer iterations, such as HTML5 and AMP, leave a lot to be desired—especially when it comes to accessibility. That's where ARIA comes in. In this tutorial, I'm going to talk about what ARIA is, why it’s useful for your site, and a couple of ways it can be added to your site.<br></p><h2>What Is ARIA?</h2><p>ARIA, also known as WAI-ARIA, stands for The Web Accessibility Initiative's Accessible Rich Internet Applications. The full specifications <a href="https://www.w3.org/TR/wai-aria/">document can be found here</a>. Note that the full spec document is fairly dense, so it might be a good idea to start by reading this post and checking out some of the other resources I link below. </p><p>The main purpose of ARIA is to allow for advanced semantic structure within HTML as a counterpart to HTML's syntax-heavy nature. In other words, HTML tells the browser where things go, and ARIA tells it how they interact.</p><h3>Who Is Responsible for ARIA?</h3><p>ARIA is a project hosted by the W3C (World Wide Web Consortium). The project adheres to the same standards for updating and editing as their other initiatives. They also provide a GitHub repository of several tests you can run to make sure your page is running properly.</p><h3>What’s Wrong With My Current Site Markup?</h3><p>Most sites that have a structured, well-thought-out design do well enough when it comes to adaptive technologies (i.e. screen readers). However, having a user being able to figure out how to use your site and having it be easy to use are different things. <a href="https://nfb.org/blindness-statistics" target="_self">Low-vision users make up almost 2% of the population</a>, and for them, the difference can mean saving a significant amount of time and detective work when trying to perform basic online tasks. It can be the difference between offering visitors a spectacular experience and providing a maze for them to navigate.</p><p>Beyond traditional means of accessibility, ARIA is finding its way into technologies that provide new takes on standard interaction. An increasing number of voice systems, aggregated browsing (like car-embedded computers, for example), and other innovations are putting ARIA to use, taking advantage of its increased semantic capabilities.</p><h3>Okay, But What Does It Do?</h3><p>Overall, ARIA connects elements together in a semantically meaningful way. It provides the user with additional meaning regarding interaction. Here are some real-world examples of how it might be used:</p><ol>
<li>Associating non-nested elements: With plain HTML, the user's browser can only see relations based upon parent/child relationships. In some situations, however, we may want a series of buttons parallel to the content in the HTML hierarchy. With ARIA, we can define what type of controller each button is, and what element it controls elsewhere in the document.</li>
<li>Declare interactive elements: While HTML provides a handful of elements for interactivity, ARIA defines dozens more, allowing for more granular descriptions of what each element of your page can do. In addition, these can be assigned to HTML tags that wouldn't be commonly used for such a purpose but might make sense in your specific case. For example, you might use the <code class="inline">&lt;li&gt;</code> tag for a series of checkboxes that you prefer not to be composed of form elements.</li>
<li>Live area update notifications: Another feature that ARIA provides is the definition of a "live" content area. When a content area is defined in this way, ARIA will notify the user whenever content within that element changes. This can be useful when making sure low-vision users know that something has changed on your page.</li>
</ol><h2>Adding ARIA to Your Web Pages</h2><p>We've talked about what ARIA can do, so now let's look at some of the most common examples. We'll start each section with a brief statement of the goal we are looking to accomplish, followed by a code sample of how to accomplish it.</p><h3>Creating Alternative Labeling With ARIA</h3><p>When it comes to alternative labeling, most developers are familiar with the <code class="inline">alt</code> attribute commonly used on <code class="inline">&lt;img&gt;</code> tags. This tag serves an important purpose: describing the image it is attached to for increased accessibility (or as a common SEO tactic, depending on your perspective). </p><p>ARIA provides a similar attribute called <code class="inline">aria-label</code> that can be attached to any HTML element, improving accessibility for not only images, but site sections, form controls, and more. Here's an example of what that looks like:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- adding alternative labeling to an image (with non-visible text) --&gt;

&lt;img aria-label="Descriptive image text" src="#" /&gt;


&lt;!-- adding alternative labeling to an image (with visible text) --&gt;

&lt;img aria-labelledby="image-text-desc" src="#" /&gt;

&lt;div id="image-text-desc"&gt;A text description of the image, visible on the screen&lt;/div&gt;</pre><h3>Defining ARIA-Specific UI Elements</h3><p>HTML already provides a number of elements for the creation of web pages, but their main focus is typically to define an area generically and present the user with the site's structure. ARIA provides a few dozen additional elements that focus more heavily on how an element is used, such as a timer, tooltip, or progress bar.</p><p>An example use here is a tooltip that you might find on a form. There are a number of ways to create one, ranging from a link that triggers some JavaScript to an element that creates a modal when hovered over. The missing piece here is that despite how it might work for sighted users, low-vision users might not ever even know that the tooltip exists.</p><p>You can define a tooltip using ARIA like so:</p><pre class="brush: html noskimlinks noskimwords">&lt;!-- Defining a question mark image as a tooltip UI element --&gt;

&lt;img src=”questionmark.png” role=”tooltip” /&gt;</pre><h4>Available ARIA Definitions</h4><p>To expand on these UI elements, here's a brief list of some of the most interesting "roles" that can be defined. The full listing is available in the referenced specification document.</p><ul>
<li><code class="inline">search</code></li>
<li><code class="inline">banner</code></li>
<li><code class="inline">presentation</code></li>
<li><code class="inline">toolbar</code></li>
<li><code class="inline">status</code></li>
<li><code class="inline">menuitem</code></li>
<li><code class="inline">log</code></li>
<li><code class="inline">dialog</code></li>
<li><code class="inline">link</code></li>
</ul><h3>Establishing Relationships Outside of the Parent/Child Structure</h3><p>Now let's expand on a point that we talked about earlier: the forced structure of HTML. While the parent/child relationship is good for deciding how things should be ordered, it falls short when more meaningful connections are needed. An example of this is sibling elements. Some libraries have added the ability for siblings or other forms of element relationships to be traversed, but this typically happens in JavaScript or another language outside of the markup.</p><p>ARIA gives us the ability to define these relations right in the markup, making it easier to group menu items, create non-standard navigation, and attach controls to element areas that would difficult to do normally.</p><p>Let's take a look at how we might use this to connect some controls to a content area:</p><pre class="brush: html noskimlinks noskimwords">&lt;img src=”nextbutton.jpg” role=”button” aria-controls=”tutorial” /&gt;

&lt;div id=”tutorial”&gt;
    Your tutorial's content
&lt;/div&gt;</pre><p>This snippet says that the <strong>nextbutton.jpg</strong> image is a button, which is a control for the tutorial <code class="inline">div</code> below.</p><h3>Creating "Live" Elements in ARIA</h3><p>The last feature of ARIA that we'll cover here is the <code class="inline">aria-live</code> attribute. While most of the other features of ARIA here deal with semantic connections, this one deals directly with the idea of giving users notifications of content or element changes.</p><p>For many with low vision, it might not be immediately clear that their interaction with your site caused a change elsewhere on the page. This can be especially true for subtle changes, such as small blurbs of text that may change but remain relatively the same length. By using this attribute, every time the content is changed within the defined element, your user will be notified.</p><p>We can add this attribute to an element like this:</p><pre class="brush: html noskimlinks noskimwords">&lt;div aria-live=”true”&gt;
    Content that updates, ie. guided directions
&lt;/div&gt;</pre><h2>Making the Web a Better Place for All Users</h2><p>With a little over <a href="https://nfb.org/blindness-statistics" target="_self">2% of the US population carrying some form of low-vision label</a>, improving the accessibility of your site can increase your site's reach dramatically. For those with sites reaching multiple countries, that number becomes even larger. On top of accessibility, ARIA also provides a way for non-browser interfaces to utilize your site, with a number of voice-based devices already providing support.</p><p>Implementing ARIA helps your users and can help your traffic, so get to it!</p><p>Did I miss any details, or do you have additional questions? Leave a comment below!</p><p>If you want to dive into the full ARIA documentation or try the official testing tool, check out the links below:</p><ul>
<li><a href="https://www.w3.org/TR/wai-aria-practices-1.1/" target="_self">ARIA Authoring Practices</a></li>
<li><a href="https://www.w3.org/TR/wai-aria/" target="_self">Full ARIA Specification Document</a></li>
<li><a href="https://w3c.github.io/test-results/wai-aria/" target="_self">Testing Tool Example Report</a></li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-09-04T19:37:20+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How Secure Are Your JavaScript Open-Source Dependencies?]]></title>
      <link>//shineyrock.com/blog/read/how-secure-are-your-javascript-open-source-dependencies</link>
      <guid>https://shineyrock.com/blog/read/how-secure-are-your-javascript-open-source-dependencies#When:14:00:00Z</guid>
      <description><![CDATA[<p>Modern-day JavaScript developers love npm. GitHub and the npm registry are a developer’s first choice place for finding a particular package. Open-source modules add to the productivity and efficiency by providing developers with a host of functionalities that you can reuse in your project. It is fair to say that if it were not for these open-source packages, most of the frameworks today would not exist in their current form.<br></p><p>A full-fledged enterprise-level application, for instance, might rely on hundreds if not thousands of packages. The usual dependencies include direct dependencies, development dependencies, bundled dependencies, production dependencies, and optional dependencies. That’s great because everyone’s getting the best out of the open-source ecosystem.</p><p>However, one of the factors that get overlooked is the amount of risk involved. Although these third-party modules are particularly useful in their domain, they also introduce some security risks into your application.</p><h2>Are Open-Source Libraries Vulnerable?</h2><p>OSS dependencies are indeed vulnerable to exploits and compromises. Let's have a look at a few examples: </p><p>A <a href="https://eslint.org/blog/2018/07/postmortem-for-malicious-package-publishes" rel="external" target="_blank">vulnerability was discovered recently </a>in a package called eslint-scope which is a dependency of several popular JavaScript packages such as babel-eslint and webpack. The account of the package maintainer was compromised, and the hackers added some malicious code into it. Fortunately, someone found out the exploit soon enough that the damage was reportedly limited to a few users. </p><p>Moment.js, which is one of the most-used libraries for parsing and displaying dates in JavaScript, was recently found to have a vulnerability with a <a href="https://github.com/moment/moment/issues/4163" rel="external" target="_blank">severity score of 7.5</a>. The exploit made it vulnerable to ReDoS attacks. Patches were quickly released, and they were able to fix the issue rather quickly.</p><p>But that's not all. A lot of new exploits get unearthed every week. Some of them get disclosed to the public, but others make headlines only after a serious breach. </p><p>So how do we mitigate these risks? In this article, I'll explain some of the industry-standard best practices that you can use to secure your open-source dependencies.</p><h2>
<span class="sectionnum">1.</span> Keep Track of Your Application’s Dependencies</h2><p>Logically speaking, as the number of dependencies increase, the risk of ending up with a vulnerable package can also increase. This holds true equally for direct and indirect dependencies. Although there’s no reason that you should stop using open-source packages, it’s always a good idea to keep track of them.</p><p>These dependencies are easily discoverable and can be as simple as running <code class="inline">npm ls</code> in the root directory of your application. You can use the <code class="inline">–prod</code> argument which displays all production dependencies and the <code class="inline">–long</code> argument for a summary of each package description. </p><p>Furthermore, you can use a service to automate the dependency management process that offers real-time monitoring and automatic update testing for your dependencies. Some of the familiar tools include <a href="https://github.com/greenkeeperio/greenkeeper" target="_self">GreenKeeper</a>, <a href="https://github.com/librariesio" rel="external" target="_blank">Libraries.io</a>, etc. These tools collate a list of the dependencies that you are currently using and track relevant information regarding them.</p><h2>
<span class="sectionnum">2.</span> Get Rid of Packages That You Do Not Need</h2><p>With the passage of time and changes in your code, it is likely that you'll stop using some packages altogether and instead add in new ones. However, developers tend not to remove old packages as they go along.</p><p>Over time, your project might accumulate a lot of unused dependencies. Although this is not a direct security risk, these dependencies almost certainly add to your project’s attack surface and lead to unnecessary clutter in the code. An attacker may be able to find a loophole by loading an old but installed package that has a higher vulnerability quotient, thereby increasing the potential damage it can cause.</p><p>How do you check for such unused dependencies? You can do this with the help of the depcheck tool. Depcheck scans your entire code for <code class="inline">requires</code> and <code class="inline">import</code> commands. It then correlates these commands with either installed packages or those mentioned in your <strong>package.json</strong> and provides you with a report. The command can also be modified using different command flags, thereby making it simpler to automate the checking of unused dependencies.</p><p>Install depcheck with:</p><pre class="brush: bash noskimlinks noskimwords">npm install -g depcheck</pre><h2>
<span class="sectionnum">3.</span> Find and Fix Crucial Security Vulnerabilities</h2><p>Almost all of the points discussed above are primarily concerned with the potential problems that you might encounter. But what about the dependencies that you’re using right now?</p><p>Based on a recent study, almost <a href="https://blog.risingstack.com/controlling-node-js-security-risk-npm-dependencies/" rel="external" target="_blank">15% of current packages</a> include a known vulnerability, either in the components or dependencies. However, the good news is that there are many tools that you can use to analyze your code and find open-source security risks within your project.</p><p>The most convenient tool is npm’s <code class="inline">npm audit</code>. Audit is a script that was released with npm’s version 6. Node Security Platform initially developed npm audit, and npm registry later acquired it. If you’re curious to know what npm audit is all about, here’s a quote from the official blog:</p><blockquote>A security audit is an assessment of package dependencies for security vulnerabilities. Security audits help you protect your package's users by enabling you to find and fix known vulnerabilities in dependencies. The npm audit command submits a description of the dependencies configured in your package to your default registry and asks for a report of known vulnerabilities. </blockquote><p>The report generated usually comprises of the following details: the affected package name, vulnerability severity and description, path, and other information, and, if available, commands to apply patches to resolve vulnerabilities. You can even get the audit report in JSON by running <code class="inline">npm audit --json</code>.</p><p>Apart from that, npm also offers assistance on how to act based on the report. You can use <code class="inline">npm audit fix</code> to fix issues that have already been found. These fixes are commonly accomplished using guided upgrades or via open-source patches. </p><p>Feel free to refer <a href="https://docs.npmjs.com/cli/audit" rel="external" target="_blank">npm’s documentatio</a>n for more information.</p><h2>
<span class="sectionnum">4.</span> Replace Expired Libraries With In-House Alternatives </h2><p>The concept of <a href="https://www.whitesourcesoftware.com/open-source-security/" rel="external" target="_blank">open-source security</a> is heavily reliant on the number of eyes that are watching over that particular library. Packages that are actively used are more closely watched. Therefore, there is a higher chance that the developer might have addressed all the known security issues in that particular package. </p><p>Let’s take an example. On GitHub, there are many JSON web token implementations that you can use with your Node.js library. However, the ones that are not in active development could have critical vulnerabilities. One such vulnerability, which was <a href="https://auth0.com/blog/critical-vulnerabilities-in-json-web-token-libraries/" rel="external" target="_blank">reported by Auth0</a>, lets anyone create their own "signed" tokens with whatever payload they want. </p><p>If a reasonably popular or well-used package had this flaw, the odds of a developer finding and patching the fault would be higher. But what about an inactive/abandoned project? We’ll talk about that in the next point.</p><h2>
<span class="sectionnum">5.</span> Always Choose a Library That’s in Active Development</h2><p>Perhaps the quickest and most efficient way to determine the activity of a specific package is to check its download rate on npm. You can find this in the <strong>Stats</strong> section of npm’s package page. It is also possible to extract these figures automatically using the<a href="https://github.com/npm/download-counts" target="_self"> npm stats API</a> or by browsing historic stats on <a href="https://npm-stat.com/" rel="external" target="_blank">npm-stat.com</a>. For packages with GitHub repositories, you should check out the commit history, the issue tracker, and any relevant pull requests for the library.</p><h2>
<span class="sectionnum">6.</span> Update the Dependencies Frequently</h2><p>There are many bugs, including a large number of security bugs that are continually unearthed and, in most cases, immediately patched. It is not uncommon to see recently reported vulnerabilities being fixed solely on the most recent branch/version of a given project.</p><p>For example, let's take the Regular Expression Denial of Service (ReDoS) vulnerability reported on the HMAC package ‘hawk’ in early 2016. This bug in hawk was quickly resolved, but only in the latest major version, 4.x. Older versions like 3.x were patched a lot later even though they were equally at risk. </p><p>Therefore, as a general rule, your dependencies are less likely to have any security bugs if they use the latest available version. </p><p>The easiest way to confirm if you’re using the latest version is by using the <code class="inline">npm outdated</code> command. This command supports the <code class="inline">-prod</code> flag to ignore any dev dependencies and <code class="inline">--json</code> to make automation simpler.</p><p>Regularly inspect the packages you use to verify their modification date. You can do this in two ways: via the npm UI, or by running <code class="inline">npm view &lt;package&gt; time.modified</code>.</p><h2>Conclusion</h2><p>The key to securing your application is to have a security-first culture from the start. In this post, we’ve covered some of the standard practices for improving the security of your JavaScript components. </p><ol>
<li>Use open-source dependencies that are in active development.<br>
</li>
<li>Update and monitor your components.</li>
<li>Review your code and write tests.</li>
<li>Remove unwanted dependencies or use alternatives.</li>
<li>Use security tools like <code class="inline">npm audit</code> to analyze your dependencies.</li>
</ol><p>If you have any thoughts about JavaScript security, feel free to share them in the comments.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-08-22T14:00:00+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[New Course: Secure Your WordPress Site With SSL]]></title>
      <link>//shineyrock.com/blog/read/new-course-secure-your-wordpress-site-with-ssl</link>
      <guid>https://shineyrock.com/blog/read/new-course-secure-your-wordpress-site-with-ssl#When:07:55:10Z</guid>
      <description><![CDATA[<p>These days, it's more important than ever for your WordPress site to use a SSL (Secure Sockets Layer) certificate, which encrypts the data between the client and the server. Browsers now mark sites as "secure" or "not secure", and using SSL can boost your search engine rankings. Plus, of course, there are the obvious security benefits.</p><p>In our new Coffee Break Course, <a href="https://code.tutsplus.com/courses/secure-your-wordpress-site-with-ssl?ec_promo=coffeebreak" target="_self">Secure Your WordPress Site With SSL</a>, Envato Tuts+ instructor <a href="https://tutsplus.com/authors/bilal-shahid?ec_promo=coffeebreak" target="_self">Bilal Shahid</a> will show you how to get and install free SSL certificates using Certbot and Let's Encrypt—a free and open certificate authority aiming to support a more secure and privacy-respecting web.</p><figure class="post_image"><a href="https://code.tutsplus.com/courses/secure-your-wordpress-site-with-ssl?ec_promo=coffeebreak" target="_self"><img alt="Lets Encrypt" data-src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31665/image/Lets-Encrypt.jpg"></a></figure><p>Watch the introduction below to find out more.</p><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_v88qibtljg videoFoam=true"> </div></div></div></figure><p>You can take our new Coffee Break Course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=coffeebreak" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 650,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-08-20T07:55:10+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Testing Components in React Using Jest and Enzyme]]></title>
      <link>//shineyrock.com/blog/read/testing-components-in-react-using-jest-and-enzyme</link>
      <guid>https://shineyrock.com/blog/read/testing-components-in-react-using-jest-and-enzyme#When:11:00:00Z</guid>
      <description><![CDATA[<p>This is the second part of the series on Testing Components in React. If you have prior experience with Jest, you can skip ahead and use the GitHub code as a starting point. </p><p>In the <a href="http://code.tutsplus.com/articles/testing-components-in-react-using-jest-part-one--cms-28934" rel="external">previous article</a>, we covered the basic principles and ideas behind test-driven development. We also set up the environment and the tools required for running tests in React. The toolset included Jest, ReactTestUtils, Enzyme, and react-test-renderer. </p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/testing-components-in-react-using-jest-the-basics--cms-28934"><img class="roundup-block__preview-image" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/28934/preview_image/ReactLogo-2.jpg"><div class="roundup-block__primary-category topic-code">React</div>
<div class="roundup-block__content-title">Testing Components in React Using Jest: The Basics</div>
<div class="roundup-block__author">Manjunath M</div></a></li></ul><p>We then wrote a couple of tests for a demo application using ReactTestUtils and discovered its shortcomings compared to a more robust library like Enzyme.</p><p>In this post, we'll get a deeper understanding of testing components in React by writing more practical and realistic tests. You can head to GitHub and <a href="https://github.com/tutsplus/testing-components-in-react-using-jest-the-basics/tree/part-two" rel="external" target="_blank">clone my repo</a> before getting started.<br></p><h2>Getting Started With the Enzyme API</h2><p>Enzyme.js is an open-source library maintained by Airbnb, and it's a great resource for React developers. It uses the ReactTestUtils API underneath, but unlike ReactTestUtils, Enzyme offers a high-level API and easy-to-understand syntax. Install Enzyme if you haven't already.</p><p>The Enzyme API exports three types of rendering options:</p><ol>
<li>shallow rendering</li>
<li>full DOM rendering</li>
<li>static rendering</li>
</ol><p><strong>Shallow rendering</strong> is used to render a particular component in isolation. The child components won't be rendered, and hence you won't be able to assert their behavior. If you're going to focus on unit tests, you'll love this. You can shallow render a component like this:</p><pre class="brush: javascript noskimlinks noskimwords">import { shallow }  from 'enzyme';
import ProductHeader from './ProductHeader';

// More concrete example below.
 const component = shallow(&lt;ProductHeader/&gt;);  </pre><p><strong>Full DOM rendering</strong> generates a virtual DOM of the component with the help of a library called jsdom. You can avail this feature by replacing the <code class="inline">shallow()</code> method with <code class="inline">mount()</code> in the above example. The obvious benefit is that you can render the child components also. If you want to test the behavior of a component with its children, you should be using this. </p><p><strong>Static rendering</strong> is used to render react components to static HTML. It's implemented using a library called Cheerio, and you can read more about it in <a href="https://airbnb.io/enzyme/docs/api/render.html">the docs</a>. </p><h2>Revisiting Our Previous Tests</h2><p>Here are the tests that we wrote in the last tutorial:</p><h4>src/components/__tests__/ProductHeader.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">import ReactTestUtils from 'react-dom/test-utils'; // ES6

describe('ProductHeader Component', () =&gt; {
    it('has an h2 tag', () =&gt; {

      const component = ReactTestUtils
                            .renderIntoDocument(&lt;ProductHeader/&gt;);
      var node = ReactTestUtils
                    .findRenderedDOMComponentWithTag(
                     component, 'h2'
                    );

  });

    it('has a title class', () =&gt; {

      const component = ReactTestUtils
                            .renderIntoDocument(&lt;ProductHeader/&gt;);
      var node = ReactTestUtils
                    .findRenderedDOMComponentWithClass(
                     component, 'title'
                 );
    })
  })</pre><p>The first test checks whether the <code class="inline">ProducerHeader</code> component has an <code class="inline">&lt;h2&gt;</code> tag, and the second one finds whether it has a CSS class named <code class="inline">title</code>. The code is hard to read and understand. </p><p>Here are the tests rewritten using Enzyme.</p><h4>src/components/__tests__/ProductHeader.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">import { shallow } from 'enzyme'

describe('ProductHeader Component', () =&gt; {

    it('has an h2 tag', () =&gt; {
      const component = shallow(&lt;ProductHeader/&gt;);
      var node = component.find('h2');
      expect(node.length).toEqual(1);

  });

    it('has a title class', () =&gt; {
      const component = shallow(&lt;ProductHeader/&gt;);
      var node = component.find('h2');
      expect(node.hasClass('title')).toBeTruthy();
    })
  })</pre><p>First, I created a shallow-rendered DOM of the <code class="inline">&lt;ProductHeader/&gt;</code> component using <code class="inline">shallow()</code> and stored it in a variable. Then, I used the <code class="inline">.find()</code> method to find a node with tag 'h2'. It queries the DOM to see if there's a match. Since there is only one instance of the node, we can safely assume that <code class="inline">node.length</code> will be equal to 1.</p><p>The second test is very similar to the first one. The <code class="inline">hasClass('title')</code> method returns whether the current node has a <code class="inline">className</code> prop with value 'title'. We can verify the truthfulness using <code class="inline">toBeTruthy()</code>.  </p><p>Run the tests using <code class="inline">yarn test</code>, and both the tests should pass. </p><p>Well done! Now it's time to refactor the code. This is important from a tester's perspective because readable tests are easier to maintain. In the above tests, the first two lines are identical for both the tests. You can refactor them by using a <code class="inline">beforeEach()</code> function.  As the name suggests, the <code class="inline">beforeEach</code> function gets called once before each spec in a describe block is executed. </p><p>You can pass an arrow function to <code class="inline">beforeEach()</code> like this.</p><h4>src/components/__tests__/ProductHeader.test.js<br>
</h4><pre class="brush: javascript noskimlinks noskimwords">import { shallow } from 'enzyme'

describe('ProductHeader Component', () =&gt; {
    let component, node;

    // Jest beforeEach()
    beforeEach((()=&gt; component = shallow(&lt;ProductHeader/&gt;) ))
    beforeEach((()=&gt; node = component.find('h2')) )

    it('has an h2 tag', () =&gt; {
        expect(node).toBeTruthy()
    });

    it('has a title class', () =&gt; {
      expect(node.hasClass('title')).toBeTruthy()
    })
})</pre><h2>Writing Unit Tests With Jest and Enzyme</h2><p>Let's write a few unit tests for the <strong>ProductDetails</strong> component. It is a presentational component that displays the details of each individual product. </p><figure class="post_image"><img alt="Testing Components in React - ProductDetails component highlighted" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/31602/image/TestingComponentsInReact-ProductDetailsView.png"><figcaption>We're going to test the section that's highlighted</figcaption></figure><p>The unit test will try to assert the following assumptions:</p><ul>
<li>The component exists and the props are getting passed down.</li>
<li>The props like product's name, description, and availability are displayed.</li>
<li>An error message is displayed when the props are empty.</li>
</ul><p>Here is the bare-bones structure of the test. The first <code class="inline">beforeEach()</code> stores the product data in a variable, and the second one mounts the component.</p><h4>src/components/__tests__/ProductDetails.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">describe("ProductDetails component", () =&gt; {
    var component, product;

    beforeEach(()=&gt; {
        product = {
            id: 1,
            name: 'NIKE Liteforce Blue Sneakers',
            description: 'Lorem ipsum.',
            status: 'Available'
        };
    })
    beforeEach(()=&gt; {
        component = mount(&lt;ProductDetails product={product} foo={10}/&gt;);
    })

    it('test #1' ,() =&gt; {

    })
})</pre><p>The first test is easy:</p><pre class="brush: javascript noskimlinks noskimwords">it('should exist' ,() =&gt; {
      expect(component).toBeTruthy();
      expect(component.props().product).toEqual(product);
 })</pre><p>Here we use the <code class="inline">props()</code> method which is handy for getting the props of a component.</p><p>For the second test, you can query elements by their class names and then check whether the product's name, description etc. are part of that element's <code class="inline">innerText</code>. </p><pre class="brush: javascript noskimlinks noskimwords">  it('should display product data when props are passed', ()=&gt; {
       let title = component.find('.product-title');
       expect(title.text()).toEqual(product.name);

       let description = component.find('.product-description');
       expect(description.text()).toEqual(product.description);

    })   </pre><p>The <code class="inline">text()</code> method is particularly useful in this case to retrieve the inner text of an element. Try writing an expectation for the <code class="inline">product.status()</code> and see if all the tests are passing.</p><p>For the final test, we're going to mount the <code class="inline">ProductDetails</code> component without any props. Then we're going to look for a class named '.product-error' and check if it contains the text "Sorry, Product doesn't exist".</p><pre class="brush: javascript noskimlinks noskimwords"> it('should display an error when props are not passed', ()=&gt; {
        /* component without props */
        component = mount(&lt;ProductDetails /&gt;);

        let node = component.find('.product-error');
        expect(node.text()).toEqual('Sorry. Product doesnt exist');
    })
</pre><p>That's it. We've successfully tested the <code class="inline">&lt;ProductDetails /&gt;</code> component in isolation. Tests of this type are known as unit tests.</p><h2>Testing Callbacks Using Stubs and Spies</h2><p>We just learned how to test props. But to truly test a component in isolation, you also need to test the callback functions. In this section, we'll write tests for the <strong>ProductList</strong> component and create stubs for callback functions along the way. Here are the assumptions that we need to assert.</p><figure class="post_image"><img alt="Testing components in React - ProductList Component" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/31602/image/TestingComponentsInReact-ProductListView.png"></figure><ol>
<li>The number of products listed should be equivalent to the number of objects the component receives as props.</li>
<li>Clicking on <code class="inline">&lt;a&gt;</code> should invoke the callback function.</li>
</ol><p>Let's create a <code class="inline">beforeEach()</code> function that fills in mock product data for our tests.</p><h4>src/components/__tests__/ProductList.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">  beforeEach( () =&gt; {
         productData =   [
            {
                id: 1,
                name: 'NIKE Liteforce Blue Sneakers',
                description: 'Lorem ipsu.',
                status: 'Available'

            },
           // Omitted for brevity
        ]
    })</pre><p>Now, let's mount our component in another <code class="inline">beforeEach()</code> block.</p><pre class="brush: javascript noskimlinks noskimwords">beforeEach(()=&gt; {
    handleProductClick = jest.fn();
    component = mount(
                    &lt;ProductList
                        products = {productData}
                        selectProduct={handleProductClick}
                    /&gt;
                );
})</pre><p>The <code class="inline">ProductList</code> receives the product data through props. In addition to that, it receives a callback from the parent. Although you could write tests for the parent's callback function, that's not a great idea if your aim is to stick to unit tests. Since the callback function belongs to the parent component, incorporating the parent's logic will make the tests complicated. Instead, we are going to create a stub function.</p><h3>What's a Stub? </h3><p>A stub is a dummy function that pretends to be some other function. This allows you to independently test a component without importing either parent or child components. In the example above, we created a stub function called <code class="inline">handleProductClick</code> by invoking<code class="inline"> jest.fn()</code>. </p><p>Now we just need to find the all the <code class="inline">&lt;a&gt;</code> elements in the DOM and simulate a click on the first <code class="inline">&lt;a&gt;</code> node. After being clicked, we'll check if <code class="inline">handleProductClick()</code> was invoked. If yes, it's fair to say our logic is working as expected.</p><pre class="brush: javascript noskimlinks noskimwords">it('should call selectProduct when clicked', () =&gt; {

    const firstLink = component.find('a').first();
    firstLink.simulate('click');
    expect(handleProductClick.mock.calls.length).toEqual(1);

    })
})</pre><p>Enzyme lets you easily simulate user actions such as clicks using <code class="inline">simulate()</code> method. <code class="inline">handlerProductClick.mock.calls.length</code> returns the number of times the mock function was called. We expect it to be equal to 1.</p><p>The other test is relatively easy. You can use the <code class="inline">find()</code> method to retrieve all <code class="inline">&lt;a&gt;</code> nodes in the DOM. The number of <code class="inline">&lt;a&gt;</code> nodes should be equal to the length of the productData array that we created earlier. </p><pre class="brush: javascript noskimlinks noskimwords">    it('should display all product items', () =&gt; {

        let links = component.find('a');
        expect(links.length).toEqual(productData.length);
    })
    </pre><h2>Testing the Component's State, LifeCycleHook, and Method</h2><p>Next up, we're going to test the <code class="inline">ProductContainer</code> component. It has a state, a lifecycle hook, and a class method. Here are the assertions that need to be verified:</p><ol>
<li>
<code class="inline">componentDidMount</code> is called exactly once.</li>
<li>The component's state is populated after the component mounts.</li>
<li>The <code class="inline">handleProductClick()</code> method should update the state when a product id is passed in as an argument.</li>
</ol><p>To check whether <code class="inline">componentDidMount</code> was called, we're going to spy on it. Unlike a stub, a spy is used when you need to test an existing function. Once the spy is set, you can write assertions to confirm whether the function was called.</p><p>You can spy on a function as follows:</p><h4>src/components/__tests__/ProductContainer.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">   it('should call componentDidMount once', () =&gt; {
        componentDidMountSpy = spyOn(ProductContainer.prototype,
                               'componentDidMount');
        //To be finished
    });</pre><p>The first parameter to <code class="inline">jest.spyOn</code> is an object that defines the prototype of the class that we're spying on. The second one is the name of the method that we want to spy. </p><p>Now render the component and create an assertion to check whether spy was called.</p><pre class="brush: javascript noskimlinks noskimwords">     component = shallow(&lt;ProductContainer/&gt;);
     expect(componentDidMountSpy).toHaveBeenCalledTimes(1);</pre><p>To check that the component's state is populated after the component mounts, we can use Enzyme's <code class="inline">state()</code> method to retrieve everything in the state. </p><pre class="brush: javascript noskimlinks noskimwords">it('should populate the state', () =&gt; {
        component = shallow(&lt;ProductContainer/&gt;);
        expect(component.state().productList.length)
            .toEqual(4)

    })</pre><p>The third one is a bit tricky. We need to verify that <code class="inline">handleProductClick</code> is working as expected. If you head over to the code, you'll see that the <code class="inline">handleProductClick()</code> method takes a product id as input, and then updates <code class="inline">this.state.selectedProduct</code> with the details of that product. </p><p>To test this, we need to invoke the component's method, and you can actually do that by calling <code class="inline">component.instance().handleProductClick()</code>. We'll pass in a sample product id. In the example below, we use the id of the first product. Then, we can test whether the state was updated to confirm that the assertion is true. Here's the whole code:</p><pre class="brush: javascript noskimlinks noskimwords"> it('should have a working method called handleProductClick', () =&gt; {
        let firstProduct = productData[0].id;
        component = shallow(&lt;ProductContainer/&gt;);
        component.instance().handleProductClick(firstProduct);

        expect(component.state().selectedProduct)
            .toEqual(productData[0]);
    })
</pre><p>We've written 10 tests, and if everything goes well, this is what you should see:</p><figure class="post_image"><img alt="Final output with tests passing" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/31602/image/TestingComponentsInReact-AllTestsPass.png"></figure><h2>Summary</h2><p>Phew! We've covered almost everything that you need to know to get started with writing tests in React using Jest and Enzyme. Now might be a good time to head over to the <a href="https://airbnb.io/enzyme/docs/api/" rel="external" target="_blank">Enzyme website</a> to have a deeper look at their API.</p><p>What are your thoughts on writing tests in React? I'd love to hear them in the comments.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-08-17T11:00:00+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Testing Components in React Using Jest: The Basics]]></title>
      <link>//shineyrock.com/blog/read/testing-components-in-react-using-jest-the-basics</link>
      <guid>https://shineyrock.com/blog/read/testing-components-in-react-using-jest-the-basics#When:12:47:26Z</guid>
      <description><![CDATA[<figure class="final-product final-product--image"><img data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/28934/final_image/Testing-Components-in-React-ProductListingDemo.png" alt="Final product image"><figcaption>What You'll Be Creating</figcaption></figure><p>Testing code is a confusing practice for many developers. That's understandable because writing tests requires more effort, time, and the ability to foresee possible use cases. Startups and developers working on smaller projects usually favor ignoring tests altogether because of the lack of resources and manpower. </p><p>However, there are a couple of reasons why I believe that you should test your components:</p><ol>
<li>It makes you feel more confident about your code.</li>
<li>Tests enhance your productivity.</li>
</ol><p>React isn't any different either. When your whole application starts to turn into a pile of components that are hard to maintain, testing offers stability and consistency. Writing tests from day one will help you write better code, spot bugs with ease, and maintain a better development workflow. </p><p>In this article, I will take you through everything that you need to know to write tests for your React components. I'll also cover some of the best practices and techniques while we're at it. Let's get started!</p><h2>Testing Components in React</h2><p>Testing is the process of verifying that our <em>test assertions</em> are true and that they stay true throughout the lifetime of the application. A test assertion is a boolean expression that returns true unless there is a bug in your code. <br></p><p>For instance, an assertion could be something as simple as this: "When the user navigates to <strong>/login</strong>, a modal with the id <code class="inline">#login</code> should be rendered." So, if it turns out that you messed up the login component somehow, the assertion would return false. Assertions are not just limited to what gets rendered—you can also make assertions about how the application responds to user interactions and other actions. </p><p>There are many automated testing strategies that front-end developers use to test their code. We will limit our discussion to just three software test paradigms that are popular with React: unit testing, functional testing, and integration testing.</p><h3>Unit Testing</h3><p>Unit testing is one of the test veterans that's still popular in testing circles. As the name suggests, you will be testing individual pieces of code to verify that they function independently as expected. Because of React's component architecture, unit tests are a natural fit. They're also faster because you don't have to rely on a browser.</p><p>Unit tests help you think of each component in isolation and treat them as functions. Your unit tests for a particular component should answer the following questions:</p><ol>
<li>Are there any props? If yes, what does it do with them?</li>
<li>What components does it render? </li>
<li>Should it have a state? When or how should it update the state?</li>
<li>Is there a procedure that it should follow when it mounts or unmounts, or on user interaction?</li>
</ol><h3>Functional Testing</h3><p>Functional tests are used to test the behavior of a part of your application. Functional tests are usually written from a user's perspective. A piece of functionality is usually not limited to a single component. It can be a full-fledged form or an entire page. </p><p>For instance, when you're building a signup form, it might involve components for the form elements, the alerts, and errors if any. The component that gets rendered after the form is submitted is also part of that functionality. This doesn't require a browser renderer because we'll be using an in-memory virtual DOM for our tests.<br></p><h3>Integration Testing</h3><p>Integration testing is a test strategy where all the individual components are tested as a group. Integrated testing attempts to replicate the user experience by running the tests on an actual browser. This is considerably slower than functional testing and unit tests because each test suite is executed on a live browser. </p><p>In React, unit tests and functional tests are more popular than integration tests because they are easier to write and maintain. That's what we will cover in this tutorial.</p><h2>Know Your Tools </h2><p>You need certain tools and dependencies to get started with unit and functional testing your React application. I've listed them below.</p><h3>Jest Test Framework</h3><p>Jest is a testing framework that requires zero configuration and is therefore easy to set up. It's more popular than test frameworks like Jasmine and Mocha because it's developed by Facebook. Jest is also faster than the rest because it uses a clever technique to parallelize test runs across workers. Apart from that, each test runs in a sandbox environment so as to avoid conflicts between two successive tests. </p><p>If you're using create-react-app, it comes shipped with Jest. If not, you might have to install Jest and a few other dependencies. You can read more about it on the official <a href="https://jestjs.io/docs/en/tutorial-react" rel="external">Jest documentation page</a>. </p><h3>react-test-renderer</h3><p>Even if you're using create-react-app, you will need to install this package to render snapshots. Snapshot testing is a part of the Jest library. So, instead of rendering the UI of the entire application, you can use the test renderer to quickly generate a serializable HTML output from the virtual DOM. You can install it as follows:</p><pre class="brush: bash noskimlinks noskimwords">yarn add react-test-renderer</pre><h3>ReactTestUtils and Enzyme</h3><p><strong>react-dom/test-utils</strong> consists of some of the test utilities provided by the React team. Alternatively, you can use the <a href="https://github.com/airbnb/enzyme" rel="external">Enzyme</a> package released by Airbnb. Enzyme is a whole lot better than ReactTestUtils because it is easy to assert, manipulate, and traverse your React Components’ output. We will start our tests with React utils and then transition to Enzyme later on.</p><p>To install Enzyme, run the following command.</p><pre class="brush: bash noskimlinks noskimwords">yarn add enzyme enzyme-adapter-react-16</pre><p>Add the code to <strong>src/SetupTests.js</strong>.</p><pre class="brush: javascript noskimlinks noskimwords">import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });</pre><p>There is more information about this in the <a href="https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#testing-components">Testing Components</a> section of the create-react-app page. </p><h3>Setting Up a Demo App and Organizing Tests<br>
</h3><p>We will be writing tests for a simple demo application that displays a master/detail view of a list of products. You can find the demo application in our <a href="https://github.com/tutsplus/testing-components-in-react-using-jest-the-basics" rel="external" target="_blank">GitHub repo</a>. The application consists of a container component known as <code class="inline">ProductContainer</code> and three presentational components: <code class="inline">ProductList</code>, <strong></strong><code class="inline">ProductDetails</code>, and <code class="inline">ProductHeader</code>. </p><h4>Directory Structure</h4><pre class="brush: plain noskimlinks noskimwords">.
├── package-lock.json
├── package.json
├── public
│   ├── index.html
│   └── manifest.json
├── src
│   ├── components
│   │   ├── App.js
│   │   ├── ProductContainer.js
│   │   ├── ProductDetails.jsx
│   │   ├── ProductHeader.js
│   │   ├── ProductList.jsx
│   ├── index.js
│   └── style.css</pre><p>This demo is a good candidate for unit testing and functional testing. You can test each component in isolation and/or test the product listing functionality as a whole. <br></p><p>Once you've downloaded the demo, create a directory with the name <strong>__tests__<em></em></strong><strong> </strong>inside <strong>/src/components/</strong>. You can then store all the test files related to this functionality inside the <strong>__tests__ </strong>directory. Testers usually name their test files as either <strong>.spec.js</strong> or <strong>.test.js</strong>—for example, <strong>ProductHeader.test.js</strong> or <strong>ProductHeader.spec.js</strong>. </p><h2>Writing Basic Tests in React</h2><p>Create a <strong>ProductHeader.test.js</strong> file if you haven't already. Here is what our tests are basically going to look like:</p><h4>src/components/__tests__/ProductList.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">describe('ProductHeader', () =&gt; {

  it('passing test', () =&gt; {
    expect(true).toBeTruthy();
  })

  it('failing test', () =&gt; {
    expect(false).toBeTruthy();
  })
})</pre><p>The test suite starts with a <code class="inline">describe</code> block, which is a global Jest function that accepts two parameters. The first parameter is the title of the test suite, and the second parameter is the actual implementation. Each <code class="inline">it()</code> in a test suite corresponds to a test or a spec. A test contains one or more expectations that check the state of the code. </p><pre class="brush: javascript noskimlinks noskimwords">expects(true).toBeTruthy();
</pre><p>In Jest, an expectation is an assertion that either returns true or false. When all the assertions in a spec are true, it is said to pass. Otherwise, the test is said to fail.<br></p><p>For instance, we've created two test specs. The first one should obviously pass, and the second one should fail. </p><p>Note: <code class="inline">toBeTruthy()</code> is a predefined matcher. In Jest, each matcher makes a comparison between the expected value and the actual value and returns a boolean. There are many more matchers available, and we will have a look at them in a moment.</p><h2>Running the Test Suite</h2><p>create-react-app has set up everything that you need to execute the test suite. All you need to do is run the following command:</p><pre class="brush: bash noskimlinks noskimwords">yarn test</pre><p>You should see something like this:</p><figure class="post_image"><img alt="Test output" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/28934/image/Testing-Components-in-React-FailingSpec.png"></figure><p>To make the failing test pass, you have to replace the <code class="inline">toBeTruthy()</code> matcher with <code class="inline">toBeFalsy()</code>.</p><pre class="brush: javascript noskimlinks noskimwords">expects(false).toBeFalsy();</pre><p>That's it!</p><h2>Using Matchers in Jest</h2><p>As mentioned earlier, Jest uses matchers to compare values. You can use it to check equality, compare two numbers or strings, and verify the truthiness of expressions. Here is the list of popular matchers available in Jest. </p><ul>
<li><code class="inline">toBe();</code></li>
<li><code class="inline">toBeNull()</code></li>
<li><code class="inline">toBeDefined()</code></li>
<li><code class="inline">toBeUndefined()</code></li>
<li><code class="inline">toBeTruthy()</code></li>
<li><code class="inline">toBeFalsy()</code></li>
<li>
<code class="inline">toBeGreaterThan()</code><br>
</li>
<li><code class="inline">toBeLesserThan()</code></li>
<li><code class="inline">toMatch()</code></li>
<li><code class="inline">toContain()</code></li>
</ul><p>This is just a taste. You can find all the available matchers in the <a href="https://jestjs.io/docs/en/using-matchers" rel="external">reference docs</a>.<br></p><h2>Testing a React Component</h2><p>First, we'll be writing a couple of tests for the <code class="inline">ProductHeader</code> component. Open up the <strong>ProductHeader.js file</strong> if you haven't already. </p><h4>src/components/ProductHeader.js</h4><pre class="brush: javascript noskimlinks noskimwords">import React, {Component} from 'react';

class ProductHeader extends Component  {
    render() {
        return(
            &lt;h2 className="title"&gt; Product Listing Page &lt;/h2&gt;
        );
    }
};
export default ProductHeader;</pre><p>Are you curious to know why I used a class component here instead of a functional component? The reason is that it's harder to test functional components with ReactTestUtils. If you're curious to know why, <a href="https://stackoverflow.com/questions/36682241/testing-functional-components-with-renderintodocument" rel="external">this Stack Overflow discussion</a> has the answer.</p><p>We could write a test with the following assumptions:</p><ol>
<li>The component should render an <code class="inline">h2</code> tag.</li>
<li>The <code class="inline">h2</code> tag should have a class named <code class="inline">title</code>.</li>
</ol><p>To render a component and to retrieve relevant DOM nodes, we need ReactTestUtils. Remove the dummy specs and add the following code:</p><h4>src/components/__tests__/ProductHeader.test.js</h4><pre class="brush: javascript noskimlinks noskimwords">import React from 'react';
import ReactTestUtils from 'react-dom/test-utils';
import ProductsList from '../ProductsList';

describe('ProductHeader Component', () =&gt; {

    it('has an h2 tag', () =&gt; {
     //Test here
    });

    it('is wrapped inside a title class', () =&gt; {
     //Test here
    })
  })</pre><p>To check for the existence of an <code class="inline">h2</code> node, we will first need to render our React elements into a DOM node in the document. You can do that with the help of some of the APIs exported by <code class="inline">ReactTestUtils</code>. For instance, to render our <code class="inline">&lt;ProductHeader/&gt;</code> component, you can do something like this:</p><pre class="brush: javascript noskimlinks noskimwords"> const component = ReactTestUtils.renderIntoDocument(&lt;ProductHeader/&gt;);    </pre><p>Then, you can extract the <code class="inline">h2</code> tag from the component with the help of <code class="inline">findRenderedDOMComponentWithTag('tag-name')</code>. It checks all the child nodes and finds the node that matches the <code class="inline">tag-name</code>. </p><p>Here is the whole test spec.</p><pre class="brush: javascript noskimlinks noskimwords">    it('has an h2 tag', () =&gt; {

      const component = ReactTestUtils.renderIntoDocument(&lt;ProductHeader/&gt;);
      var h2 = ReactTestUtils.findRenderedDOMComponentWithTag(
       component, 'h2'
     );

  });</pre><p>Try saving it, and your test runner should show you that the test has passed. That's somewhat surprising because we don't have an <code class="inline">expect()</code> statement like in our previous example. Most of the methods exported by <strong>ReactTestUtils</strong> have expectations built into them. In this particular case, if the test utility fails to find the <code class="inline">h2</code> tag, it will throw an error and the tests will automatically fail.</p><p>Now, try creating the code for the second test. You can use <code class="inline">findRenderedDOMcomponentWithClass()</code> to check if there's any node with the class 'title'.</p><pre class="brush: javascript noskimlinks noskimwords">    it('has a title class', () =&gt; {

      const component = ReactTestUtils.renderIntoDocument(&lt;ProductHeader/&gt;);
      var node = ReactTestUtils.findRenderedDOMComponentWithClass(
       component, 'title'
     );
    })</pre><p>That's it! If all goes well, you should see the results in green. </p><figure class="post_image"><img alt="Test results" data-src="https://cms-assets.tutsplus.com/uploads/users/1795/posts/28934/image/Testing-Components-in-React-PassingSpec.png"></figure><h2>Conclusion</h2><p>Although we just wrote two test specs, we've covered a lot of ground in the process. In the next article, we'll write some full-fledged tests for our product listing page. We'll also replace ReactTestUtils with Enzyme. Why? Enzyme offers a high-level interface that's very easy to use and developer-friendly. Stay tuned for the second part!</p><p>If at any point you feel stuck or need help, let us know in the comments. <br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-08-10T12:47:26+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[15 Best PHP Event Calendar and Booking Scripts]]></title>
      <link>//shineyrock.com/blog/read/15-best-php-event-calendar-and-booking-scripts</link>
      <guid>https://shineyrock.com/blog/read/15-best-php-event-calendar-and-booking-scripts#When:03:04:43Z</guid>
      <description><![CDATA[<p>There are several reasons PHP calendar, booking and events scripts might be a great addition to your website. If you’re a service provider, then it makes sense to have an appointment booking system on your site that allows potential customers to see your availability and select an appointment time and date that is best for them. This could cut down on needless calls to your business to make appointments and free up your time or your staff’s time.</p><p>Online calendars are also handy for organisations of any size to help team members share events and tasks and keep each other abreast of what other members are working on.</p><p>Their usefulness isn’t just limited to companies, however. Artists, writers, performers, bloggers and any other individual with an active public life could make good use of online calendars to let followers and fans know the whens and wheres of public appearances.</p><p>With all this in mind, we’ve compiled 15 of our best PHP calendar, booking and events scripts available for download today at <a href="https://codecanyon.net/search?utf8=%E2%9C%93&amp;referrer=search&amp;view=list&amp;sort=sales&amp;category=php-scripts%2Fcalendars">CodeCanyon</a>. This post will help you choose the one that’s right for you.</p><h2>
<b>1. </b><a href="https://codecanyon.net/item/appointment-booking-software-for-cleaning-maintenance-businesses-cleanto/18397969?s_rank=17"><b>Cleanto</b></a>
</h2><p><a href="https://codecanyon.net/item/appointment-booking-software-for-cleaning-maintenance-businesses-cleanto/18397969?s_rank=17">Cleanto</a> is ideal for many different types of service companies looking for a reliable way to provide clients with full-featured online booking.</p><figure class="post_image"><a href="https://codecanyon.net/item/appointment-booking-software-for-cleaning-maintenance-businesses-cleanto/18397969?s_rank=17" target="_self"><img alt="Cleanto " data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Cleanto.jpg"></a></figure><p>Standout features:</p><ul>
<li>PayPal, Authorize.Net, and Stripe payment methods</li>
<li>email reminders</li>
<li>auto confirm booking</li>
<li>ability to add breaks in schedule</li>
<li>and more</li>
</ul><p>User Crossera says:</p><blockquote>“Amazing customer support. These guys came back to me within a day with a fix for all the problems I faced. The plugin can be customized to whatever your needs are.”</blockquote><h2>
<b>2. </b><a href="https://codecanyon.net/item/employee-work-schedule-multicalendar/10545683?s_rank=4"><b>Employee Work Schedule</b></a>
</h2><p>The <a href="https://codecanyon.net/item/employee-work-schedule-multicalendar/10545683?s_rank=4">Employee Work Schedule</a> script is packed with features that companies will find useful for managing team productivity. The calendar can be set up to provide access to selected team members and allows the designated admin to assign tasks, or conversely team members can record their own self-assigned tasks or appointments.</p><figure class="post_image"><a href="https://codecanyon.net/item/employee-work-schedule-multicalendar/10545683?s_rank=4" target="_self"><img alt="Employee Work Schedule" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Employee-Work-Schedule.jpg"></a></figure><p>Standout features:</p><ul>
<li>public, private or group calendars</li>
<li>popup dialog for adding, editing and deleting items</li>
<li>ability for both admins and users to create calendars</li>
<li>supports recurring events</li>
<li>and more</li>
</ul><p>User lara_c_2 says:</p><blockquote>“One of the best scripts and support I have ever had. The author, Paul, was more than helpful and available. Great script, super flexible and offers many many more features than other similar software out there.”</blockquote><h2>
<b>3. </b><a href="https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1"><b>Vacation Rentals Booking Calendar</b></a>
</h2><p>The <a href="https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1">Vacation Rentals Booking Calendar</a> is an online vacation rental booking calendar script that allows property owners or management agencies to create and manage rental availability calendars for their vacation rental properties.</p><figure class="post_image"><a href="https://codecanyon.net/item/vacation-rentals-booking-calendar/19348371?s_rank=1" target="_self"><img alt="Vacation Rentals Booking Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Vacation-Rentals-Booking-Calendar.jpg"></a></figure><p>Standout features:</p><ul>
<li>highly customizable</li>
<li>emails notifications to owner or administrator</li>
<li>XML and JSON availability feeds</li>
<li>export calendars to iCalendar format</li>
<li>and more</li>
</ul><p>User Craignic says”</p><blockquote>“Great product and quick support given when I had a query.”</blockquote><h2>
<b>4. </b><a href="https://codecanyon.net/item/events-calendar/3738382?s_rank=4"><b>Events Calendar</b></a>
</h2><p>The <a href="https://codecanyon.net/item/events-calendar/3738382?s_rank=4">Events Calendar</a> allows you to create several calendars dedicated to different locations or categories. Each event in the calendar comes with its own popup feature that allows you to add important details like starting and ending time for each event, textual description, photos, videos, location map, etc.</p><figure class="post_image"><a href="https://codecanyon.net/item/events-calendar/3738382?s_rank=4" target="_self"><img alt="Events Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Screenshot-2018-07-23-16.49.09.jpg"></a></figure><p>Standout features:</p><ul>
<li>create an unlimited number of calendars</li>
<li>view event details via rollover popup</li>
<li>add videos and a photo gallery for each event</li>
<li>add the event website link</li>
<li>and more</li>
</ul><p>User Jackaubert says:</p><blockquote>“This is just a really nice clean calendar presentation. It is relatively easy to manage, once it is installed, and you can customize pretty much anything with enough digging into the code. Nothing is concealed or locked down.”</blockquote><h2>
<b>5. </b><a href="https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19"><b>NodAPS Online Booking System</b></a>
</h2><p>The <a href="https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19">NodAPS Online Booking System</a> promises to help you manage your appointments more easily. You can create unlimited accounts with administrative, assistant and staff permission, and add unlimited languages to the system. You can also change the booking time and date with a drag-and-drop feature.</p><figure class="post_image"><a href="https://codecanyon.net/item/appointment-management-system-nodaps/16197805?s_rank=19" target="_self"><img alt="NodAPS Online Booking System" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/NodAPS.jpg"></a></figure><p>Standout features:</p><ul>
<li>multi-provider system</li>
<li>seven different booking type forms</li>
<li>multilingual</li>
<li>easy to install</li>
<li>and more</li>
</ul><p>User Jam79 says:</p><blockquote>“Very simple to use. Fast and effective support!”</blockquote><h2>
<b>6. </b><a href="https://codecanyon.net/item/tiva-events-calendar-for-php/19199337"><b>Tiva Events Calendar</b></a>
</h2><p>With <a href="https://codecanyon.net/item/tiva-events-calendar-for-php/19199337">Tiva Events Calendar</a>, users can add and view all events in calendar or events list style, but also can view details of each event via a pop-up display when they hover over the event. The app also offers full and compact layouts.</p><figure class="post_image"><a href="https://codecanyon.net/item/tiva-events-calendar-for-php/19199337" target="_self"><img alt="Tiva Events Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Tiva-Events-Calendar-For-PHP.jpg"></a></figure><p>Standout features:</p><ul>
<li>view events via calendar or list style</li>
<li>quick view event’s info with tooltip</li>
<li>user-friendly interface</li>
<li>full layout or compact layout</li>
<li>and more</li>
</ul><p>User georgeszy says:</p><blockquote>“It's a simple straightforward calendar plug-in. But, the after sales support is fabulous. They helped me several times with issues I ran into and were very generous with their time and expertise.”</blockquote><h2>
<b>7. </b><a href="https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923"><b>Bookify</b></a>
</h2><p><a href="https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923">Bookify</a> is one of the newest apps at CodeCanyon but is already proving to be quite popular with its offering of features such as an installation wizard that doesn't require any knowledge of code to use. Bookify also has Google Calendar sync, live chat, and detailed documentation.</p><figure class="post_image"><a href="https://codecanyon.net/item/bookify-multipurpose-booking-app/21814923" target="_self"><img alt="Bookify" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Bookify.jpg"></a></figure><p>Standout features:</p><ul>
<li>Stripe and PayPal are supported</li>
<li>live chat</li>
<li>multi-language support</li>
<li>Google Calendar sync</li>
<li>and more</li>
</ul><p>User Teatone says:</p><blockquote>“Great customer support. Great code quality! If you are looking for something that works with great support, Bookify is the one.”</blockquote><h2>
<b>8. </b><a href="https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642" target="_self"><b>Laravel Booking System</b></a>
</h2><p>The <a href="https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642">Laravel Booking System</a> with live chat offers a great online system for booking and making appointments. Users can buy credits as a payment option, and view available services, total transactions, their total credits as well as administrator contact information via their dashboard.  </p><p>From the administrative side, the system administrator can manage all things system related: general settings, payment settings, and user management. Admins can also manage bookings and respond to inquiries from their dashboard.  </p><figure class="post_image"><a href="https://codecanyon.net/item/laravel-booking-system-with-live-chat-appointment-booking-calendar/20657642" target="_self"><img alt="Laravel Booking System" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Screenshot-2018-07-23-16.41.59.jpg"></a></figure><p>Standout features:</p><ul>
<li>live chat</li>
<li>multi-language support</li>
<li>booking and transaction history</li>
<li>PayPal integration</li>
<li>and more</li>
</ul><p>User brentxscholl says:</p><blockquote>“This plugin works great. Great code. Customer service is fantastic. We asked for extended features and they were delivered for a reasonable price.”</blockquote><h2>
<b>9. </b><a href="https://codecanyon.net/item/tiva-timetable-for-php/18056918"><b>Tiva Timetable</b></a>
</h2><p>Fully responsive, easy to set up, and very customizable, the <a href="https://codecanyon.net/item/tiva-timetable-for-php/18056918">Tiva Timetable</a> is a good choice for those who are looking for a calendar with a clean and simple modern design.</p><figure class="post_image"><a href="https://codecanyon.net/item/tiva-timetable-for-php/18056918" target="_self"><img alt="Tiva Timetable" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Tiva-Timetable.jpg"></a></figure><p>Standout features:</p><ul>
<li>responsive</li>
<li>customisable</li>
<li>well documented</li>
<li>three layouts available</li>
<li>and more</li>
</ul><p>User mandrake62 says:</p><blockquote>Very good script, easy to install. Customer support at the top!</blockquote><h2>
<b>10. </b><a href="https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5"><b>Ajax Calendar 2</b></a>
</h2><p><a href="https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5">Ajax Calendar 2</a> is a highly customisable personal calendar designed to help you keep organised. This is a bestselling update of another popular script, the Ajax Full Featured Calendar.</p><figure class="post_image"><a href="https://codecanyon.net/item/ajax-full-featured-calendar-2/10158465?s_rank=5" target="_self"><img alt="Ajax Calendar 2" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Ajax-Full.jpg"></a></figure><p>Standout features:</p><ul>
<li>PHP and JS versions with PHP class</li>
<li>ability to auto-embed YouTube, Vimeo, Dailymotion, or SoundCloud, media</li>
<li>ability to export calendar or events to iCal format</li>
<li>supports recurring events</li>
<li>and more</li>
</ul><p>User sv_fr says:</p><blockquote>“Great script. Practical uses. Helpful support.” </blockquote><h2>
<b>11. </b><a href="https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38"><b>Event Calendar</b></a>
</h2><p>Built with jQuery FullCalendar and integrated into Bootstrap’s grid layout, the <a href="https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38">Event Calendar</a> allows users to organise and plan their events.</p><figure class="post_image"><a href="https://codecanyon.net/item/event-calendar-phpmysql-plugin/19246267?s_rank=38" target="_self"><img alt="Event Calendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Event-Calendar2.jpg"></a></figure><p>Standout features:</p><ul>
<li>create new types of events</li>
<li>ability to add fields like title, colour, description, link, and photo</li>
<li>Google Fonts and Font Awesome Icons</li>
<li>and more</li>
</ul><p>User teddyedward  says:</p><blockquote>“Really enjoy using your script—it's perfect for my needs. It's also well documented and easy to use.”</blockquote><h2>
<b>12. </b><a href="https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13"><b>eCalendar</b></a>
</h2><p>Quite simply, the <a href="https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13">eCalendar</a> script is designed to keep individual users or companies organised with a calendar that allows users to add as many events as needed, as well as details like the event title, location, time, etc.</p><figure class="post_image"><a href="https://codecanyon.net/item/ecalendar-responsive-events-calendar/9722895?s_rank=13" target="_self"><img alt="eCalendar" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/eCalendar.jpg"></a></figure><p>Standout features:</p><ul>
<li>choice of two designs</li>
<li>cross-browser compatibility (IE8+, Safari, Opera, Chrome, Firefox)</li>
<li>events are saved in your MySQL database</li>
<li>fully responsive design</li>
<li>and more</li>
</ul><p>User levitschi says:</p><blockquote>“Everything works perfectly! Support was better than I ever expected!”</blockquote><h2>
<b>13. </b><a href="https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741"><b>Event Manager</b></a>
</h2><p><a href="https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741">Event Manager</a> is an online booking system that has the advantage of displaying your events in three forms—calendar view, list view, and map location view—using Google Maps.</p><p>Conceived for PHP/MySQL, built with the very popular jQuery Full Calendar plugin, and integrated into the Bootstrap grid layout, Event Manager is easy to add to your existing site.</p><figure class="post_image"><a href="https://codecanyon.net/item/eventmanager-php-script-admin-panel/21280741" target="_self"><img alt="Event Manager" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Event-Manager.jpg"></a></figure><p>Standout features:</p><ul>
<li>fully responsive</li>
<li>highly customisable</li>
<li>three views available</li>
<li>well documented </li>
<li>and more</li>
</ul><h2>
<b>14. </b><a href="https://codecanyon.net/item/larabooking-laravel-appointments-booking-system/21052512"><b>LaraBooking</b></a>
</h2><p>Built with Laravel 5.5 and VueJS, <a href="https://codecanyon.net/item/larabooking-laravel-appointments-booking-system/21052512">LaraBooking</a> is another great online booking app with a clean and intuitive interface that allows users to book their appointments directly on the calendar. The calendar shows the times available, and users will receive email notifications and updates about their appointments.</p><figure class="post_image"><a href="https://codecanyon.net/item/larabooking-laravel-appointments-booking-system/21052512" target="_self"><img alt="LaraBooking" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/LaraBooking.jpg"></a></figure><p>Standout features:</p><ul>
<li>responsive</li>
<li>user-friendly interface</li>
<li>email notification</li>
<li>admin has the ability to review and edit all appointments and services</li>
<li>and more</li>
</ul><p>User spham says:</p><blockquote>“Perfect support and good design.”</blockquote><h2>
<b>15. </b><a href="https://codecanyon.net/item/gcal-add-google-calendar-event/19278893?s_rank=31"><b>Gcal</b></a>
</h2><p><a href="https://codecanyon.net/item/gcal-add-google-calendar-event/19278893?s_rank=31">Gcal</a> is one of the more straightforward of the booking systems featured here. It is specifically designed for users of Google Calendar. Users fill in a form which, once submitted, automatically adds an event to the Google Calendar of the owner of the email address submitted in the form. </p><figure class="post_image"><a href="https://codecanyon.net/item/gcal-add-google-calendar-event/19278893?s_rank=31" target="_self"><img alt="Gcal" data-src="https://cms-assets.tutsplus.com/uploads/users/1631/posts/31560/image/Gcal.jpg"></a></figure><p>Standout features:</p><ul>
<li>simple functionality</li>
<li>view event details in popup</li>
<li>three-step installation</li>
<li>well documented</li>
<li>and more</li>
</ul><h2><b>Conclusion</b></h2><p>These PHP event calendar and booking scripts just scratch the surface of products available at <a href="https://codecanyon.net/category/php-scripts/calendars" target="_self">Envato Market</a>. So if none of them catch your fancy, there are plenty of other great options to hold your interest!</p><p>And if you want to improve your PHP skills, check out our ever so useful <a href="https://code.tutsplus.com/categories/php">free PHP tutorials.</a></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-07-31T03:04:43+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Create Interactive Gradient Animations Using Granim.js]]></title>
      <link>//shineyrock.com/blog/read/create-interactive-gradient-animations-using-granim.js</link>
      <guid>https://shineyrock.com/blog/read/create-interactive-gradient-animations-using-granim.js#When:13:36:37Z</guid>
      <description><![CDATA[<p>Gradients can instantly improve the look and feel of a website, if used carefully with the right color combination. CSS has also come a long way when it comes to applying a gradient on any element and animating it. In this tutorial, we will move away from CSS and create gradient animations using a JavaScript library called <a href="https://sarcadass.github.io/granim.js/index.html" rel="external" target="_blank" title="Link: https://sarcadass.github.io/granim.js/index.html">Granim.js</a>.</p><p>This library draws and animates gradients on a given canvas according to the parameters you set when creating a Granim instance. There are different methods which can be used to make your gradient respond to different user events like a button click. In this tutorial, we will learn about this library in detail and create some simple but nice gradient animation effects.</p><h2>Create Solid Color Gradient Animations</h2><p>Before we begin creating any gradient, you will have to include the library in your project. For this, you can either <a href="https://github.com/sarcadass/granim.js" target="_self">download Granim.js from GitHub</a> or <a href="https://cdnjs.cloudflare.com/ajax/libs/granim/1.1.0/granim.min.js" rel="external" target="_blank" title="Link: https://cdnjs.cloudflare.com/ajax/libs/granim/1.1.0/granim.min.js">link directly to a CDN</a>. The library version that I am using in this tutorial is 1.1. Some methods that we will discuss here were only added in version 1.1, so using an older library version when following this tutorial will not always give the expected result. Keeping these points in mind, let's create our first gradient using Granim.js.</p><p>Every time you create a new Granim instance, you can pass it an object of key-value pairs, where the key is the name of a particular property and the value is the value of the property. The <code class="inline">element</code> property is used to specify the CSS selector or DOM node which will point to the canvas on which you want to apply a particular gradient.</p><p>When you create a gradient animation where the colors change from a relatively light value to a darker value, it might become impossible to read some text that you have positioned on the canvas. For example, the initial gradient applied on an element might be a combination of yellow and light green. In such cases, the text of the canvas would have to be darker for users to be able to read it properly. </p><p>Similarly, the gradient might consist of dark red and black at some other point, and in such cases the dark text would not be easy to read. Granim.js solves this problem for you by allowing you to specify a container element on which you can add the dark and light classes to style the text or other elements accordingly. The value of the <code class="inline">elToSetClassOn</code> property is set to <code class="inline">body</code> by default, but you can also specify any other container element. The dark and light class names are updated automatically based on the average color of the gradient.</p><p>The <code class="inline">elToSetClassOn</code> property does not work by itself. You will also have to specify a name for the <code class="inline">Granim</code> instance that you created using the name property. If you set the name to something like <code class="inline">first-gradient</code>, the name of the classes applied on the container element will become <code class="inline">first-gradient-light</code> or <code class="inline">first-gradient-dark</code> based on how light or dark the gradient currently is. This way, any element which needs to change its color based on the lightness or darkness of the gradient will be able to do so with ease.</p><p>The direction in which a gradient should be drawn can be specified using the <code class="inline">direction</code> property. It has four valid values: <code class="inline">diagonal</code>, <code class="inline">left-right</code>, <code class="inline">top-bottom</code>, and <code class="inline">radial</code>. The gradients that you create will not move in those particular directions—they will just be drawn that way. The position of the gradient doesn't change during the animation; only its colors do.</p><p>There is also a <code class="inline">states</code> property, which accepts an object as its value. Each state specified inside the <code class="inline">states</code> object will have a name and a set of key-value pairs. You can use the <code class="inline">gradients</code> property to specify different colors which should make up a particular gradient. You can set the value of this property to be equal to an array of gradients. </p><p>Granim.js will automatically create an animation where the colors of the gradient change from one set to another. The transition between different gradients takes 5,000 milliseconds by default. However, you can speed up or slow down the animation by setting an appropriate value for the <code class="inline">transitionSpeed</code> property.</p><p>After the gradients start animating, they will have to come to an end at one point or another. You can specify if the gradient should then just stop there or start animating again from the beginning using the <code class="inline">loop</code> property. This is set to <code class="inline">true</code> by default, which means that the gradient would keep animating.</p><p>Each color in a gradient can have a different opacity, which can be specified using the <code class="inline">opacity</code> property. This property accepts an array to determine how opaque each color is going to be. For two gradient colors, the value can be [0.1, 0.8]. For three gradient colors, the value can be [1, 0.5, 0.75], etc.</p><p>You also have the option to specify the time it takes for the gradient animation to go from one state to another using the <code class="inline">stateTransitionSpeed</code>. This is different from the <code class="inline">transitionSpeed</code> property, which controls the animation speed inside the same state.</p><p>In the following code snippet, I have created two different <code class="inline">Granim</code> instances to draw different gradients. In the first case, we have only specified a single gradient, so there is not any actual animation and the colors don't change at all.</p><pre class="brush: javascript noskimlinks noskimwords">var firstGranim = new Granim({
  element: "#first",
  name: "first-gradient",
  direction: "diagonal",
  opacity: [1, 1],
  states: {
    "default-state": {
      gradients: [["#8BC34A", "#FF9800"]]
    }
  }
});

var secondGranim = new Granim({
  element: "#second",
  name: "second-gradient",
  elToSetClassOn: ".wrapper",
  direction: "top-bottom",
  opacity: [1, 1],
  states: {
    "default-state": {
      gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]],
      transitionSpeed: 2000
    }
  }
});
</pre><p><iframe src="//codepen.io/Shokeen/embed/jZzmrG/?height=920&amp;theme-id=0&amp;default-tab=result&amp;embed-version=2" width="850" height="950" frameborder="no" allowfullscreen="true" scrolling="no"></iframe></p><h2>Animate Gradients Over an Image</h2><p>Another common use of the Granim.js library would be to animate a gradient over an image drawn on the canvas. You can specify different properties to control how the image is drawn on the canvas using the <code class="inline">image</code> property. It accepts an object with key-value pairs as its value. You can use the <code class="inline">source</code> property to specify the path from which the library should get the image to draw it on the canvas.</p><p>Any image that you draw on the canvas will be drawn so that its center coincides with the center of the canvas. However, you can use the <code class="inline">position</code> property to specify a different position to draw the image. This property accepts an array of two elements as its value. The first element can have the values <code class="inline">left</code>, <code class="inline">center</code>, and <code class="inline">right</code>. The second element can have the values <code class="inline">top</code>, <code class="inline">center</code>, and <code class="inline">bottom</code>. </p><p>These properties are generally useful when you know that the size of the canvas and the image won't match. In these situations, you can use this property to specify the part of the image that should appear on the canvas.</p><p>If the images and the canvas have different dimensions, you can also stretch the image so that it fits properly inside the canvas. The <code class="inline">stretchMode</code> property also accepts an array of two elements as its value. Three valid values for both these elements are <code class="inline">stretch</code>, <code class="inline">stretch-if-smaller</code>, and <code class="inline">stretch-if-larger</code>.</p><p>A gradient with blend mode set to <code class="inline">normal</code> will completely hide the image underneath it. The only way to show an image below a gradient of solid colors would be to choose a different blend mode. You can read about all the possible blend mode values for a canvas on <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/globalCompositeOperation" rel="external" target="_blank">MDN</a>.</p><p>I would like to point out that the ability to animate a gradient over an image was only added in version 1.1 of the Granim.js library. So you will have to use any version higher than that if you want this feature to work properly.</p><pre class="brush: javascript noskimlinks noskimwords">var firstGranim = new Granim({
  element: "#first",
  name: "first-gradient",
  direction: "diagonal",
  opacity: [1, 1],
  image: {
    source: "path/to/rose_image.jpg",
    position: ["center", "center"],
    blendingMode: "lighten"
  },
  states: {
    "default-state": {
      gradients: [["#8BC34A", "#FF9800"], ["#FF0000", "#000000"]]
    }
  }
});

var secondGranim = new Granim({
  element: "#second",
  name: "second-gradient",
  elToSetClassOn: ".wrapper",
  direction: "top-bottom",
  opacity: [1, 1],
  image: {
    source: "path/to/landscape.jpg",
    stretchMode: ["stretch", "stretch"],
    blendingMode: "overlay"
  },
  states: {
    "default-state": {
      gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]],
      transitionSpeed: 2000
    }
  }
});
</pre><p><iframe src="//codepen.io/Shokeen/embed/OQvExW/?height=920&amp;theme-id=0&amp;default-tab=result&amp;embed-version=2" width="850" height="950" frameborder="no" allowfullscreen="true" scrolling="no"></iframe></p><h2>Methods to Control Gradient Animation Playback</h2><p>Up to this point, we did not have any control over the playback of the gradient animation once it was instantiated. We could not pause/play it or change its state, direction, etc. The Granim.js library has different methods which let you accomplish all these tasks with ease.</p><p>You can play or pause any animation using the <code class="inline">play()</code> and <code class="inline">pause()</code> methods. Similarly, you can change the state of the gradient animation using the <code class="inline">changeState('state-name')</code> method. The <code class="inline">state-name</code> here has to be one of the state names that you defined when instantiating the <code class="inline">Granim</code> instance.</p><p>More methods were added in version 1.1 which allow you to change the direction and blend mode of an animation on the fly using the <code class="inline">changeDirection('direction-name')</code> and <code class="inline">changeBlendingMode('blending-mode-name')</code> methods.</p><p>In the following code snippet, I am using a button click event to call all these methods, but you can use any other event to call them.</p><pre class="brush: javascript noskimlinks noskimwords">var firstGranim = new Granim({
  element: "#first",
  name: "first-gradient",
  elToSetClassOn: ".wrapper",
  direction: "top-bottom",
  opacity: [1, 1],
  isPausedWhenNotInView: true,
  image : {
        source: 'path/to/landscape.jpg',
        stretchMode: ["stretch", "stretch"],
        blendingMode: 'overlay'
  },
  states: {
    "default-state": {
      gradients: [["#9C27B0", "#E91E63"], ["#009688", "#8BC34A"]],
      transitionSpeed: 2000
    },
    "green-state": {
      gradients: [["#4CAF50", "#CDDC39"], ["#FFEB3B", "#8BC34A"]],
      transitionSpeed: 2000
    },
    "red-state": {
      gradients: [["#E91E63", "#FF5722"], ["#F44336", "#FF9800"]],
      transitionSpeed: 2000
    }
  }
});

$(".play").on("click", function(){
  firstGranim.play();
});

$(".pause").on("click", function(){
  firstGranim.pause();
});

$(".diagonal").on("click", function(){
  firstGranim.changeDirection('diagonal');
});

$(".radial").on("click", function(){
  firstGranim.changeDirection('radial');
});

$(".red-state").on("click", function(){
  firstGranim.changeState('red-state');
});

$(".green-state").on("click", function(){
  firstGranim.changeState('green-state');
});

$(".color-dodge").on("click", function(){
  firstGranim.changeBlendingMode('color-dodge');
});

$(".color-burn").on("click", function(){
  firstGranim.changeBlendingMode('color-burn');
});

$(".lighten").on("click", function(){
  firstGranim.changeBlendingMode('lighten');
});

$(".darken").on("click", function(){
  firstGranim.changeBlendingMode('darken');
});</pre><p><iframe src="//codepen.io/Shokeen/embed/oEPjJg/?height=720&amp;theme-id=0&amp;default-tab=result&amp;embed-version=2" width="850" height="750" frameborder="no" allowfullscreen="true" scrolling="no"></iframe></p><h2>Final Thoughts</h2><p>In this tutorial, I have covered the basics of the Granim.js library so that you can get started with it as quickly as possible. There are a few other methods and properties that you might find useful when creating these gradient animations. You should read the <a href="https://sarcadass.github.io/granim.js/api.html" rel="external" target="_blank" title="Link: https://sarcadass.github.io/granim.js/api.html">official documentation</a> in order to read about them all.</p><p>If you’re looking for additional JavaScript resources to study or to use in your work, check out what we have available in the <a href="https://codecanyon.net/category/javascript" title="Link: https://codecanyon.net/category/javascript">Envato Market</a>.<br></p><p>If you have any questions related to this tutorial, feel free to let me know in the comments.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-06-28T13:36:37+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Build Complex, Large-Scale Vue.js Apps With Vuex]]></title>
      <link>//shineyrock.com/blog/read/how-to-build-complex-large-scale-vue.js-apps-with-vuex</link>
      <guid>https://shineyrock.com/blog/read/how-to-build-complex-large-scale-vue.js-apps-with-vuex#When:12:47:47Z</guid>
      <description><![CDATA[<p>It's so easy to learn and use <a href="https://vuejs.org/" target="_self">Vue.js</a> that anyone can build a simple application with that framework. Even novices, with the help of Vue's documentation, can do the job. However, when complexity comes into play, things get a bit more serious. The truth is that multiple, deeply nested components with shared state can quickly turn your application into an unmaintainable mess.</p><p>The main problem in a complex application is how to manage the state between components without writing spaghetti code or producing side effects. In this tutorial you'll learn how to solve that problem by using <a href="https://github.com/vuejs/vuex" target="_self">Vuex</a>: a state management library for building complex Vue.js applications.</p><h2>What Is Vuex?</h2><p>Vuex is a state management library specifically tuned for building complex, large-scale Vue.js applications. It uses a global, centralized store for all the components in an application, taking advantage of its reactivity system for instant updates.</p><p>The Vuex store is designed in such a way that it is not possible to change its state from any component. This ensures that the state can only be mutated in a predictable manner. Thus your store becomes a single source of truth: every data element is only stored once and is read-only to prevent the application's components from corrupting the state that is accessed by other components.</p><h2>Why Do You Need Vuex?</h2><p>You may ask: Why do I need Vuex in the first place? Can't I just put the shared state in a regular JavaScript file and import it into my Vue.js application?</p><p>You can, of course, but compared to a plain global object, the Vuex store has some significant advantages and benefits:</p><ul>
<li>The Vuex store is reactive. Once components retrieve a state from it, they will reactively update their views every time the state changes.</li>
<li>Components cannot directly mutate the store's state. The only way to change the store's state is by explicitly committing mutations. This ensures every state change leaves a trackable record, which makes the application easier to debug and test.<br>
</li>
<li>You can easily debug your application thanks to the Vuex integration with <a href="https://chrome.google.com/webstore/detail/vuejs-devtools/nhdogjmejiglipccpnnnanhbledajbpd" target="_self">Vue's DevTools extension</a>.<br>
</li>
<li>The Vuex store gives you a bird's eye view of how everything is connected and affected in your application.<br>
</li>
<li>It's easier to maintain and synchronize the state between multiple components, even if the component hierarchy changes.<br>
</li>
<li>Vuex makes direct cross-component communication possible.<br>
</li>
<li>If a component is destroyed, the state in the Vuex store will remain intact.</li>
</ul><h2>Getting Started With Vuex</h2><p>Before we get started, I want to make several things clear. </p><p>First, to follow this tutorial, you need to have a good understanding of Vue.js and its components system, or at least minimal experience with the framework. </p><p>Also, the aim of this tutorial is not to show you how to build an actual complex application; the aim is to focus your attention more on Vuex concepts and how you can use them to build complex applications. For that reason, I'm going to use very plain and simple examples, without any redundant code. Once you fully grasp the Vuex concepts, you will be able to apply them on any level of complexity.</p><p>Finally, I'll be using ES2015 syntax. If you are not familiar with it, <a href="https://babeljs.io/docs/learn-es2015/" rel="external" target="_blank">you can learn it here</a>.</p><p>And now, let's get started!</p><h2>Setting Up a Vuex Project</h2><p>The first step to get started with Vuex is to have Vue.js and Vuex installed on your machine. There are several ways to do that, but we'll use the easiest one. Just create an HTML file and add the necessary CDN links:</p><pre class="brush: html noskimlinks noskimwords">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
&lt;meta charset="UTF-8" /&gt;
&lt;!-- Put the CSS code here --&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- Put the HTML template code here --&gt;

&lt;script src="https://unpkg.com/vue"&gt;&lt;/script&gt;
&lt;script src="https://unpkg.com/vuex"&gt;&lt;/script&gt;

&lt;script&gt;
// Put the Vue code here
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</pre><p>I used some CSS to make the components look nicer, but you don't need to worry about that CSS code. It only helps you to gain a visual notion about what is going on. Just copy and paste the following inside the <code class="inline">&lt;head&gt;</code> tag:</p><pre class="brush: html noskimlinks noskimwords">&lt;style&gt;
  #app {
    background-color: yellow;
    padding: 10px;
  }
  #parent {
    background-color: green;
    width: 400px;
    height: 300px;
    position: relative;
    padding-left: 5px;
  }
  h1 {
    margin-top: 0;
  }
  .child {
    width: 150px;
    height: 150px;
    position:absolute;
    top: 60px;
    padding: 0 5px 5px;
  }
  .childA {
    background-color: red;
    left: 20px;
  }
  .childB {
    background-color: blue;
    left: 190px;
  }
&lt;/style&gt;</pre><p>Now, let's create some components to work with. Inside the <code class="inline">&lt;script&gt;</code> tag, right above the closing <code class="inline">&lt;/body&gt;</code> tag, put the following Vue code:</p><pre class="brush: javascript noskimlinks noskimwords">Vue.component('ChildB',{
  template:`
    &lt;div class="child childB"&gt;
      &lt;h1&gt; Score: &lt;/h1&gt;
    &lt;/div&gt;`
})

Vue.component('ChildA',{
  template:`
    &lt;div class="child childA"&gt;
      &lt;h1&gt; Score: &lt;/h1&gt;
    &lt;/div&gt;`
})

Vue.component('Parent',{
  template:`
    &lt;div id="parent"&gt;
      &lt;childA/&gt;
      &lt;childB/&gt;
      &lt;h1&gt; Score: &lt;/h1&gt;
    &lt;/div&gt;`
})

new Vue ({
  el: '#app'
})</pre><p>Here, we have a Vue instance, a parent component, and two child components. Each component has a heading "<strong>Score:</strong>" where we'll output the app state.</p><p>The last thing you need to do is to put a wrapping <code class="inline">&lt;div&gt;</code> with <code class="inline">id="app"</code> right after the opening <code class="inline">&lt;body&gt;</code>, and then place the parent component inside:</p><pre class="brush: html noskimlinks noskimwords">&lt;div id="app"&gt;
  &lt;parent/&gt;
&lt;/div&gt;</pre><p>The preparation work is now done, and we're ready to move on.</p><h2>Exploring Vuex</h2><h3>State Management</h3><p>In real life, we deal with complexity by using strategies to organize and structure the content we want to use. We group related things together in different sections, categories, etc. It's like a book library, in which the books are categorized and put in different sections so that we can easily find what we are looking for. Vuex arranges the application data and logic related to state in four groups or categories: state, getters, mutations, and actions.</p><p>State and mutations are the base for any Vuex store: </p><ul>
<li>
<code class="inline">state</code> is an object that holds the state of the application data.</li>
<li>
<code class="inline">mutations</code> is also an object containing methods which affect the state.</li>
</ul><p>Getters and actions are like logical projections of state and mutations:</p><ul>
<li>
<code class="inline">getters</code> contain methods used to abstract the access to the state, and to do some preprocessing jobs, if needed (data calculating, filtering, etc.).</li>
<li>
<code class="inline">actions</code> are methods used to trigger mutations and execute asynchronous code.</li>
</ul><p>Let's explore the following diagram to make things a bit clearer:</p><figure class="post_image"><img alt="Vuex State Management Workflow Diagram" data-src="https://cms-assets.tutsplus.com/uploads/users/2028/posts/30952/image/vuex_state_management_workflow_diagram.png"></figure><p>On the left side, we have an example of a Vuex store, which we'll create later on in this tutorial. On the right side, we have a Vuex workflow diagram, which shows how the different Vuex elements work together and communicate with each other.</p><p>In order to change the state, a particular Vue component must commit mutations (e.g. <code class="inline">this.$store.commit('increment', 3)</code>), and then, those mutations change the state (<code class="inline">score</code> becomes <code class="inline">3</code>). After that, the getters are automatically updated thanks to Vue's reactive system, and they render the updates in the component's view (with <code class="inline">this.$store.getters.score</code>). </p><p>Mutations cannot execute asynchronous code, because this would make it impossible to record and track the changes in debug tools like Vue DevTools. To use asynchronous logic, you need to put it in actions. In this case, a component will first dispatch actions (<code class="inline">this.$store.dispatch('incrementScore', 3000)</code>) where the asynchronous code is executed, and then those actions will commit mutations, which will mutate the state. </p><h3>Create a Vuex Store Skeleton</h3><p>Now that we've explored how Vuex works, let's create the skeleton for our Vuex store. Put the following code above the <code class="inline">ChildB</code> component registration:</p><pre class="brush: javascript noskimlinks noskimwords">const store = new Vuex.Store({
  state: {

  },
  getters: {

  },
  mutations: {

  },
  actions: {

  }
})</pre><p>To provide global access to the Vuex store from every component, we need to add the <code class="inline">store</code> property in the Vue instance:</p><pre class="brush: javascript noskimlinks noskimwords">new Vue ({
  el: '#app',
  store // register the Vuex store globally
})</pre><p>Now, we can access the store from every component with the <code class="inline">this.$store</code> variable.</p><p>So far, if you <a href="https://codepen.io/tutsplus/pen/rKyqmZ" target="_self">open the project with CodePen in the browser</a>, you should see the following result.</p><figure class="post_image"><img alt="App Skeleton" data-src="https://cms-assets.tutsplus.com/uploads/users/769/posts/30952/image/vuex1.jpg"></figure><h3>State Properties</h3><p>The state object contains all of the shared data in your application. Of course, if needed, each component can have its own private state too.</p><p>Imagine that you want to build a game application, and you need a variable to store the game's score. So you put it in the state object:</p><pre class="brush: javascript noskimlinks noskimwords">state: {
  score: 0
}</pre><p>Now, you can access the state's score directly. Let's go back to the components and reuse the data from the store. In order to be able to reuse reactive data from the store's state, you should use computed properties. So let's create a <code class="inline">score()</code> computed property in the parent component:</p><pre class="brush: javascript noskimlinks noskimwords">computed: {
  score () {
    return this.$store.state.score
  }
}</pre><p>In the parent component's template, put the <code class="inline">{{ score }}</code> expression:</p><pre class="brush: html noskimlinks noskimwords">&lt;h1&gt; Score: {{ score }} &lt;/h1&gt;</pre><p>And now, do the same for the two child components.</p><p>Vuex is so smart that it will do all the work for us to reactively update the <code class="inline">score</code> property whenever the state changes. Try to <a href="https://codepen.io/tutsplus/pen/JZWmpQ" target="_self">change the score's value</a> and see how the result updates in all three components.</p><h3>Creating Getters<br>
</h3><p>It is, of course, good that you can reuse the <code class="inline">this.$store.state</code> keyword inside the components, as you saw above. But imagine the following scenarios:</p><ol>
<li>In a large-scale application, where multiple components access the state of the store by using <code class="inline">this.$store.state.score</code>, you decide to change the name of <code class="inline">score</code>. This means that you have to change the name of the variable inside each and every component that uses it! </li>
<li>You want to use a computed value of the state. For example, let's say you want to give players a bonus of 10 points when the score reaches 100 points. So, when the score hits 100 points, 10 points bonus are added. This means each component has to contain a function that reuses the score and increments it by 10. You will have repeated code in each component, which is not good at all!</li>
</ol><p>Fortunately, Vuex offers a working solution to handle such situations. Imagine the centralized getter that accesses the store's state and provides a getter function to each of the state's items. If needed, this getter can apply some computation to the state's item. And if you need to change the names of some of the state's properties, you only change them in one place, in this getter. </p><p>Let's create a <code class="inline">score()</code> getter:<br></p><pre class="brush: javascript noskimlinks noskimwords">getters: {
  score (state){
    return state.score
  }
}</pre><p>A getter receives the <code class="inline">state</code> as its first argument, and then uses it to access the state's properties.<br></p><p>Note: Getters also receive <code class="inline">getters</code> as the second argument. You can use it to access the other getters in the store.</p><p>In all components, modify the <code class="inline">score()</code> computed property to use the <code class="inline">score()</code> getter instead of the state's score directly.</p><pre class="brush: javascript noskimlinks noskimwords">computed: {
  score () {
    return this.$store.getters.score
  }
}</pre><p>Now, if you decide to change the <code class="inline">score</code> to <code class="inline">result</code>, you need to update it only in one place: in the <code class="inline">score()</code> getter. <a href="https://codepen.io/tutsplus/pen/GGWYdj" target="_self">Try it out in this CodePen!</a></p><h3>Creating Mutations</h3><p>Mutations are the only permissible way to change the state. Triggering changes simply means committing mutations in component methods.</p><p>A mutation is pretty much an event handler function that is defined by name. Mutation handler functions receive a <code class="inline">state</code> as a first argument. You can pass an additional second argument too, which is called the <code class="inline">payload</code> for the mutation. </p><p>Let's create an <code class="inline">increment()</code> mutation:</p><pre class="brush: javascript noskimlinks noskimwords">mutations: {
  increment (state, step) {
    state.score += step
  }
}</pre><p>Mutations cannot be called directly! To perform a mutation, you should call the <code class="inline">commit()</code> method with the name of the corresponding mutation and possible additional parameters. It might be just one, like the <code class="inline">step</code> in our case, or there might be multiple ones wrapped in an object.</p><p>Let's use the <code class="inline">increment()</code> mutation in the two child components by creating a method named <code class="inline">changeScore()</code>:</p><pre class="brush: javascript noskimlinks noskimwords">methods: {
  changeScore (){
    this.$store.commit('increment', 3);
  }
}</pre><p>We are committing a mutation instead of changing <code class="inline">this.$store.state.score</code> directly, because we want to explicitly track the change made by the mutation. This way, we make our application logic more transparent, traceable, and easy to reason about. In addition, it makes it possible to implement tools, like <a href="https://github.com/vuejs/vue-devtools" target="_self">Vue DevTools</a> or <a href="http://vuetron.io/" target="_self">Vuetron</a>, that can log all mutations, take state snapshots, and perform time-travel debugging.</p><p>Now, let's put the <code class="inline">changeScore()</code> method into use. In each template of the two child components, create a button and add a click event listener to it:</p><pre class="brush: html noskimlinks noskimwords">&lt;button @click="changeScore"&gt;Change Score&lt;/button&gt;</pre><p>When you click the button, the state will be incremented by 3, and this change will be reflected in all components. Now we have effectively achieved direct cross-component communication, which is not possible with the Vue.js built-in "props down, events up" mechanism. Check it out in our <a href="https://codepen.io/tutsplus/pen/jKBeQx" target="_self">CodePen example</a>.</p><h3>Creating Actions</h3><p>An action is just a function that commits a mutation. It changes the state indirectly, which allows for the execution of asynchronous operations. </p><p>Let's create an <code class="inline">incrementScore()</code> action:<br></p><pre class="brush: javascript noskimlinks noskimwords">actions: {
  incrementScore: ({ commit }, delay) =&gt; {
    setTimeout(() =&gt; {
      commit('increment', 3)
    }, delay)
  }
}</pre><p>Actions get the <code class="inline">context</code> as the first parameter, which contains all methods and properties from the store. Usually, we just extract the parts we need by using <a href="https://github.com/lukehoban/es6features#destructuring" target="_self">ES2015 argument destructuring</a>. The <code class="inline">commit</code> method is one we need very often. Actions also get a second payload argument, just like mutations.</p><p>In the <code class="inline">ChildB</code> component, modify the <code class="inline">changeScore()</code> method:</p><pre class="brush: javascript noskimlinks noskimwords">methods: {
  changeScore (){
    this.$store.dispatch('incrementScore', 3000);
  }
}</pre><p>To call an action, we use the <code class="inline">dispatch()</code> method with the name of the corresponding action and additional parameters, just as with mutations.</p><p>Now, the <strong>Change Score</strong> button from the <code class="inline">ChildA</code> component will increment the score by 3. The identical button from the <code class="inline">ChildB</code> component will do the same, but after a delay of 3 seconds. In the first case, we're executing synchronous code and we use a mutation, but in the second case we're executing asynchronous code, and we need to use an action instead. <a href="https://codepen.io/tutsplus/pen/MXpPLz" target="_self">See how it all works in our CodePen example.</a></p><h2>Vuex Mapping Helpers<br>
</h2><p>Vuex offers some useful helpers which can streamline the process of creating state, getters, mutations, and actions. Instead of writing those functions manually, we can tell Vuex to create them for us. Let's see how it works.</p><p>Instead of writing the <code class="inline">score()</code> computed property like this:</p><pre class="brush: javascript noskimlinks noskimwords">computed: {
  score () {
    return this.$store.state.score
  }
}</pre><p>We just use the <code class="inline">mapState()</code> helper like this:</p><pre class="brush: javascript noskimlinks noskimwords">computed: {
  ...Vuex.mapState(['score'])
}</pre><p>And the <code class="inline">score()</code> property is created automatically for us.</p><p>The same is true for the getters, mutations, and actions. </p><p>To create the <code class="inline">score()</code> getter, we use the <code class="inline">mapGetters()</code> helper:</p><pre class="brush: javascript noskimlinks noskimwords">computed: {
  ...Vuex.mapGetters(['score'])
}</pre><p>To create the <code class="inline">changeScore()</code> method, we use the <code class="inline">mapMutations()</code> helper like this:</p><pre class="brush: javascript noskimlinks noskimwords">methods: {
  ...Vuex.mapMutations({changeScore: 'increment'})
}</pre><p>When used for mutations and actions with the payload argument, we must pass that argument in the template where we define the event handler:</p><pre class="brush: html noskimlinks noskimwords">&lt;button @click="changeScore(3)"&gt;Change Score&lt;/button&gt;</pre><p>If we want <code class="inline">changeScore()</code> to use an action instead of a mutation, we use <code class="inline">mapActions()</code> like this:</p><pre class="brush: javascript noskimlinks noskimwords">methods: {
  ...Vuex.mapActions({changeScore: 'incrementScore'})
}</pre><p>Again, we must define the delay in the event handler:</p><pre class="brush: html noskimlinks noskimwords">&lt;button @click="changeScore(3000)"&gt;Change Score&lt;/button&gt;</pre><p>Note: All mapping helpers return an object. So, if we want to use them in combination with other local computed properties or methods, we need to merge them into one object. Fortunately, with the object spread operator (<code class="inline">...</code>), we can do it without using any utility. </p><p>In our CodePen, <a href="https://codepen.io/tutsplus/pen/GGWYaW" target="_self">you can see an example of how all mapping helpers are used in practice</a>.</p><h2>Making the Store More Modular</h2><p>It seems that the problem with complexity constantly obstructs our way. We solved it before by creating the Vuex store, where we made the state management and component communication easy. In that store, we have everything in one place, easy to manipulate and easy to reason about. </p><p>However, as our application grows, this easy-to-manage store file becomes larger and larger and, as a result, harder to maintain. Again, we need some strategies and techniques for improving the application structure by returning it to its easy-to-maintain form. In this section, we'll explore several techniques which can help us in this undertaking.</p><h3>Using Vuex Modules</h3><p>Vuex allows us to split the store object into separate modules. Each module can contain its own state, mutations, actions, getters, and other nested modules. After we've created the necessary modules, we register them in the store.</p><p>Let's see it in action:</p><pre class="brush: javascript noskimlinks noskimwords">const childB = {
  state: {
    result: 3
  },
  getters: {
    result (state) {
      return state.result
    }
  },
  mutations: {
    increase (state, step) {
      state.result += step
    }
  },
  actions: {
    increaseResult: ({ commit }, delay) =&gt; {
      setTimeout(() =&gt; {
        commit('increase', 6)
      }, delay)
    }
  }
}

const childA = {
  state: {
    score: 0
  },
  getters: {
    score (state) {
      return state.score
    }
  },
  mutations: {
    increment (state, step) {
      state.score += step
    }
  },
  actions: {
    incrementScore: ({ commit }, delay) =&gt; {
      setTimeout(() =&gt; {
        commit('increment', 3)
      }, delay)
    }
  }
}

const store = new Vuex.Store({
  modules: {
    scoreBoard: childA,
    resultBoard: childB
  }
})</pre><p>In the above example, we created two modules, one for each child component. The modules are just plain objects, which we register as <code class="inline">scoreBoard</code> and <code class="inline">resultBoard</code> in the <code class="inline">modules</code> object inside the store. The code for <code class="inline">childA</code> is the same as that in the store from the previous examples. In the code for <code class="inline">childB</code>, we add some changes in values and names.</p><p>Let's now tweak the <code class="inline">ChildB</code> component to reflect the changes in the <code class="inline">resultBoard</code> module. </p><pre class="brush: javascript noskimlinks noskimwords">Vue.component('ChildB',{
  template:`
    &lt;div class="child childB"&gt;
      &lt;h1&gt; Result: {{ result }} &lt;/h1&gt;
      &lt;button @click="changeResult()"&gt;Change Result&lt;/button&gt;
    &lt;/div&gt;`,
  computed: {
    result () {
      return this.$store.getters.result
    }
  },
  methods: {
    changeResult () {
      this.$store.dispatch('increaseResult', 3000);
    }
  }
})</pre><p>In the <code class="inline">ChildA</code> component, the only thing we need to modify is the <code class="inline">changeScore()</code> method:</p><pre class="brush: javascript noskimlinks noskimwords">Vue.component('ChildA',{
  template:`
    &lt;div class="child childA"&gt;
      &lt;h1&gt; Score: {{ score }} &lt;/h1&gt;
      &lt;button @click="changeScore()"&gt;Change Score&lt;/button&gt;
    &lt;/div&gt;`,
  computed: {
    score () {
      return this.$store.getters.score
    }
  },
  methods: {
    changeScore () {
      this.$store.dispatch('incrementScore', 3000);
    }
  }
})</pre><p>As you can see, splitting the store into modules makes it much more lightweight and maintainable, while still keeping its great functionality. <a href="https://codepen.io/tutsplus/pen/MXpzWL" target="_self">Check out the updated CodePen to see it in action.</a></p><h3>Namespaced Modules</h3><p>If you want or need to use one and the same name for a particular property or method in your modules, then you should consider namespacing them. Otherwise you may observe some strange side effects, such as executing all the actions with the same names, or getting the wrong state's values. </p><p>To namespace a Vuex module, you just set the <code class="inline">namespaced</code> property to <code class="inline">true</code>.</p><pre class="brush: javascript noskimlinks noskimwords">const childB = {
  namespaced: true,
  state: {
    score: 3
  },
  getters: {
    score (state) {
      return state.score
    }
  },
  mutations: {
    increment (state, step) {
      state.score += step
    }
  },
  actions: {
    incrementScore: ({ commit }, delay) =&gt; {
      setTimeout(() =&gt; {
        commit('increment', 6)
      }, delay)
    }
  }
}

const childA = {
  namespaced: true,
  state: {
    score: 0
  },
  getters: {
    score (state) {
      return state.score
    }
  },
  mutations: {
    increment (state, step) {
      state.score += step
    }
  },
  actions: {
    incrementScore: ({ commit }, delay) =&gt; {
      setTimeout(() =&gt; {
        commit('increment', 3)
      }, delay)
    }
  }
}</pre><p>In the above example, we made the property and method names the same for the two modules. And now we can use a property or method prefixed with the name of the module. For example, if we want to use the <code class="inline">score()</code> getter from the <code class="inline">resultBoard</code> module, we type it like this: <code class="inline">resultBoard/score</code>. If we want the <code class="inline">score()</code> getter from the <code class="inline">scoreBoard</code> module, then we type it like this: <code class="inline">scoreBoard/score</code>. </p><p>Let's now modify our components to reflect the changes we made. </p><pre class="brush: javascript noskimlinks noskimwords">Vue.component('ChildB',{
  template:`
    &lt;div class="child childB"&gt;
      &lt;h1&gt; Result: {{ result }} &lt;/h1&gt;
      &lt;button @click="changeResult()"&gt;Change Result&lt;/button&gt;
    &lt;/div&gt;`,
  computed: {
    result () {
      return this.$store.getters['resultBoard/score']
    }
  },
  methods: {
    changeResult () {
      this.$store.dispatch('resultBoard/incrementScore', 3000);
    }
  }
})

Vue.component('ChildA',{
  template:`
    &lt;div class="child childA"&gt;
      &lt;h1&gt; Score: {{ score }} &lt;/h1&gt;
      &lt;button @click="changeScore()"&gt;Change Score&lt;/button&gt;
    &lt;/div&gt;`,
  computed: {
    score () {
      return this.$store.getters['scoreBoard/score']
    }
  },
  methods: {
    changeScore () {
      this.$store.dispatch('scoreBoard/incrementScore', 3000);
    }
  }
})</pre><p>As you can see in our <a href="https://codepen.io/tutsplus/pen/yEMQyG" target="_self">CodePen example</a>, we can now use the method or property we want and get the result we expect.</p><h3>Splitting the Vuex Store Into Separate Files</h3><p>In the previous section, we improved the application structure to some extent by separating the store into modules. We made the store cleaner and more organized, but still all of the store code and its modules lie in the same big file. </p><p>So the next logical step is to split the Vuex store into separate files. The idea is to have an individual file for the store itself and one for each of its objects, including the modules. This means having separate files for the state, getters, mutations, actions, and for each individual module (<code class="inline">store.js</code>, <code class="inline">state.js</code>, <code class="inline">getters.js</code>, etc.) You can see an example of this structure at the end of the next section.</p><h3>Using Vue Single File Components</h3><p>We've made the Vuex store as modular as we can. The next thing we can do is to apply the same strategy to the Vue.js components too. We can put each component in a single, self-contained file with a <code class="inline">.vue</code> extension. To learn how this works, you can visit the <a href="https://vuejs.org/v2/guide/single-file-components.html" target="_self">Vue Single File Components documentation page</a>. </p><p>So, in our case, we'll have three files: <code class="inline">Parent.vue</code>, <code class="inline">ChildA.vue</code>, and <code class="inline">ChildB.vue</code>. </p><p>Finally, if we combine all three techniques, we'll end up with the following or similar structure:</p><pre class="brush: plain noskimlinks noskimwords">├── index.html
└── src
    ├── main.js
    ├── App.vue
    ├── components
    │   ├── Parent.vue
    │   ├── ChildA.vue
    │   ├── ChildB.vue
    └── store
        ├── store.js
        ├── state.js
        ├── getters.js
        ├── mutations.js
        ├── actions.js
        └── modules
            ├── childA.js
            └── childB.js</pre><p>In our <a href="https://github.com/tutsplus/how-to-build-complex-large-scale-vuejs-apps-with-vuex" target="_self">tutorial GitHub repo</a>, you can see the completed project with the above structure.</p><h2>Recap</h2><p>Let's recap some main points you need to remember about Vuex:</p><p>Vuex is a state management library that helps us to build complex, large-scale applications. It uses a global, centralized store for all the components in an application. To abstract the state, we use getters. Getters are pretty much like computed properties and are an ideal solution when we need to filter or calculate something on runtime.</p><p>The Vuex store is reactive, and components cannot directly mutate the store's state. The only way to mutate the state is by committing mutations, which are synchronous transactions. Each mutation should perform only one action, must be as simple as possible, and is only responsible for updating a piece of the state.</p><p>Asynchronous logic should be encapsulated in actions. Each action can commit one or more mutations, and one mutation can be committed by more than one action. Actions can be complex, but they never change the state directly.</p><p>Finally, modularity is the key to maintainability. To deal with complexity and make our code modular, we use the "divide and conquer" principle and the code splitting technique.</p><h2>Conclusion</h2><p>That's it! You already know the main concepts behind Vuex, and you are ready to start applying them in practice.  </p><p>For the sake of brevity and simplicity, I intentionally omitted some details and features of Vuex, so you'll need to read the full <a href="https://vuex.vuejs.org/en/" target="_self">Vuex documentation</a> to learn everything about Vuex and its feature set.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-06-12T12:47:47+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Examples of Dependency Injection in PHP With Symfony Components]]></title>
      <link>//shineyrock.com/blog/read/examples-of-dependency-injection-in-php-with-symfony-components</link>
      <guid>https://shineyrock.com/blog/read/examples-of-dependency-injection-in-php-with-symfony-components#When:17:29:34Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" id="i703" class="content-block-wysi content-block">
<p>In this article, we'll look at a few examples of using the Symfony DependencyInjection component. You'll learn the basics of dependency injection, which allows clean and modular code, and you'll see how to use it in your PHP applications with the Symfony component.</p>
<h2 id="toc-mygu-what-is-the-symfony-dependencyinjection-component">What Is the Symfony DependencyInjection Component?</h2>
<p>The Symfony DependencyInjection component provides a standard way to instantiate objects and handle dependency management in your PHP applications. The heart of the DependencyInjection component is a container, which holds all the available services in the application.</p>
<p>During the bootstrapping phase of your application, you're supposed to register all services in your application into the container. At a later stage, a container is responsible for creating services as needed. More importantly, a container is also responsible for creating and injecting dependencies of the services.</p>
<p>The benefit of this approach is that you don't have to hard code the process of instantiating objects, since dependencies will be detected and injected automatically. This creates a loose coupling between parts of your application.</p>
<p>In this article, we'll explore how you can unleash the power of the DependencyInjection component. As usual, we'll start with installation and configuration instructions, and we'll implement a few real-world examples to demonstrate the key concepts.</p>
<h2 id="toc-x8ma-installation-and-configuration">Installation and Configuration</h2>
<p>In this section, we'll go ahead and install the DependencyInjection component. I assume that you've already installed Composer in your system as we'll need it to install the DependencyInjection component available at Packagist.</p>
<p>So go ahead and install the DependencyInjection component using the following command.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/dependency-injection</pre>
<p>That should have created the <strong>composer.json</strong> file, which should look like this:</p>
<pre class="brush: php noskimlinks noskimwords">{
    "require": {
        "symfony/dependency-injection": "^5.4"
    }
}</pre>
<p>We'll also install a few other components that will be useful in our examples.</p>
<p>If you want to load services from a YAML file instead of defining it in the PHP code, it's the Yaml component which comes to the rescue as it helps you to convert YAML strings to PHP-compatible data types and vice versa.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/yaml</pre>
<p>Finally, we'll install the Config component which provides several utility classes to initialize and deal with configuration values that are defined in different types of files like YAML, INI, and XML. In our case, we'll use it to load services from the YAML file.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/config</pre>
<p>Let's modify the <strong>composer.json</strong> file to look like the following one.</p>
<pre class="brush: javascript noskimlinks noskimwords">{
    "require": {
        "symfony/dependency-injection": "^5.4",
        "symfony/yaml": "^5.4",
        "symfony/config": "^5.4"
    },
    "autoload": {
         "psr-4": {
             "Services\\": "src"
         },
         "classmap": ["src"]
    }
}</pre>
<p>As we've added a new <code>classmap</code> entry, let's go ahead and update the composer autoloader by running the following command.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer dump -o</pre>
<p>Now, you can use the <code class="inline">Services</code> namespace to autoload classes under the <strong>src</strong> directory.</p>
<p>So that's the installation part, but how are you supposed to use it? In fact, it's just a matter of including the <strong>autoload.php</strong> file created by Composer in your application, as shown in the following snippet.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

// application code
?&gt;</pre>
<h2 id="toc-g46e-how-to-work-with-a-container">How to Work With a Container</h2>
<p>In this section, we'll go through an example to demonstrate how you could inject services into a container. A container should act as a central repository which holds all services in your application. Later on, we could use a container to fetch services as needed.</p>
<p>To start with, let's go ahead and define a pretty basic service at <strong>src/DemoService.php</strong> with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
// src/DemoService.php
namespace Services;

class DemoService
{
  public function helloWorld()
  {
    return "Hello World!\n";
  }
}</pre>
<p>This is a very simple service, which just implements the <code class="inline">helloWorld</code> method for the moment.</p>
<p>Next, go ahead and create the <strong>basic_container.php</strong> file with the following contents in the root of your application.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
// basic_container.php
require_once './vendor/autoload.php';
use Symfony\Component\DependencyInjection\ContainerBuilder;

// init service container
$containerBuilder = new ContainerBuilder();

// add service into the service container
$containerBuilder-&gt;register('demo.service', '\Services\DemoService');

// fetch service from the service container
$demoService = $containerBuilder-&gt;get('demo.service');
echo $demoService-&gt;helloWorld();</pre>
<p>To start with, we've instantiated the <code class="inline">ContainerBuilder</code> object with the <code class="inline">new ContainerBuilder()</code> constructor. Next, we used the <code class="inline">register</code> method of the <code class="inline">ContainerBuilder</code> object to inject our custom service <code class="inline">\Services\DemoService</code> into the container. The <code class="inline">demo.service</code> acts as an alias to our service.</p>
<p>Finally, we've used the <code class="inline">get</code> method of the <code class="inline">ContainerBuilder</code> object to fetch our service from the container and used it to call the <code class="inline">helloWorld</code> method.</p>
<p>So that was a basic demonstration of how to work with a container. In the next section, we'll extend this example to explore how the class dependencies are resolved using a container.</p>
<h2 id="toc-0th6-a-real-world-example">A Real-World Example</h2>
<p>In this section, we'll create an example which demonstrates how class dependencies are resolved using the DependencyInjection component.</p>
<p>To demonstrate it, we'll create a new service <code class="inline">DependentService</code> which requires the <code class="inline">DemoService</code> service, created in the previous section, as a dependency. Thus, we'll see how the <code class="inline">DemoService</code> service is automatically injected as a dependency when the <code class="inline">DependentService</code> service is instantiated.</p>
<p>Go ahead and create the <strong>src/DependentService.php</strong> file with the following contents to define the <code class="inline">DependentService</code> service.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
// src/DependentService.php
namespace Services;

class DependentService
{
  private $demo_service;

  public function __construct(\Services\DemoService $demoService)
  {
    $this-&gt;demo_service = $demoService;
  }

  public function helloWorld()
  {
    return $this-&gt;demo_service-&gt;helloWorld();
  }
}</pre>
<p>As you can see, the <code class="inline">\Services\DemoService</code> service is required in order to instantiate the <code class="inline">DependentService</code> service.</p>
<p>Next, go ahead and create the <strong>di_container.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
// di_container.php
require_once './vendor/autoload.php';
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Reference;

// init service container
$containerBuilder = new ContainerBuilder();

// add demo service into the service container
$containerBuilder-&gt;register('demo.service', '\Services\DemoService');

// add dependent service into the service container
$containerBuilder-&gt;register('dependent.service', '\Services\DependentService')
                 -&gt;addArgument(new Reference('demo.service'));

// fetch service from the service container
$dependentService = $containerBuilder-&gt;get('dependent.service');
echo $dependentService-&gt;helloWorld();</pre>
<p>We're using the same <code class="inline">register</code> method to inject our custom service <code class="inline">\Services\DependentService</code> into the container.</p>
<p>In addition to that, we've also used the <code class="inline">addArgument</code> method to inform the container about the dependency of the <code class="inline">DependentService</code> service. We've used the <code class="inline">Reference</code> class to inform the container that it needs to inject the <code class="inline">demo.service</code> service when the <code class="inline">dependent.service</code> service is instantiated. In that way, a dependency is automatically injected as needed!</p>
<p>Finally, we've used the <code class="inline">get</code> method of the <code class="inline">ContainerBuilder</code> object to fetch the <code class="inline">dependent.service</code> service from the <code class="inline">ContainerBuilder</code> object and used it to call the <code class="inline">helloWorld</code> method.</p>
<p>In this way, the DependencyInjection component provides a standard way to instantiate objects and inject dependencies in your application.</p>
<h2 id="toc-2qvd-how-to-dynamically-load-services-using-the-yaml-file">How to Dynamically Load Services Using the YAML File</h2>
<p>In this section, we'll explore how you could dynamically load services from the YAML file. Basically, we'll update the example discussed in the previous section.</p>
<p>In addition to the DependencyInjection component, we'll also need two more Symfony components to implement the YAML example—Config and Yaml. Recall that we've already installed these two components in the <strong>Installation and Configuration</strong> section along with the DependencyInjection component itself. So we're good to go!</p>
<p>Go ahead and create the <strong>services.yaml</strong> file with the following contents in the root of your application.</p>
<pre class="brush: plain noskimlinks noskimwords">services:
    demo.service:
        class:     \Services\DemoService
    dependent.service:
        class:     \Services\DependentService
        arguments: ["@demo.service"]</pre>
<p>As you can see, it's pretty straightforward to define services using the YAML syntax. To define the dependencies of your service, you'll need to use the <code class="inline">arguments</code> key.</p>
<p>Next, go ahead and create the <strong>di_yaml_container.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
// di_yaml_container.php
require_once './vendor/autoload.php';
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;

// init service container
$containerBuilder = new ContainerBuilder();

// init yaml file loader
$loader = new YamlFileLoader($containerBuilder, new FileLocator(__DIR__));

// load services from the yaml file
$loader-&gt;load('services.yaml');

// fetch service from the service container
$serviceOne = $containerBuilder-&gt;get('dependent.service');
echo $serviceOne-&gt;helloWorld();</pre>
<p>Everything is pretty much the same except that we're loading services from the <strong>services.yaml</strong> file instead of defining it in the PHP code itself. This allows the application dependencies to be defined dynamically.</p>
<h2 id="toc-73lh-how-to-inject-a-lazy-service">How to Inject a Lazy Service</h2>
<p>In some cases, you want to inject a lazy service. Sometimes, you have a service which is very heavy to instantiate. So you only want such a service to be injected when it's <em>really</em> needed, and not before that. The answer to this question is a lazy service.</p>
<p>But how does this work exactly? In fact, when you configure a lazy service, instead of injecting the actual service, a proxy of the service is injected. On the surface, a proxy service acts like the actual service, but as soon as you start interacting with the proxy service, the actual service is instantiated.</p>
<p>To use lazy services, we need to install the <code>symfony/proxy-manager-bridge</code> package. Let's do that in the first place.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/proxy-manager-bridge</pre>
<p>Next, we'll revise the <strong>di_container.php </strong>example to understand how to use the proxy manager to create and inject a proxy service.</p>
<p>Go ahead and replace the code of the <strong>di_container.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

use ProxyManager\Factory\LazyLoadingValueHolderFactory;
use ProxyManager\Proxy\LazyLoadingInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

// code for creating proxy starts
$factory     = new LazyLoadingValueHolderFactory();
$initializer = function (&amp; $wrappedObject, LazyLoadingInterface $proxy, $method, array $parameters, &amp; $initializer) {
    global $containerBuilder;
    $initializer   = null; // disable initialization
    $wrappedObject = $containerBuilder-&gt;get('demo.service'); // fill your object with values here

    return true; // confirm that initialization occurred correctly
};
$proxy = $factory-&gt;createProxy('\Services\DemoService', $initializer);
// code for creating proxy ends

global $containerBuilder;
$containerBuilder = new ContainerBuilder();
$containerBuilder-&gt;register('demo.service', '\Services\DemoService');
$containerBuilder-&gt;register('dependent.service', '\Services\DependentService')-&gt;addArgument($proxy);
$dependentService = $containerBuilder-&gt;get('dependent.service');

echo $dependentService-&gt;helloWorld();</pre>
<p>Firstly, we've created an instance of the <code>LazyLoadingValueHolderFactory</code> class. Next, we've used the <code>createProxy</code> method of this class to define how the instance of the <code>\Services\DemoService</code> class will be created. The second argument of the <code>createProxy</code> method is an anonymous function, which will be called when the actual instance of the class needs to be instantiated instead of a proxy object. And thus, the anonymous function handles the logic of creating an actual instance.</p>
<p>Apart from that, it's pretty much the same. Once the proxy instance is created, we'll pass it in the <code>addArgument</code> method, instead of creating an instance with the <code>Reference</code> class.</p>
<p>The benefit of this approach is that whenever we create an instance of the <code>\Services\DependentService</code> class, it won't create the actual object of the <code>\Services\DemoService</code> class—instead, it'll create a proxy object. The actual object of the <code>\Services\DemoService</code> class will be created only when you call any method of it.</p>
<p>To confirm it, you can just dump the <code>$dependentService</code> object, and you should see something like this.</p>
<pre class="brush: perl noskimlinks noskimwords">Services\DependentService Object
(
    [demo_service:Services\DependentService:private] =&gt; ProxyManagerGeneratedProxy\__PM__\Services\DemoService\Generatedccdf8241e892da36c12500ed72d82829 Object
        (
            [valueHoldera1fd8:ProxyManagerGeneratedProxy\__PM__\Services\DemoService\Generatedccdf8241e892da36c12500ed72d82829:private] =&gt;
            [initializere3996:ProxyManagerGeneratedProxy\__PM__\Services\DemoService\Generatedccdf8241e892da36c12500ed72d82829:private] =&gt; Closure Object
                (
                    [parameter] =&gt; Array
                        (
                            [&amp;$wrappedObject] =&gt; &lt;required&gt;
                            [$proxy] =&gt; &lt;required&gt;
                            [$method] =&gt; &lt;required&gt;
                            [$parameters] =&gt; &lt;required&gt;
                            [&amp;$initializer] =&gt; &lt;required&gt;
                        )

                )

        )

)</pre>
<p>As you can see, it has created the proxy object instead of the actual <code>\Services\DemoService</code> object.</p>
<p>If you hadn't used the proxy method, the output would have been like this.</p>
<pre class="brush: php noskimlinks noskimwords">Services\DependentService Object
(
    [demo_service:Services\DependentService:private] =&gt; Services\DemoService Object
        (
        )

)
</pre>
<p>As you can see, it has created an instance of the <code>\Services\DemoService</code> class. So that's how lazy loading of services works!</p>
<h2 id="toc-14zy-conclusion">Conclusion</h2>
<p>The Symfony DependencyInjection component took center stage in this tutorial. We saw how to install and configure DependencyInjection, as well as some real-world examples of how it can be used.</p>
<p>I'm really fascinated and excited about the decoupled components of the Symfony framework that you can just pick and choose for your application. Plug them into your code, and they just work! All in all, I can only see the benefits of this framework approach for our PHP community.</p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-06-08T17:29:34+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Set Up Routing in PHP Applications Using the Symfony Routing Component]]></title>
      <link>//shineyrock.com/blog/read/set-up-routing-in-php-applications-using-the-symfony-routing-component</link>
      <guid>https://shineyrock.com/blog/read/set-up-routing-in-php-applications-using-the-symfony-routing-component#When:17:29:33Z</guid>
      <description><![CDATA[<style>* { box-sizing: border-box; } body {margin: 0;}*{box-sizing:border-box;}body{margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;}</style><div data-content-block-type="Wysi" id="isd1k" class="content-block-wysi content-block">
<h2 id="toc-l2um-what-is-the-symfony-routing-component">What Is the Symfony Routing Component?</h2>
<p>The Symfony Routing Component is a very popular Routing component which is adapted by several frameworks and provides a lot of flexibility should you wish to set up routes in your PHP application.</p>
<p>If you've built a custom PHP application and are looking for a feature-rich routing library, the Symfony Routing component is one of the best candidates. It also allows you to define routes for your application in the YAML format.</p>
<p>Starting with installation and configuration, we'll go through real-world examples to demonstrate a variety of options the component has for route configuration. In this article, you'll learn:</p>
<ul>
<li class="toc-item-title"><a href="#toc-hldh-installation-and-configuration"><span>Installation and Configuration of the Symfony Routing Component</span></a></li>
<li class="toc-item-title"><a href="#toc-vlfl-set-up-basic-routes"><span>How to Set Up Basic Routes</span></a></li>
<li class="toc-item-title"><a href="#toc-7vpf-load-routes-from-the-yaml-file"><span>How to Load Routes From the YAML File</span></a></li>
<li class="toc-item-title"><a href="#toc-th1b-creating-routes-as-annotations-the-recommended-way"><span>Creating Routes as Annotations: The Recommended Way</span></a></li>
</ul>
<h2 id="toc-hldh-installation-and-configuration">Installation and Configuration</h2>
<p>In this section, we're going to install the libraries that are required in order to set up routing in your PHP applications. I assume that you've installed Composer in your system as we'll need it to install the necessary libraries that are available on Packagist.</p>
<p>Once you've installed Composer, go ahead and install the core Routing component using the following command.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/routing</pre>
<p>Although the Routing component itself is sufficient to provide comprehensive routing features in your application, we'll go ahead and install a few other components as well to make our life easier and enrich the existing core routing functionality.</p>
<p>To start with, we'll go ahead and install the HttpFoundation component, which provides an object-oriented wrapper for PHP global variables and response-related functions. It makes sure that you don't need to access global variables like <code class="inline">$_GET</code>, <code class="inline">$_POST</code> and the like directly.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/http-foundation</pre>
<p>Next, if you want to define your application routes in the YAML file instead of the PHP code, it's the YAML component which comes to the rescue as it helps you to convert YAML strings to PHP arrays and vice versa.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/yaml</pre>
<p>Finally, we'll install the Config component, which provides several utility classes to initialize and deal with configuration values defined in the different types of file like YAML, INI, XML, etc. In our case, we'll use it to load routes from the YAML file.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/config</pre>
<p>So that's the installation part, but how are you supposed to use it? In fact, it's just a matter of including the <strong>autoload.php</strong> file created by Composer in your application, as shown in the following snippet.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

// application code
?&gt;</pre>
<h2 id="toc-vlfl-set-up-basic-routes">Set Up Basic Routes</h2>
<p>In the previous section, we went through the installation of the necessary routing components. Now, you're ready to set up routing in your PHP application right away.</p>
<p>Let's go ahead and create the <strong>basic_routes.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

try
{
    // Init basic route
    $foo_route = new Route(
      '/foo',
      array('controller' =&gt; 'FooController')
    );

    // Init route with dynamic placeholders
    $foo_placeholder_route = new Route(
      '/foo/{id}',
      array('controller' =&gt; 'FooController', 'method'=&gt;'load'),
      array('id' =&gt; '[0-9]+')
    );

    // Add Route object(s) to RouteCollection object
    $routes = new RouteCollection();
    $routes-&gt;add('foo_route', $foo_route);
    $routes-&gt;add('foo_placeholder_route', $foo_placeholder_route);

    // Init RequestContext object
    $context = new RequestContext();
    $context-&gt;fromRequest(Request::createFromGlobals());

    // Init UrlMatcher object
    $matcher = new UrlMatcher($routes, $context);

    // Find the current route
    $parameters = $matcher-&gt;match($context-&gt;getPathInfo());

    // How to generate a SEO URL
    $generator = new UrlGenerator($routes, $context);
    $url = $generator-&gt;generate('foo_placeholder_route', array(
      'id' =&gt; 123,
    ));

    echo '&lt;pre&gt;';
    print_r($parameters);

    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e-&gt;getMessage();
}</pre>
<p>Setting up routing using the Symfony Routing component usually goes through a series of steps as listed below.</p>
<ul>
<li>Initialize the <code class="inline">Route</code> object for each of your application routes.</li>
<li>Add all <code class="inline">Route</code> objects to the <code class="inline">RouteCollection</code> object.</li>
<li>Initialize the <code class="inline">RequestContext</code> object which holds the current request context information.</li>
<li>Initialize the <code class="inline">UrlMatcher</code> object by passing the <code class="inline">RouteCollection</code> object and the <code class="inline">RequestContext</code> object.</li>
</ul>
<h4 id="toc-x5ol-initialize-the-route-object-for-different-routes">Initialize the Route Object for Different Routes</h4>
<p>Let's go ahead and define a pretty basic <code class="inline">foo</code> route.</p>
<pre class="brush: php noskimlinks noskimwords">$foo_route = new Route(
  '/foo',
  array('controller' =&gt; 'FooController')
);</pre>
<p>The first argument of the <code class="inline">Route</code> constructor is the URI path, and the second argument is the array of custom attributes that you want to return when this particular route is matched. Typically, it would be a combination of the controller and method which you would like to call when this route is requested.</p>
<p>Next, let's have a look at the parameterized route.</p>
<pre class="brush: php noskimlinks noskimwords">$foo_placeholder_route = new Route(
  '/foo/{id}',
  array('controller' =&gt; 'FooController', 'method'=&gt;'load'),
  array('id' =&gt; '[0-9]+')
);</pre>
<p>The above route can match URIs like <code class="inline">foo/1</code>, <code class="inline">foo/123</code> and similar. Please note that we've restricted the <code class="inline">{id}</code> parameter to numeric values only, and hence it won't match URIs like <code class="inline">foo/bar</code> since the <code class="inline">{id}</code> parameter is provided as a string.</p>
<h4 id="toc-jg9k-add-all-route-objects-to-the-routecollection-object">Add All Route Objects to the RouteCollection Object</h4>
<p>The next step is to add route objects that we've initialized in the previous section to the <code class="inline">RouteCollection</code> object.</p>
<pre class="brush: php noskimlinks noskimwords">$routes = new RouteCollection();
$routes-&gt;add('foo_route', $foo_route);
$routes-&gt;add('foo_placeholder_route', $foo_placeholder_route);</pre>
<p>As you can see, it's pretty straightforward as you just need to use the <code class="inline">add</code> method of the <code class="inline">RouteCollection</code> object to add route objects. The first argument of the <code class="inline">add</code> method is the name of the route, and the second argument is the route object itself.</p>
<h4 id="toc-vf1k-initialize-the-requestcontext-object">Initialize the <code class="inline">RequestContext</code> Object</h4>
<p>Next, we need to initialize the <code class="inline">RequestContext</code> object, which holds the current request context information. We'll need this object when we initialize the <code class="inline">UrlMatcher</code> object as we'll go through it in a moment.</p>
<pre class="brush: php noskimlinks noskimwords">$context = new RequestContext();
$context-&gt;fromRequest(Request::createFromGlobals());</pre>
<h4 id="toc-nggs-initialize-the-urlmatcher-object">Initialize the <code class="inline">UrlMatcher</code> Object</h4>
<p>Finally, we need to initialize the <code class="inline">UrlMatcher</code> object along with routes and context information.</p>
<pre class="brush: php noskimlinks noskimwords">// Init UrlMatcher object
$matcher = new UrlMatcher($routes, $context);</pre>
<p>Now, we have everything we could match our routes against.</p>
<h3 id="toc-3961-how-to-match-routes">How to Match Routes</h3>
<p>It's the <code class="inline">match</code> method of the <code class="inline">UrlMatcher</code> object which allows you to match any route against a set of predefined routes.</p>
<p>The <code class="inline">match</code> method takes the URI as its first argument and tries to match it against predefined routes. If the route is found, it returns custom attributes associated with that route. On the other hand, it throws the <code class="inline">ResourceNotFoundException</code> exception if there's no route associated with the current URI.</p>
<pre class="brush: php noskimlinks noskimwords">$parameters = $matcher-&gt;match($context-&gt;getPathInfo());</pre>
<p>In our case, we've provided the current URI by fetching it from the <code class="inline">$context</code> object. So, if you're accessing the <a href="https://your-domain/basic_routes.php/foo">https://your-domain/basic_routes.php/foo</a> URL, the <code class="inline">$context-&gt;getPathInfo()</code> returns <code class="inline">foo</code>, and we've already defined a route for the <code class="inline">foo</code> URI, so it should return us the following.</p>
<pre class="brush: php noskimlinks noskimwords">Array
(
    [controller] =&gt; FooController
    [_route] =&gt; foo_route
)</pre>
<p>Now, let's go ahead and test the parameterized route by accessing the <a href="http://your-domain/basic_routes.php/foo/123">http://your-domain/basic_routes.php/foo/123</a> URL.</p>
<pre class="brush: php noskimlinks noskimwords">Array
(
    [controller] =&gt; FooController
    [method] =&gt; load
    [id] =&gt; 123
    [_route] =&gt; foo_placeholder_route
)</pre>
<p>It worked if you can see that the <code class="inline">id</code> parameter is bound with the appropriate value <code class="inline">123</code>.</p>
<p>Next, let's try to access a non-existent route like <a href="http://your-domain/basic_routes.php/unknown-route">http://your-domain/basic_routes.php/unknown-route</a>, and you should see the following message.</p>
<pre class="brush: php noskimlinks noskimwords">No routes found for "/unknown-route".</pre>
<p>So that's how you can find routes using the <code class="inline">match</code> method.</p>
<p>Apart from this, you could also use the Routing component to generate links in your application. Provided <code class="inline">RouteCollection</code> and <code class="inline">RequestContext</code> objects, the <code class="inline">UrlGenerator</code> allows you to build links for specific routes.</p>
<pre class="brush: php noskimlinks noskimwords">$generator = new UrlGenerator($routes, $context);
$url = $generator-&gt;generate('foo_placeholder_route', array(
  'id' =&gt; 123,
));</pre>
<p>The first argument of the <code class="inline">generate</code> method is the route name, and the second argument is the array which may contain parameters if it's the parameterized route. The above code should generate the <strong>/basic_routes.php/foo/123</strong> URL.</p>
<h2 id="toc-7vpf-load-routes-from-the-yaml-file">Load Routes From the YAML File</h2>
<p>In the previous section, we built our custom routes using the <code class="inline">Route</code> and <code class="inline">RouteCollection</code> objects. In fact, the Routing component offers different ways you could choose from to instantiate routes. You could choose from various loaders like <code class="inline">YamlFileLoader</code>, <code class="inline">XmlFileLoader</code>, and <code class="inline">PhpFileLoader</code>.</p>
<p>In this section, we'll go through the <code class="inline">YamlFileLoader</code> loader to see how to load routes from the YAML file.</p>
<h3 id="toc-70xl-the-routes-yaml-file">The Routes YAML File</h3>
<p>Go ahead and create the <strong>routes.yaml</strong> file with the following contents.</p>
<pre class="brush: plain noskimlinks noskimwords">foo_route:
    path:     /foo
    controller: App\Controller\FooController::index
    methods:    GET

foo_placeholder_route:
    path:     /foo/{id}
    controller: App\Controller\FooController::load
    methods:    GET
    requirements:
        id: '[0-9]+'</pre>
<h3 id="toc-10s9-an-example-file">An Example File</h3>
<p>Next, go ahead and make the <strong>load_routes_from_yaml.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

try
{
    // Load routes from the yaml file
    $fileLocator = new FileLocator(array(__DIR__));
    $loader = new YamlFileLoader($fileLocator);
    $routes = $loader-&gt;load('routes.yaml');

    // Init RequestContext object
    $context = new RequestContext();
    $context-&gt;fromRequest(Request::createFromGlobals());

    // Init UrlMatcher object
    $matcher = new UrlMatcher($routes, $context);

    // Find the current route
    $parameters = $matcher-&gt;match($context-&gt;getPathInfo());

    // How to generate a SEO URL
    $generator = new UrlGenerator($routes, $context);
    $url = $generator-&gt;generate('foo_placeholder_route', array(
      'id' =&gt; 123,
    ));

    echo '&lt;pre&gt;';
    print_r($parameters);

    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e-&gt;getMessage();
}</pre>
<p>The only thing that's different in this case is the way we initialize routes!</p>
<pre class="brush: php noskimlinks noskimwords">$fileLocator = new FileLocator(array(__DIR__));
$loader = new YamlFileLoader($fileLocator);
$routes = $loader-&gt;load('routes.yaml');</pre>
<p>We've used the <code class="inline">YamlFileLoader</code> loader to load routes from the <strong>routes.yaml</strong> file instead of initializing it directly in the PHP itself. Apart from that, everything is the same and should produce the same results as that of the <strong>basic_routes.php</strong> file.</p>
<h2 id="toc-wx34-the-all-in-one-router">The All-in-One Router</h2>
<p>In this section, we'll go through the <code class="inline">Router</code> class, which allows you to set up routing quickly with fewer lines of code.</p>
<p>Go ahead and make the <strong>all_in_one_router.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
require_once './vendor/autoload.php';

use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\Router;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Generator\UrlGenerator;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\YamlFileLoader;
use Symfony\Component\Routing\Exception\ResourceNotFoundException;

try
{
    $fileLocator = new FileLocator(array(__DIR__));

    $requestContext = new RequestContext();
    $requestContext-&gt;fromRequest(Request::createFromGlobals());

    $router = new Router(
        new YamlFileLoader($fileLocator),
        'routes.yaml',
        array('cache_dir' =&gt; __DIR__.'/cache'),
        $requestContext
    );

    // Find the current route
    $parameters = $router-&gt;match($requestContext-&gt;getPathInfo());

    // How to generate a SEO URL
    $routes = $router-&gt;getRouteCollection();
    $generator = new UrlGenerator($routes, $requestContext);
    $url = $generator-&gt;generate('foo_placeholder_route', array(
      'id' =&gt; 123,
    ));

    echo '&lt;pre&gt;';
    print_r($parameters);

    echo 'Generated URL: ' . $url;
    exit;
}
catch (ResourceNotFoundException $e)
{
  echo $e-&gt;getMessage();
}</pre>
<p>Everything is pretty much the same, except that we've instantiated the <code class="inline">Router</code> object along with the necessary dependencies.</p>
<pre class="brush: php noskimlinks noskimwords">$router = new Router(
    new YamlFileLoader($fileLocator),
    'routes.yaml',
    array('cache_dir' =&gt; __DIR__.'/cache'),
    $requestContext
);</pre>
<p>With that in place, you can straight away use the <code class="inline">match</code> method of the Router object for route mapping.</p>
<pre class="brush: php noskimlinks noskimwords">$parameters = $router-&gt;match($requestContext-&gt;getPathInfo());</pre>
<p>Also, you will need to use the <code class="inline">getRouteCollection</code> method of the Router object to fetch routes.</p>
<pre class="brush: php noskimlinks noskimwords">$routes = $router-&gt;getRouteCollection();</pre>
<h2 id="toc-th1b-creating-routes-as-annotations-the-recommended-way">Creating Routes as Annotations: The Recommended Way</h2>
<p>In this section, we'll discuss how you can implement annotation-based routing. It's becoming one of the most popular ways to define routes among different frameworks.</p>
<p>Before we go ahead and implement annotation-based routing, we need to install a couple of packages. Let's do it quickly as shown in the following snippet.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer require symfony/framework-bundle
$composer require doctrine/annotations
$composer require doctrine/cache</pre>
<p>As you can see, we've installed three different components.</p>
<p>In your <strong>composer.json </strong>file, add the following:</p>
<pre class="brush: plain noskimlinks noskimwords">"autoload": {
    "psr-4": {
        "App\\": "app/"
    }
}</pre>
<p>Now, run the following.</p>
<pre class="brush: bash noskimlinks noskimwords">$composer dump-autoload</pre>
<p>Now, we are ready to prepare the files.</p>
<p>Go ahead and create the <strong>index.php</strong> file with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
use Doctrine\Common\Annotations\AnnotationReader;
use Symfony\Bundle\FrameworkBundle\Routing\AnnotatedRouteControllerLoader;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Routing\Loader\AnnotationDirectoryLoader;
use Composer\Autoload\ClassLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

use Symfony\Component\Routing\RequestContext;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Matcher\UrlMatcher;

/** @var ClassLoader $loader */
$loader = require __DIR__ . '/vendor/autoload.php';

AnnotationRegistry::registerLoader([$loader, 'loadClass']);

$loader = new AnnotationDirectoryLoader(
    new FileLocator(__DIR__ . '/src/Controller/'),
    new AnnotatedRouteControllerLoader(
        new AnnotationReader()
    )
);

$routes = $loader-&gt;load(__DIR__ . '/src/Controller/');
$context = new RequestContext();
$context-&gt;fromRequest(Request::createFromGlobals());

$matcher = new UrlMatcher($routes, $context);
$parameters = $matcher-&gt;match($context-&gt;getPathInfo());

$controllerInfo = explode('::',$parameters['_controller']);

$controller = new $controllerInfo[0];
$action = $controllerInfo[1];

$controller-&gt;$action();</pre>
<p>Now, let's create the controller file at <strong>src/Controller/FooController.php</strong> with the following contents.</p>
<pre class="brush: php noskimlinks noskimwords">&lt;?php
namespace App\Controller;

use Symfony\Component\Routing\Annotation\Route;

class DefaultController
{
    /**
     * @Route("/",name="index")
     */
    public function index()
    {
        echo "Index action";
    }

    /**
     * @Route("/hello",name="hello")
     */
    public function hello()
    {
        echo "Hello action";
    }
}</pre>
<p>You may have noticed that we've defined routes for each method in the form of an annotation. The benefit of this approach is that it allows you to define routes next to the code of the controllers associated with those routes.</p>
<p>Go ahead and access the <strong>https://your-domain/index.php/</strong> URL. As per the following routing configuration, it should call the <code>index</code> method.</p>
<pre class="brush: plain noskimlinks noskimwords">/**
 * @Route("/",name="index")
 */</pre>
<p>On the other hand, if you try to access the <strong>http://your-domain/index.php/hello</strong> URL, it should call the <code>hello</code> method of the <code>DefaultController</code> controller class.</p>
<p>So that's how annotation-based routing works!</p>
<h2 id="toc-k01h-conclusion">Conclusion</h2>
<p>Go ahead and explore the other options available in the Routing component.</p>
<p>Today, we explored the Symfony Routing component, which makes implementation of routing in PHP applications a breeze. Along the way, we created a handful of examples to demonstrate various aspects of the Routing component. </p>
</div>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-28T17:29:33+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[A Beginner&#8217;s Guide to Regular Expressions in JavaScript]]></title>
      <link>//shineyrock.com/blog/read/a-beginners-guide-to-regular-expressions-in-javascript</link>
      <guid>https://shineyrock.com/blog/read/a-beginners-guide-to-regular-expressions-in-javascript#When:13:00:00Z</guid>
      <description><![CDATA[<p>Everyone working with JavaScript will have to deal with strings at one point or other. Sometimes, you will just have to store a string inside another variable and then pass it over. Other times, you will have to inspect it and see if it contains a particular substring.</p><p>However, things are not always this easy. There will be times when you will not be looking for a particular substring but a set of substrings which follow a certain pattern.</p><p>Let's say you have to replace all occurrences of "Apples" in a string with "apples". You could simply use <code class="inline">theMainString.replace("Apples", "apples")</code>. Nice and easy. <br></p><p>Now let's say you have to replace "appLes" with "apples" as well. Similarly, "appLES" should become "apples" too. Basically, all case variations of "Apple" need to be changed to "apple". Passing simple strings as an argument will no longer be practical or efficient in such cases.</p><p>This is where regular expressions come in—you could simply use the case-insensitive flag <code class="inline">i</code> and be done with it. With the flag in place, it doesn't matter if the original string contained "Apples", "APPles", "ApPlEs", or "Apples". Every instance of the word will be replaced with "apples".</p><p>Just like the case-insensitive flag, regular expressions offer a lot of other features which will be covered in this tutorial. <br></p><h2>Using Regular Expressions in JavaScript</h2><p>You have to use a slightly different syntax to indicate a regular expression inside different <code class="inline">String</code> methods. Unlike a simple string, which is enclosed in quotes, a regular expression consists of a pattern enclosed between slashes. Any flags that you use in a regular expression will be appended after the second slash.</p><p>Going back to the previous example, here is what the <code class="inline">replace()</code> method would look like with a regular expression and a simple string.</p><pre class="brush: javascript noskimlinks noskimwords">"I ate Apples".replace("Apples", "apples");
// I ate apples

"I ate Apples".replace(/Apples/i, "apples");
// I ate apples

"I ate aPPles".replace("Apples", "apples");
// I ate aPPles

"I ate aPPles".replace(/Apples/i, "apples");
// I ate apples</pre><p>As you can see, the regular expression worked in both cases. We will now learn more about flags and special characters that make up the pattern inside a regular expression.</p><h2>Backslash in Regular Expressions</h2><p>You can turn normal characters into special characters by adding a backslash before them. Similarly, you can turn special characters into normal characters by adding a backslash before them.</p><p>For example, <code class="inline">d</code> is not a special character. However, <code class="inline">\d</code> is used to match a digit character in a string. Similarly, <code class="inline">D</code> is not a special character either, but <code class="inline">\D</code> is used to match non-digit characters in a string.</p><p>Digit characters include 0, 1, 2, 3, 4, 5, 6, 7, 8, and 9. When you use <code class="inline">\d</code> inside a regular expression, it will match any of these nine characters. When you use <code class="inline">\D</code> inside a regular expression, it will match all the non-digit characters.</p><p>The following example should make things clear.<br></p><pre class="brush: javascript noskimlinks noskimwords">"L8".replace(/\d/i, "E");
// LE

"L8".replace(/\D/i, "E");
// E8

"LLLLL8".replace(/\D/i, "E");
// ELLLL8</pre><p> You should note that only the first matched character is replaced in the third case. You can also use flags to replace all the matches. We will learn about such flags later.<br></p><p>Just like <code class="inline">\d</code> and <code class="inline">\D</code>, there are other special character sequences as well.</p><ol>
<li>You can use <code class="inline">\w</code> to match any "word" character in a string. Here, word character refers to A-Z, a-z, 0-9, and _. So, basically, it will match all digits, all lowercase and uppercase alphabets, and the underscore.</li>
<li>You can use <code class="inline">\W</code> to match any non-word character in a string. It will match characters like %, $, #, ₹, etc.</li>
<li>You can use <code class="inline">\s</code> to match a single white space character, which includes space, tab, form feed, and line feed. Similarly, you can use <code class="inline">\S</code> to match all other characters besides white space.</li>
<li>You can also look for a specific white space character using <code class="inline">\f</code>, <code class="inline">\n</code>, <code class="inline">\r</code>, <code class="inline">\t</code>, and <code class="inline">\v</code>, which stand for form feed, line feed, carriage return, horizontal tab, and vertical tab.</li>
</ol><p>Sometimes, you will face situations where you need to replace a word with its substitute, but only if it is <em>not</em><strong> </strong>part of a larger word. For example, consider the following sentence:</p><p>"A lot of pineapple images were posted on the app".</p><p>In this case, we want to replace the word "app" with "board". However, using a simple regular expression pattern will turn "apple" into "boardle", and the final sentence would become:</p><p>"A lot of pineboardle images were posted on the app".</p><p>In such cases, you can use another special character sequence: <code class="inline">\b</code>. This checks for word boundaries. A word boundary is formed by use of any non-word characters like space, "$", "%", "#", etc. Watch out, though—it also includes accented characters like "ü".</p><pre class="brush: javascript noskimlinks noskimwords">"A lot of pineapple images were posted on the app".replace(/app/, "board");
// A lot of pineboardle images were posted on the app

"A lot of pineapple images were posted on the app".replace(/\bapp/, "board");
// A lot of pineapple images were posted on the board</pre><p>Similarly, you can use<strong> </strong><code class="inline">\B</code> to match a non-word boundary. For example, you could use <code class="inline">\B</code> to only match "app" when it is within another word, like "pineapple".</p><h2>Matching a Pattern "n" Number of Times<br>
</h2><p>You can use <code class="inline">^</code> to tell JavaScript to only look at the beginning of the string for a match. Similarly, you can use <code class="inline">$</code> to only look at the end of the string for a match.</p><p>You can use <code class="inline">*</code><strong> </strong>to match the preceding expression 0 or more times. For example, <code class="inline">/Ap*/</code> will match <strong>A</strong>, <strong>Ap</strong>, <strong>App</strong>, <strong>Appp</strong>, and so on.</p><p>In a similar manner, you can use <code class="inline">+</code> to match the preceding expression 1 or more times. For example, <code class="inline">/Ap+/</code> will match <strong>Ap</strong>, <strong>App</strong>, <strong>Appp</strong>, and so on. The expression will not match the single <strong>A</strong> this time.</p><p>Sometimes, you only want to match a specific number of occurrences of a given pattern. In such cases, you should use the <code class="inline">{n}</code> character sequence, where n is a number. For instance, <code class="inline">/Ap{2}/</code> will match <strong>App</strong> but not <strong>Ap</strong>. It will also match the first two 'p's in <strong>Appp</strong> and leave the third one untouched.</p><p>You can use <code class="inline">{n,}</code> to match at least 'n' occurrences of a given expression. This means that <code class="inline">/Ap{2,}/</code> will match <strong>App</strong> but not <strong>Ap</strong>. It will also match all the 'p's in <strong>Apppp</strong> and replace them with your replacement string.</p><p>You can also use <code class="inline">{n,m}</code> to specify a minimum and maximum number and limit the number of times the given expression should be matched. For example, <code class="inline">/Ap{2,4}/</code> will match <strong>App</strong>, <strong>Appp</strong>, and <strong>Apppp</strong>. It will also match the first four 'p's in <strong>Apppppp</strong> and leave the rest of them untouched.</p><pre class="brush: javascript noskimlinks noskimwords">"Apppppples".replace(/Ap*/, "App");
// Apples

"Ales".replace(/Ap*/, "App");
// Apples

"Appppples".replace(/Ap{2}/, "Add");
// Addppples

"Appppples".replace(/Ap{2,}/, "Add");
// Addles

"Appppples".replace(/Ap{2,4}/, "Add");
// Addples</pre><h2>Using Parentheses to Remember Matches</h2><p>So far, we have only replaced patterns with a constant string. For example, in the previous section, the replacement we used was always "Add". Sometimes, you will have to look for a pattern match inside the given string and then replace it with a part of the pattern.</p><p> Let's say you have to find a word with five or more letters in a string and then add an "s" at the end of the word. In such cases, you will not be able to use a constant string value as a replacement as the final value depends on the matching pattern itself.</p><pre class="brush: javascript noskimlinks noskimwords">"I like Apple".replace(/(\w{5,})/, '$1s');
// I like Apples

"I like Banana".replace(/(\w{5,})/, '$1s');
// I like Bananas
</pre><p>This was a simple example, but you can use the same technique to keep more than one matching pattern in memory. The number of sub-patterns in the full match will be determined by the number of parentheses used.</p><p>Inside the replacement string, the first sub-match will be identified using <code class="inline">$1</code>, the second sub-match will be identified using <code class="inline">$2</code>, and so on. Here is another example to further clarify the usage of parentheses.</p><pre class="brush: javascript noskimlinks noskimwords">"I am looking for John and Jason".replace(/(\w+)\sand\s(\w+)/, '$2 and $1');
// I am looking for Jason and John</pre><h2>Using Flags With Regular Expressions</h2><p>As I mentioned in the introduction, one more important feature of regular expressions is the use of special flags to modify how a search is performed. The flags are optional, but you can use them to do things like making a search global or case-insensitive.</p><p>These are the four commonly used flags to change how JavaScript searches or replaces a string.</p><ul>
<li>
<code class="inline">g</code>: This flag will perform a global search instead of stopping after the first match.</li>
<li>
<code class="inline">i</code>: This flag will perform a search without checking for an exact case match. For instance, Apple, aPPLe, and apPLE are all treated the same during case-insensitive searches.</li>
<li>
<code class="inline">m</code>: This flag will perform a multi-line search.</li>
<li>
<code class="inline">y</code>: This flag will look for a match in the index indicated by the <code class="inline">lastIndex</code> property.</li>
</ul><p>Here are some examples of regular expressions used with flags:</p><pre class="brush: javascript noskimlinks noskimwords">"I ate apples, you ate apples".replace(/apples/, "mangoes");
// "I ate mangoes, you ate apples"

"I ate apples, you ate apples".replace(/apples/g, "mangoes");
// "I ate mangoes, you ate mangoes"

"I ate apples, you ate APPLES".replace(/apples/, "mangoes");
// "I ate mangoes, you ate APPLES"

"I ate apples, you ate APPLES".replace(/apples/gi, "mangoes");
// "I ate mangoes, you ate mangoes"


var stickyRegex = /apples/y;
stickyRegex.lastIndex = 3;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate apples, you ate apples"

var stickyRegex = /apples/y;
stickyRegex.lastIndex = 6;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate mangoes, you ate apples"

var stickyRegex = /apples/y;
stickyRegex.lastIndex = 8;
"I ate apples, you ate apples".replace(stickyRegex, "mangoes");
// "I ate apples, you ate apples"</pre><h2>Final Thoughts</h2><p>The purpose of this tutorial was to introduce you to regular expressions in JavaScript and their importance. We began with the basics and then covered backslash and other special characters. We also learned how to check for a repeating pattern in a string and how to remember partial matches in a pattern in order to use them later.</p><p>Finally, we learned about commonly used flags which make regular expressions even more powerful. You can learn more about regular expressions in <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions" rel="external" target="_blank">this article</a> on MDN.</p><p>If there is anything that you would like me to clarify in this tutorial, feel free to let me know in the comments.<br></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-25T13:00:00+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Introduction to Popmotion: Custom Animation Scrubber]]></title>
      <link>//shineyrock.com/blog/read/introduction-to-popmotion-custom-animation-scrubber</link>
      <guid>https://shineyrock.com/blog/read/introduction-to-popmotion-custom-animation-scrubber#When:12:32:56Z</guid>
      <description><![CDATA[<p>In the first part of the Popmotion introductory series, we learned how to use <em>time-based</em> animations like <code class="inline">tween</code> and <code class="inline">keyframes</code>. We also learned how to use those animations on the DOM, using the performant <code class="inline">styler</code>.<br></p><p>In part two, we learned how to use <code class="inline">pointer</code> tracking and record <code class="inline">velocity</code>. We then used that to power the <em>velocity-based</em> animations <code class="inline">spring</code>, <code class="inline">decay</code>, and <code class="inline">physics</code>.</p><p>In this final part, we're going to be creating a scrubber widget, and we're going to use it to scrub a <code class="inline">keyframes</code> animation. We'll make the widget itself from a combination of pointer tracking as well as <code class="inline">spring</code> and <code class="inline">decay</code> to give it a more visceral feel than run-of-the-mill scrubbers.</p><p>Try it for yourself:</p><figure><iframe src="https://codepen.io/popmotion/embed/oEGdBg/?height=300&amp;theme-id=17364&amp;default-tab=result&amp;embed-version=2"></iframe></figure><h2>Getting Started</h2><h3>Markup</h3><p>First, fork <a href="https://codepen.io/popmotion/pen/wyrjze" rel="external" target="_blank">this CodePen</a> for the HTML template. As before, because this is an intermediate tutorial, I won't go through everything.</p><p>The main twist of note is that the handle on the scrubber is made up of two <code class="inline">div</code> elements: <code class="inline">.handle</code> and <code class="inline">.handle-hit-area</code>.</p><p><code class="inline">.handle</code> is the round blue visual indicator of where the scrubber handle is. We've wrapped it in an invisible hit area element to make grabbing the element easier for touchscreen users.</p><h3>Import Functions</h3><p>At the top of your JS panel, import everything we're going to use in this tutorial:</p><pre class="brush: javascript noskimlinks noskimwords">const { easing, keyframes, pointer, decay, spring, styler, transform, listen, value } = popmotion;
const { pipe, clamp, conditional, linearSpring, interpolate } = transform;</pre><h3>Select Elements</h3><p>We're going to need three elements in this tutorial. We'll animate the <code class="inline">.box</code>, drag and animate the <code class="inline">.handle-hit-area</code>, and measure the <code class="inline">.range</code>.</p><p>Let's also create <code class="inline">styler</code>s for the elements we're going to animate:</p><pre class="brush: javascript noskimlinks noskimwords">const box = document.querySelector('.box');
const boxStyler = styler(box);

const handle = document.querySelector('.handle-hit-area');
const handleStyler = styler(handle);

const range = document.querySelector('.range');</pre><h2>Keyframes Animation<br>
</h2><p>For our scrubbable animation, we're going to make the <code class="inline">.box</code> move from left to right with <code class="inline">keyframes</code>. However, we could just as easily scrub a <code class="inline">tween</code> or <code class="inline">timeline</code> animation using the same method outlined later in this tutorial.</p><pre class="brush: javascript noskimlinks noskimwords">const boxAnimation = keyframes({
  values: [0, -150, 150, 0],
  easings: [easing.backOut, easing.backOut, easing.easeOut],
  duration: 2000
}).start(boxStyler.set('x'));</pre><p>Your animation will now be playing. But we don't want that! Let's pause it for now:</p><pre class="brush: javascript noskimlinks noskimwords">boxAnimation.pause();</pre><h2>Dragging the x-axis</h2><p>It's time to use <code class="inline">pointer</code> to drag our scrubber handle. In the previous tutorial, we used both <code class="inline">x</code> and <code class="inline">y</code> properties, but with a scrubber we only need <code class="inline">x</code>.</p><p>We prefer to keep our code reusable, and tracking a single <code class="inline">pointer</code> axis is quite a common use case. So let's create a new function called, imaginatively, <code class="inline">pointerX</code>.</p><p>It will work exactly like <code class="inline">pointer</code> except it'll take just a single number as its argument and output just a single number (<code class="inline">x</code>):</p><pre class="brush: javascript noskimlinks noskimwords">const pointerX = (x) =&gt; pointer({ x }).pipe(xy =&gt; xy.x); </pre><p>Here, you can see we're using a method of <code class="inline">pointer</code> called <code class="inline">pipe</code>. <code class="inline">pipe</code> is available on all the Popmotion actions we've seen so far, including <code class="inline">keyframes</code>.</p><p><code class="inline">pipe</code> accepts multiple functions. When the action is <code class="inline">start</code>ed, all output will be passed through each of these functions in turn, before the <code class="inline">update</code> function provided to <code class="inline">start</code> fires.<br></p><p>In this case, our function is simply:</p><pre class="brush: javascript noskimlinks noskimwords">xy =&gt; xy.x</pre><p>All it is doing is taking the <code class="inline">{ x, y }</code> object usually output by <code class="inline">pointer</code> and returning just the <code class="inline">x</code> axis.</p><h3>Event Listeners</h3><p>We need to know if the user has started pressing the handle before we start tracking with our new <code class="inline">pointerX</code> function.</p><p>In the last tutorial we used the traditional <code class="inline">addEventListener</code> function. This time, we're going to use another Popmotion function called <code class="inline">listen</code>. <code class="inline">listen</code> also provides a <code class="inline">pipe</code> method, as well as access to all action methods, but we're not going to use that here.</p><p><code class="inline">listen</code> allows us to add event listeners to multiple events with a single function, similar to jQuery. So we can condense the previous four event listeners to two:<br></p><pre class="brush: plain noskimlinks noskimwords">listen(handle, 'mousedown touchstart').start(startDrag);
listen(document, 'mouseup touchend').start(stopDrag);</pre><h3>Move the Handle</h3><p>We'll be needing the handle's x <code class="inline">velocity</code> later on, so let's make it a <code class="inline">value</code>, which as we learned in the last tutorial allows us to query velocity. On the line after we define <code class="inline">handleStyler</code>, add:</p><pre class="brush: javascript noskimlinks noskimwords">const handleX = value(0, handleStyler.set('x'));</pre><p>Now we can add our <code class="inline">startDrag</code> and <code class="inline">stopDrag</code> functions:</p><pre class="brush: javascript noskimlinks noskimwords">const startDrag = () =&gt; pointerX(handleX.get())
  .start(handleX);

const stopDrag = () =&gt; handleX.stop();</pre><p>Right now, the handle can be scrubbed beyond the boundaries of the slider, but we'll come back to this later.</p><h2>Scrubbing</h2><p>Now we have a visually functional scrubber, but we're not scrubbing the actual animation.</p><p>Every <code class="inline">value</code> has a <code class="inline">subscribe</code> method. This allows us to attach multiple subscribers to fire when the <code class="inline">value</code> changes. We want to seek the <code class="inline">keyframes</code> animation whenever <code class="inline">handleX</code> updates.</p><p>First, measure the slider. On the line after we define <code class="inline">range</code>, add:</p><pre class="brush: javascript noskimlinks noskimwords">const rangeWidth = range.getBoundingClientRect().width;</pre><p><code class="inline">keyframes.seek</code> accepts a progress value as expressed from <code class="inline">0</code> to <code class="inline">1</code>, whereas our <code class="inline">handleX</code> is set with pixel values from <code class="inline">0</code> to <code class="inline">rangeWidth</code>.<br></p><p>We can convert from the pixel measurement to a <code class="inline">0</code> to <code class="inline">1</code> range by dividing the current pixel measurement by <code class="inline">rangeWidth</code>. On the line after <code class="inline">boxAnimation.pause()</code>, add this subscribe method:</p><pre class="brush: javascript noskimlinks noskimwords">handleX.subscribe(v =&gt; boxAnimation.seek(v / rangeWidth));</pre><p>Now, if you play with the scrubber, the animation will scrub successfully!</p><h2>The Extra Mile</h2><h3>Spring Boundaries</h3><p>The scrubber can still be pulled outside the boundaries of the full range. To solve this, we <em>could</em> simply use a <code class="inline">clamp</code> function to ensure we don't output values outside of <code class="inline">0, rangeWidth</code>.</p><p>Instead, we're going to go the extra step and attach springs to the end of our slider. When a user pulls the handle beyond the permitted range, it will tug back towards it. If the user releases the handle while it's outside the range, we can use a <code class="inline">spring</code> animation to snap it back.</p><p>We'll make this process a single function that we can provide to the <code class="inline">pointerX</code> <code class="inline">pipe</code> method. By creating a single, reusable function, we can reuse this piece of code with any Popmotion animation, with configurable ranges and spring strengths.</p><p>First, let's apply a spring to the left-most limit. We'll use two <a href="https://popmotion.io/api/transformers" target="_self">transformers</a>, <code class="inline">conditional</code> and <code class="inline">linearSpring</code>.</p><pre class="brush: plain noskimlinks noskimwords">const springRange = (min, max, strength) =&gt; conditional(
  v =&gt; v &lt; min,
  linearSpring(strength, min)
);</pre><p><code class="inline">conditional</code> takes two functions, an assertion and a transformer. The assertion receives the provided value and returns either <code class="inline">true</code> or <code class="inline">false</code>. If it returns <code class="inline">true</code>, the second function will be provided the value to transform and return.</p><p>In this case, the assertion is saying, "If the provided value is smaller than <code class="inline">min</code>, pass this value through the <code class="inline">linearSpring</code> transformer." The <code class="inline">linearSpring</code> is a simple spring function that, unlike the <code class="inline">physics</code> or <code class="inline">spring</code> animations, has no concept of time. Provide it a <code class="inline">strength</code> and a <code class="inline">target</code>, and it will create a function that "attracts" any given value towards the target with the defined strength.</p><p>Replace our <code class="inline">startDrag</code> function with this:</p><pre class="brush: javascript noskimlinks noskimwords">const startDrag = () =&gt; pointerX(handleX.get())
  .pipe(springRange(0, rangeWidth, 0.1))
  .start(handleX);</pre><p>We're now passing the pointer's <code class="inline">x</code> offset through our <code class="inline">springRange</code> function, so if you drag the handle past the left-most side, you'll notice it tugs back.</p><p>Applying the same to the right-most side is a matter of composing a second <code class="inline">conditional</code> with the first using the stand-alone <code class="inline">pipe</code> function:</p><pre class="brush: javascript noskimlinks noskimwords">const springRange = (min, max, strength) =&gt; pipe(
  conditional(
    v =&gt; v &lt; min,
    linearSpring(strength, min)
  ),
  conditional(
    v =&gt; v &gt; max,
    linearSpring(strength, max)
  )
);</pre><p>Another benefit of composing a function like <code class="inline">springRange</code> is that it becomes very testable. The function it returns is, like all transformers, a pure function that takes a single value. You can test this function to see if it passes through values that lie within <code class="inline">min</code> and <code class="inline">max</code> unaltered, and if it applies springs to values that lie without.</p><p>If you let go of the handle while it lies outside the range, it should now spring back to within range. For that, we'll need to adjust the <code class="inline">stopDrag</code> function to fire a <code class="inline">spring</code> animation:</p><pre class="brush: javascript noskimlinks noskimwords">const stopDrag = () =&gt; {
  const x = handleX.get();
  (x &lt; 0 || x &gt; rangeWidth)
    ? snapHandleToEnd(x)
    : handleX.stop();
};</pre><p>Our <code class="inline">snapHandleToEnd</code> function looks like this:</p><pre class="brush: javascript noskimlinks noskimwords">const snapHandleToEnd = (x) =&gt; spring({
  from: x,
  velocity: handleX.getVelocity(),
  to: x &lt; 0 ? 0 : rangeWidth,
  damping: 30,
  stiffness: 5000
}).start(handleX);</pre><p>You can see that <code class="inline">to</code> is set either as <code class="inline">0</code> or <code class="inline">rangeWidth</code> depending on which side of the slider the handle currently sits. By playing with <code class="inline">damping</code> and <code class="inline">stiffness</code>, you can play with a range of different spring-feels.</p><h3>Momentum Scrolling</h3><p>A nice touch on iOS scrubber that I always appreciated was that if you threw the handle, it would gradually slow down rather than come to a dead stop. We can replicate that easily using the <code class="inline">decay</code> animation.</p><p>In <code class="inline">stopDrag</code>, replace <code class="inline">handleX.stop()</code> with <code class="inline">momentumScroll(x)</code>.</p><p>Then, on the line after the <code class="inline">snapHandleToEnd</code> function, add a new function called <code class="inline">momentumScroll</code>:</p><pre class="brush: javascript noskimlinks noskimwords">const momentumScroll = (x) =&gt; decay({
  from: x,
  velocity: handleX.getVelocity()
}).start(handleX);</pre><p>Now, if you throw the handle, it will come to a gradual stop. It will also animate outside the range of the slider. We can stop this by passing the <code class="inline">clamp</code> transformer to the <code class="inline">decay.pipe</code> method:</p><pre class="brush: javascript noskimlinks noskimwords">const momentumScroll = (x) =&gt; decay({
  from: x,
  velocity: handleX.getVelocity()
}).pipe(clamp(0, rangeWidth))
  .start(handleX);</pre><h2>Conclusion</h2><p>Using a combination of different Popmotion functions, we can create a scrubber that has a bit more life and playfulness than the usual.</p><p>By using <code class="inline">pipe</code>, we compose simple pure functions into more complex behaviours while leaving the composite pieces testable and reusable.</p><h3>Next Steps</h3><p>How about trying these challenges:</p><ul>
<li>Make the momentum scroll end with a bounce if the handle hits either end of the scrubber.</li>
<li>Make the handle animate to any point on the scrubber when a user clicks on another part of the range bar.</li>
<li>Add full play controls, like a play/pause button. Update the scrubber handle position as the animation progresses.</li>
</ul>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-25T12:32:56+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[Introduction to Popmotion: Pointers and Physics]]></title>
      <link>//shineyrock.com/blog/read/introduction-to-popmotion-pointers-and-physics</link>
      <guid>https://shineyrock.com/blog/read/introduction-to-popmotion-pointers-and-physics#When:12:32:56Z</guid>
      <description><![CDATA[<p>Welcome back to the Introduction to Popmotion tutorial series. In part 1, we discovered how to use tweens and keyframes to make precise, time-scheduled animations.</p><p>In Part 2, we're going to look at pointer tracking and velocity-based animations.</p><p>Pointer tracking allows us to create scrollable product shelves, custom value sliders, or drag-and-drop interfaces.</p><p>Velocity-based animations are different to a time-based animation like tween in that the primary property that affects how the animation behaves is <code class="inline">velocity</code>. The animation itself might take any amount of time.<br></p><p>We'll look at the three velocity-based animations in Popmotion, <code class="inline">spring</code>, <code class="inline">decay</code>, and <code class="inline">physics</code>. We'll use the <code class="inline">velocity</code> of the pointer tracking animation to start these animations, and that'll demonstrate how velocity-based animations can create engaging and playful UIs in a way that time-based animations simply can't.</p><p>First, open <a href="https://codepen.io/popmotion/pen/GQKKZN" rel="external" target="_blank">this CodePen</a> to play along.</p><h2>Pointer Tracking</h2><p>Popmotion provides the <code class="inline"><a href="https://popmotion.io/api/pointer" rel="external" target="_blank">pointer</a></code><a href="https://popmotion.io/api/pointer" rel="external" target="_blank"> function</a> to track and output the coordinates of either a mouse or single touch pointer.</p><p>Let's import this along with <code class="inline">styler</code>, which will allow us to set the position of the ball.</p><pre class="brush: javascript noskimlinks noskimwords">const { pointer, styler } = popmotion;

const ball = document.querySelector('.ball');
const ballStyler = styler(ball);</pre><p>For this example, we want to drag the ball. Let's add an event that will output the pointer's position to the ball:</p><pre class="brush: plain noskimlinks noskimwords">let pointerTracker;

const startTracking = () =&gt; {
  pointerTracker = pointer().start(ballStyler.set);
};

ball.addEventListener('mousedown', startTracking);
ball.addEventListener('touchstart', startTracking);</pre><p>We'll also want some code to stop tracking when we release the ball:</p><pre class="brush: plain noskimlinks noskimwords">const stopTracking = () =&gt; pointerTracker &amp;&amp; pointerTracker.stop();

document.addEventListener('mouseup', stopTracking);
document.addEventListener('touchend', stopTracking);</pre><p>If you try and drag the ball now, there's an obvious problem. The ball jumps away when we touch it! Not a great user experience.</p><p>This is because, by default, <strong></strong><code class="inline">pointer</code> outputs the pointer's position <em>relative to the page</em>.</p><p>To output the pointer's position <em>relative to another point</em>, in this case the ball's x/y transform, we can simply pass that position to <code class="inline">pointer</code> like this:</p><pre class="brush: plain noskimlinks noskimwords">const startTracking = () =&gt; {
  pointerTracker = pointer({
    x: ballStyler.get('x'),
    y: ballStyler.get('y')
  }).start(ballStyler.set);
};</pre><p>Now you've made the ball, in very few lines of code, draggable! However, when the user releases the ball, it stops dead.</p><figure><iframe src="https://codepen.io/popmotion/embed/JpEzxW/?height=300&amp;theme-id=17364&amp;default-tab=result&amp;embed-version=2"></iframe></figure><p>This isn't satisfying: Imagine a scrollable carousel of products that a user can drag to scroll. If it just stopped dead instead of momentum scrolling, it'd be less pleasurable to use.</p><p>It'd be harder, too, because the overall physical effort needed to scroll the carousel would be higher.</p><p>To enable animations like this, we first need to know the <code class="inline">velocity</code> of the object being thrown.</p><h2>Track Velocity</h2><p>Popmotion provides a function that can help us track velocity. It's called <code class="inline">value</code>. Let's import that:</p><pre class="brush: javascript noskimlinks noskimwords">const { pointer, styler, value } = popmotion;</pre><p>To speak technically for a moment, all of Popmotion's animations are known as <strong>actions</strong>. Actions are reactive streams of values that can be started and stopped.</p><p>A <code class="inline">value</code> is, conversely, a <strong>reaction</strong>. It can't be stopped or started. It just passively responds when its <code class="inline">update</code> method is called. It can keep track of values and can be used to query their velocity.<br></p><p>So, after we define <code class="inline">ballStyler</code>, let's define a new <code class="inline">value</code> for <code class="inline">ballXY</code>:</p><pre class="brush: javascript noskimlinks noskimwords">const ballXY = value({ x: 0, y: 0 });</pre><p>Whenever <code class="inline">ballXY</code> updates, we want to update <code class="inline">ballStyler</code>. We can pass a second argument to <code class="inline">value</code>, a function that will run whenever <code class="inline">ballXY</code> updates:</p><pre class="brush: javascript noskimlinks noskimwords">const ballXY = value({ x: 0, y: 0 }, ballStyler.set);</pre><p>Now we can rewrite our <code class="inline">pointer</code> to update <code class="inline">ballXY</code> instead of <code class="inline">ballStyler.set</code>:</p><pre class="brush: javascript noskimlinks noskimwords">const startTracking = () =&gt; {
  pointer(ballXY.get())
    .start(ballXY);
};</pre><p>Now, at any pointer, we can call <code class="inline">ballXY.getVelocity()</code> and we'll receive the velocities of both <code class="inline">x</code> and <code class="inline">y</code>, ready to plug into our velocity-based animations.</p><h2>Velocity-Based Animations</h2><h3>
<code class="inline">spring</code><br>
</h3><p>The first velocity-based animation to introduce is <code class="inline">spring</code>. It's based on the same equations that govern Apple's CASpringAnimation, the spring animation behind all that iOS springy playfulness.</p><p>Import:</p><pre class="brush: javascript noskimlinks noskimwords">const { pointer, spring, styler, value } = popmotion;</pre><p>Now, amend <code class="inline">stopTracking</code> so that instead of stopping the <code class="inline">pointerTracker</code> animation, it starts a <code class="inline">spring</code> animation like this:</p><pre class="brush: javascript noskimlinks noskimwords">const stopTracking = () =&gt; spring({
  from: ballXY.get(),
  velocity: ballXY.getVelocity(),
  to: 0,
  stiffness: 100,
  damping: 20
}).start(ballXY);</pre><p>We provide it with the ball's current position, its velocity, and a target, and the simulation is run. It changes depending on how the user has thrown the ball.</p><p>The cool thing about springs is they're expressive. By adjusting the <code class="inline">mass</code>, <code class="inline">stiffness</code> and <code class="inline">damping</code> properties, you can end up with radically different spring-feels.</p><p>For instance, if you only change the <code class="inline">stiffness</code> above to <code class="inline">1000</code>, you can create a motion that feels like high-energy snapping. Then, by changing <code class="inline">mass</code> to <code class="inline">20</code>, you create motion that looks almost like gravity.</p><p>There's a combination that will feel right and satisfying for your users, and appropriate to your brand, under almost any circumstance. By playing with different spring-feels, you can communicate different feelings, like a strict out-of-bounds snap or a softer affirmative bounce.</p><figure><iframe src="https://codepen.io/popmotion/embed/oEBVJe/?height=300&amp;theme-id=17364&amp;default-tab=result&amp;embed-version=2"></iframe></figure><h3><code class="inline">decay</code></h3><p>The <code class="inline"><a href="https://popmotion.io/api/decay" rel="external" target="_blank">decay</a></code><a href="https://popmotion.io/api/decay" rel="external" target="_blank"> animation</a>, as the name suggests, <strong>decays</strong> the provided velocity so that the animation gradually slows to a complete stop.</p><p>This can be used to create the momentum scrolling effect found on smartphones, like this:</p><figure><iframe src="https://codepen.io/popmotion/embed/jZVzKN/?height=463&amp;theme-id=17364&amp;default-tab=result&amp;embed-version=2"></iframe></figure><p>Import the <code class="inline">decay</code> function:</p><pre class="brush: javascript noskimlinks noskimwords">const { decay, pointer, spring, styler, value } = popmotion;</pre><p>And replace the <code class="inline">stopTracking</code> function with the following:</p><pre class="brush: javascript noskimlinks noskimwords">const stopTracking = () =&gt; decay({
  from: ballXY.get(),
  velocity: ballXY.getVelocity()
}).start(ballXY);</pre><p><code class="inline">decay</code> automatically calculates a new target based on the provided <code class="inline">from</code> and <code class="inline">velocity</code> props.</p><p>It's possible to adjust the feel of the deceleration by messing with the props outlined in the docs linked above but, unlike <code class="inline">spring</code> and <code class="inline">physics</code>, <code class="inline">decay</code> is designed to work out of the box. </p><h3><code class="inline">physics</code></h3><p>Finally, we have the <code class="inline"><a href="https://popmotion.io/api/physics" rel="external" target="_blank">physics</a></code><a href="https://popmotion.io/api/physics" rel="external" target="_blank"> animation</a>. This is Popmotion's Swiss Army knife of velocity-based animations. With it, you can simulate:</p><ul>
<li>constant velocity</li>
<li>acceleration</li>
<li>springs</li>
<li>friction</li>
</ul><p><code class="inline">spring</code> and <code class="inline">decay</code> offer super-precise motion and a wider variety of "feels". Soon, they'll both also be scrubbable.<br></p><p>But both are <em>immutable</em>. Once you've started either, their properties are set in stone. Perfect for when we want to start an animation based on the initial <code class="inline">from</code>/<code class="inline">velocity</code> state, but not so good if we want ongoing interaction.</p><p><code class="inline">physics</code>, instead, is an <em>integrated simulation</em> closer to that of a video game. It works by, once per frame, taking the current state and then modifying it based on the current properties at that point in time.<br></p><p>This allows it to be <em>mutable</em>, which means we can change those properties, which then changes the outcome of the simulation.</p><p>To demonstrate this, let's make a twist on classic pointer smoothing, with elastic smoothing.</p><p>Import <code class="inline">physics</code>:</p><pre class="brush: javascript noskimlinks noskimwords">const { pointer, spring, physics, styler, value } = popmotion;</pre><p>This time, we're going to change the <code class="inline">startTracking</code> function. Instead of changing <code class="inline">ballXY</code> with <code class="inline">pointer</code>, we'll use <code class="inline">physics</code>:</p><pre class="brush: javascript noskimlinks noskimwords">const startTracking = () =&gt; {
  const physicsAnimation = physics({
    from: ballXY.get(),
    to: ballXY.get(),
    velocity: ballXY.getVelocity(),
    restSpeed: false,
    friction: 0.6,
    springStrength: 400
  }).start(ballXY);
};</pre><p>Here, we're setting <code class="inline">from</code> and <code class="inline">velocity</code> as normal. <code class="inline">friction</code> and <code class="inline">springStrength</code> both adjust the properties of the spring.</p><p><code class="inline">restSpeed: false</code> overrides the default behaviour of the animation stopping when motion stops. We want to stop it manually in <code class="inline">stopTracking</code>.</p><p>On its own, this animation won't do anything because we set <code class="inline">to</code>, the spring's target, to the same as <code class="inline">from</code>. So let's reimplement the <code class="inline">pointer</code> tracking this time to change the spring target of <code class="inline">physics</code>. On the last line of <code class="inline">startTracking</code>, add:</p><pre class="brush: javascript noskimlinks noskimwords">pointerTracker = pointer(ballXY.get()).start((v) =&gt; {
  physicsAnimation.setSpringTarget(v);
});</pre><p>Here, we're using a similar <code class="inline">pointer</code> animation as before. Except this time, we're using it to change the target of another animation. In doing so, we create this elasticated pointer tracking:</p><figure><iframe src="https://codepen.io/popmotion/embed/GQreWO/?height=300&amp;theme-id=17364&amp;default-tab=result&amp;embed-version=2"></iframe></figure><h2>Conclusion<br>
</h2><p>Velocity-based animations paired with pointer tracking can create engaging and playful interfaces.</p><p><code class="inline">spring</code> can be used to create a wide-variety of spring-feels, while <code class="inline">decay</code> is specifically tailored for momentum scroll animations. <code class="inline">physics</code> is more limited than either in terms of configurability, but also provides the opportunity to change the simulation in progress, opening new interaction possibilities.<br></p><p>In the next and final part of this introductory series on Popmotion, we're going to take everything we've learned in the first two parts and use them along with some light functional composition to create a scrubbable animation, along with a scrubber to do the scrubbing with!</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-23T12:32:56+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[New Course: Connect to a Database With Laravel&#8217;s Eloquent ORM]]></title>
      <link>//shineyrock.com/blog/read/new-course-connect-to-a-database-with-laravels-eloquent-orm</link>
      <guid>https://shineyrock.com/blog/read/new-course-connect-to-a-database-with-laravels-eloquent-orm#When:11:54:28Z</guid>
      <description><![CDATA[<figure class="final-product final-product--image"><img src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31183/final_image/Eloquent-2.jpg" alt="Final product image"><figcaption>What You'll Be Creating</figcaption></figure><p>In our new course, <a text="Connect to a Database With Laravel's Eloquent ORM" href="https://code.tutsplus.com/courses/connect-to-a-database-with-laravels-eloquent-orm?ec_promo=teaser_post" target="_self" title="Link: https://code.tutsplus.com/courses/connect-to-a-database-with-laravels-eloquent-orm?ec_promo=teaser_post">Connect to a Database With Laravel's Eloquent ORM</a>, you'll learn all about Eloquent, which makes it easy to connect to relational data in a database and work with it using object-oriented models in your Laravel app. It is simple to set up, easy to use, and packs a lot of power.</p><h2>What You’ll Learn</h2><p>In this course, Envato Tuts+ instructor <a href="https://tutsplus.com/authors/jeremy-mcpeak?ec_promo=teaser_post" target="_self" title="Link: https://tutsplus.com/authors/jeremy-mcpeak?ec_promo=teaser_post">Jeremy McPeak</a> will teach you how to use Eloquent, Laravel's object-relational mapper (ORM). </p><figure class="post_image"><a text="https://code.tutsplus.com/courses/connect-to-a-database-with-laravels-eloquent-orm?ec_promo=teaser_post" href="https://code.tutsplus.com/courses/connect-to-a-database-with-laravels-eloquent-orm?ec_promo=teaser_post" target="_self"><img src="https://cms-assets.tutsplus.com/uploads/users/48/posts/31183/image/Eloquent.jpg" title="Image: https://cms-assets.tutsplus.com/uploads/users/48/posts/31183/image/Eloquent.jpg" alt="Connect to a Database With Laravel's Eloquent ORM screenshot"></a></figure><p>Follow along as Jeremy builds the data back-end for a simple guitar database app. You'll learn how to create data tables with migrations, how to create data models, and how to use Eloquent for querying and mutating data.</p><h2>Watch the Introduction</h2><figure><script src="//fast.wistia.com/assets/external/E-v1.js" async="async"></script><div class="wistia_responsive_padding"><div class="wistia_responsive_wrapper"><div class="wistia_embed wistia_async_ppwpyu625z videoFoam=true"> </div></div></div></figure><h2>Take the Course</h2><p>You can take our new course straight away with a <a href="https://tutsplus.com/subscribe-with-elements?ec_promo=teaser_post" rel="external" target="_blank">subscription to Envato Elements</a>. For a single low monthly fee, you get access not only to this course, but also to our growing library of over 1,000 video courses and industry-leading eBooks on Envato Tuts+. </p><p>Plus you now get unlimited downloads from the huge Envato Elements library of 580,000+ creative assets. Create with unique fonts, photos, graphics and templates, and deliver better projects faster.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-22T11:54:28+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Create a Custom Settings Panel in WooCommerce]]></title>
      <link>//shineyrock.com/blog/read/how-to-create-a-custom-settings-panel-in-woocommerce</link>
      <guid>https://shineyrock.com/blog/read/how-to-create-a-custom-settings-panel-in-woocommerce#When:12:29:24Z</guid>
      <description><![CDATA[<figure class="final-product final-product--image"><img src="https://cms-assets.tutsplus.com/uploads/users/2024/posts/30383/final_image/woocommerce-custom-panel.jpg" alt="Final product image"><figcaption>What You'll Be Creating</figcaption></figure><p>WooCommerce is by far the leading ecommerce plugin for WordPress. At the time of writing, it has over 3 million active installations and is <a href="https://wptavern.com/woocommerce-powers-42-of-all-online-stores" target="_self">reportedly behind over 40% of all online stores</a>.</p><p>One of the reasons for WooCommerce's popularity is its extendability. Like WordPress itself, WooCommerce is packed full of actions and filters that developers can hook into if they want to extend WooCommerce's default functionality.</p><p>A great example of this is the ability to create a custom data panel.</p><h2>What's Covered in This Tutorial?</h2><p>This tutorial is split into two parts. In part one, we're going to be looking at:</p><ul>
<li>adding a custom panel to WooCommerce</li>
<li>adding custom fields to the panel</li>
<li>sanitizing and saving custom field values</li>
</ul><p>Then in part two, we'll look at:</p><ul>
<li>displaying custom fields on the product page</li>
<li>changing the product price depending on the value of custom fields</li>
<li>displaying custom field values in the cart and order</li>
</ul><h2>What Is a WooCommerce Custom Data Panel?</h2><p>When you create a new product in WooCommerce, you enter most of the critical product information, like price and inventory, in the <strong>Product data</strong> section.</p><figure class="post_image"><img alt="WooCommerce custom data panel" src="https://cms-assets.tutsplus.com/uploads/users/2024/posts/30383/image/woocommerce-data-panel.jpg"></figure><p>In the screenshot above, you can see that the <strong>Product data</strong> section is divided into panels: the tabs down the left, e.g. <strong>General</strong>, <strong>Inventory</strong>, etc., each open different panels in the main view on the right.</p><p>In this tutorial, we're going to look at creating a custom panel for product data and adding some custom fields to it. Then we'll look at using those custom fields on the front end and saving their values to customer orders.</p><p>In our example scenario, we're going to add a 'Giftwrap' panel which contains some custom fields:</p><ul>
<li>a checkbox to include a giftwrapping option for the product on the product page</li>
<li>a checkbox to enable an input field where a customer can enter a message on the product page</li>
<li>an input field to add a price for the giftwrapping option; the price will be added to the product price in the cart</li>
</ul><p>In the back end, it's going to look like this:</p><figure class="post_image"><img alt="Giftwrap panel" src="https://cms-assets.tutsplus.com/uploads/users/2024/posts/30383/image/giftwrap-panel.jpg"></figure><p>And on the front end, it will look something like this:</p><figure class="post_image"><img alt="Front end example" src="https://cms-assets.tutsplus.com/uploads/users/2024/posts/30383/image/giftwrap-panel-frontend.png"></figure><h2>Create a New Plugin</h2><p>Because we're extending functionality, we're going to create a plugin rather than adding our code to a theme. That means that our users will be able to retain this extra functionality even if they switch their site's theme. Creating a plugin is out of scope for this tutorial, but if you need some help, take a look at this Tuts+ Coffee Break Course on creating your first plugin: </p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/courses/wordpress-coding-basics-your-first-plugin"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/71/courses/1101/preview_image/wordpresscode400.jpg"><div class="roundup-block__primary-category topic-code">WordPress</div>
<div class="roundup-block__content-title">WordPress Coding Basics: Your First Plugin</div>
<div class="roundup-block__author">Rachel McCollin</div></a></li></ul><p>Our plugin is going to consist of two classes: one to handle stuff in the admin, and one to handle everything on the front end. Our plugin file structure is going to look like this:<br></p><figure class="post_image"><img alt="Project structure" src="https://cms-assets.tutsplus.com/uploads/users/2024/posts/30383/image/project-structure.png"></figure><h3>Admin Class</h3><p>First up, we need to create our class to handle everything on the back end. In a folder called <code class="inline">classes</code>, create a new file called <code class="inline">class-tpwcp-admin.php</code>.</p><p>This class will handle the following:</p><ul>
<li>Create the custom tab (the tab is the clickable element down the left of the Product data section).</li>
<li>Add the custom fields to the custom panel (the panel is the element that's displayed when you click a tab).</li>
<li>Decide the product types where the panel will be enabled.</li>
<li>Sanitize and save the custom field values.</li>
</ul><p>Paste the following code into that new file. We'll walk through it step by step afterwards.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
/**
 * Class to create additional product panel in admin
 * @package TPWCP
 */

// Exit if accessed directly
if( ! defined( 'ABSPATH' ) ) {
    exit;
}

if( ! class_exists( 'TPWCP_Admin' ) ) {
    class TPWCP_Admin {

        public function __construct() {
        }

        public function init() {
    		// Create the custom tab
            add_filter( 'woocommerce_product_data_tabs', array( $this, 'create_giftwrap_tab' ) );
    		// Add the custom fields
            add_action( 'woocommerce_product_data_panels', array( $this, 'display_giftwrap_fields' ) );
    		// Save the custom fields
    		add_action( 'woocommerce_process_product_meta', array( $this, 'save_fields' ) );
        }

		/**
		 * Add the new tab to the $tabs array
		 * @see 	https://github.com/woocommerce/woocommerce/blob/e1a82a412773c932e76b855a97bd5ce9dedf9c44/includes/admin/meta-boxes/class-wc-meta-box-product-data.php
		 * @param	$tabs
		 * @since	1.0.0
		 */
        public function create_giftwrap_tab( $tabs ) {
			$tabs['giftwrap'] = array(
				'label'         =&gt; __( 'Giftwrap', 'tpwcp' ), // The name of your panel
				'target'		=&gt; 'gifwrap_panel', // Will be used to create an anchor link so needs to be unique
				'class'			=&gt; array( 'giftwrap_tab', 'show_if_simple', 'show_if_variable' ), // Class for your panel tab - helps hide/show depending on product type
				'priority'      =&gt; 80, // Where your panel will appear. By default, 70 is last item
			);
			return $tabs;
		}

		/**
		 * Display fields for the new panel
		 * @see https://docs.woocommerce.com/wc-apidocs/source-function-woocommerce_wp_checkbox.html
		 * @since	1.0.0
		 */
         public function display_giftwrap_fields() { ?&gt;

			&lt;div id='gifwrap_panel' class='panel woocommerce_options_panel'&gt;
				&lt;div class="options_group"&gt;
					&lt;?php
					woocommerce_wp_checkbox(
						array(
							'id'		=&gt; 'include_giftwrap_option',
							'label'		=&gt; __( 'Include giftwrap option', 'tpwcp' ),
							'desc_tip'	=&gt; __( 'Select this option to show giftwrapping options for this product', 'tpwcp' )
						)
					);
					woocommerce_wp_checkbox(
						array(
							'id'		=&gt; 'include_custom_message',
							'label'		=&gt; __( 'Include custom message', 'tpwcp' ),
							'desc_tip'	=&gt; __( 'Select this option to allow customers to include a custom message', 'tpwcp' )
						)
					);
					woocommerce_wp_text_input(
						array(
							'id'		=&gt; 'giftwrap_cost',
							'label'		=&gt; __( 'Giftwrap cost', 'tpwcp' ),
							'type'		=&gt; 'number',
							'desc_tip'	=&gt; __( 'Enter the cost of giftwrapping this product', 'tpwcp' )
						)
					);
				?&gt;
			&lt;/div&gt;
		&lt;/div&gt;

		&lt;?php }

		/**
		 * Save the custom fields using CRUD method
		 * @param $post_id
		 * @since 1.0.0
		 */
		public function save_fields( $post_id ) {

			$product = wc_get_product( $post_id );

			// Save the include_giftwrap_option setting
			$include_giftwrap_option = isset( $_POST['include_giftwrap_option'] ) ? 'yes' : 'no';
			// update_post_meta( $post_id, 'include_giftwrap_option', sanitize_text_field( $include_giftwrap_option ) );
			$product-&gt;update_meta_data( 'include_giftwrap_option', sanitize_text_field( $include_giftwrap_option ) );

			// Save the include_giftwrap_option setting
			$include_custom_message = isset( $_POST['include_custom_message'] ) ? 'yes' : 'no';
			$product-&gt;update_meta_data( 'include_custom_message', sanitize_text_field( $include_custom_message ) );

			// Save the giftwrap_cost setting
			$giftwrap_cost = isset( $_POST['giftwrap_cost'] ) ? $_POST['giftwrap_cost'] : '';
			$product-&gt;update_meta_data( 'giftwrap_cost', sanitize_text_field( $giftwrap_cost ) );

			$product-&gt;save();

		}

    }
}
</pre><h4>Create the Custom Tab<br>
</h4><p>To create the custom tab, we hook into the <code class="inline">woocommerce_product_data_tabs</code> filter using our <code class="inline">create_giftwrap_tab</code> function. This passes the WooCommerce <code class="inline">$tabs</code> object in, which we then modify using the following parameters:</p><ul>
<li>
<code class="inline">label</code>: use this to define the name of your tab.</li>
<li>
<code class="inline">target</code>: this is used to create an anchor link so needs to be unique.<br>
</li>
<li>
<code class="inline">class</code>: an array of classes that will be applied to your panel.</li>
<li>
<code class="inline">priority</code>: define where you want your tab to appear.</li>
</ul><p><b>Product Types</b><br></p><p>At this stage, it's worth considering what product types we'd like our panel to be enabled for. By default, there are four WooCommerce product types: simple, variable, grouped, and affiliate. Let's say for our example scenario, we only want our Giftwrap panel to be enabled for simple and variable product types.</p><p>To achieve this, we add the <code class="inline">show_if_simple</code> and <code class="inline">show_if_variable</code> classes to the class parameter above. If we didn't want to enable the panel for variable product types, we'd just omit the <code class="inline">show_if_variable</code> class.</p><h4>Add Custom Fields</h4><p>The next hook we use is <code class="inline">woocommerce_product_data_panels</code>. This action allows us to output our own markup for the Giftwrap panel. In our class, the function <code class="inline">display_giftwrap_fields</code> creates a couple of <code class="inline">div</code> wrappers, inside which we use some WooCommerce functions to create custom fields. </p><p>Note how the <code class="inline">id</code> attribute for our outer <code class="inline">div</code>, <code class="inline">giftwrap_panel</code>, matches the value we passed into the <code class="inline">target</code> parameter of our giftwrap tab above. This is how WooCommerce will know to display this panel when we click the Giftwrap tab.</p><h4>WooCommerce Custom Field Functions</h4><p>In our example, the two functions we're using to create our fields are:</p><ul>
<li><code class="inline">woocommerce_wp_checkbox</code></li>
<li><code class="inline">woocommerce_wp_text_input</code></li>
</ul><p>These functions are provided by WooCommerce specifically for the purpose of creating custom fields. They take an array of arguments, including:</p><ul>
<li>
<code class="inline">id</code>: this is the ID of your field. It needs to be unique, and we'll be referencing it later in our code.</li>
<li>
<code class="inline">label</code>: this is the label as it will appear to the user.</li>
<li>
<code class="inline">desc_tip</code>: this is the optional tool tip that appears when the user hovers over the question mark icon next to the label.</li>
</ul><p>Note also that the <code class="inline">woocommerce_wp_text_input</code> function also takes a <code class="inline">type</code> argument, where you can specify <code class="inline">number</code> for a number input field, or <code class="inline">text</code> for a text input field. Our field will be used to input a price, so we specify it as <code class="inline">number</code>.</p><h4>Save the Custom Fields</h4><p>The final part of our admin class uses the <code class="inline">woocommerce_process_product_meta</code> action to save our custom field values.</p><p>In order to standardize and optimize how it stores and retrieves data, WooCommerce 3.0 adopted a CRUD (Create, Read, Update, Delete) method for setting and getting product data. You can find out more about the thinking behind this in the <a href="https://woocommerce.com/2017/04/woocommerce-3-0-release/" target="_self">WooCommerce 3.0 announcement</a>.</p><p>With this in mind, instead of the more familiar <code class="inline">get_post_meta</code> and <code class="inline">update_post_meta</code> methods that we might have used in the past, we now use the <code class="inline">$post_id</code> to create a WooCommerce <code class="inline">$product</code> object, and then apply the <code class="inline">update_meta_data</code> method to save data. For example:</p><pre class="brush: plain noskimlinks noskimwords">$product = wc_get_product( $post_id );
$include_giftwrap_option = isset( $_POST['include_giftwrap_option'] ) ? 'yes' : 'no';
$product-&gt;update_meta_data( 'include_giftwrap_option', sanitize_text_field( $include_giftwrap_option ) );
$product-&gt;save();</pre><p>Please note also that we're careful to sanitize our data before saving it to the database. There's more information on sanitizing data here: </p><ul class="roundup-block__contents posts--half-width roundup-block--list"><li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/articles/data-sanitization-and-validation-with-wordpress--wp-25536"><img class="roundup-block__preview-image" src="https://cdn.tutsplus.com/wp/uploads/legacy/285_Data_Sanitisation_and_Validation_With_WordPress/sanitization-and-validation-preview.jpg"><div class="roundup-block__primary-category topic-code">Creative Coding</div>
<div class="roundup-block__content-title">Data Sanitization and Validation With WordPress</div>
<div class="roundup-block__author">Stephen Harris</div></a></li></ul><h3>Main Plugin File<br>
</h3><p>When you've created your <code class="inline">readme.txt</code> file and your main plugin file <code class="inline">tutsplus-woocommerce-panel.php</code>, you can add this code to your main file.</p><pre class="brush: php noskimlinks noskimwords">&lt;?php
/**
 * Plugin Name:     		Tutsplus WooCommerce Panel
 * Description: 			Add a giftwrap panel to WooCommerce products
 * Version: 				1.0.0
 * Author: 					Gareth Harris
 * Author URI: 				https://catapultthemes.com/
 * Text Domain: 			tpwcp
 * WC requires at least:    3.2.0
 * WC tested up to: 	    3.3.0
 * License:			    	GPL-2.0+
 * License URI:		    	http://www.gnu.org/licenses/gpl-2.0.txt
*/

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Define constants
 */
if ( ! defined( 'TPWCP_PLUGIN_VERSION' ) ) {
	define( 'TPWCP_PLUGIN_VERSION', '1.0.0' );
}
if ( ! defined( 'TPWCP_PLUGIN_DIR_PATH' ) ) {
	define( 'TPWCP_PLUGIN_DIR_PATH', plugin_dir_path( __FILE__ ) );
}

require( TPWCP_PLUGIN_DIR_PATH . '/classes/class-tpwcp-admin.php' );

/**
 * Start the plugin.
 */
function tpwcp_init() {
    if ( is_admin() ) {
        $TPWCP = new TPWCP_Admin();
        $TPWCP-&gt;init();
    }
}
add_action( 'plugins_loaded', 'tpwcp_init' );</pre><p>This will initiate your admin class.</p><p>When you activate your plugin on a site (along with WooCommerce) and then go to create a new product, you'll see your new Giftwrap panel available, along with custom fields. You can update the fields and save them... But you won't see anything on the front end yet.</p><h2>Conclusion</h2><p>Let's just recap what we've looked at so far in this article.</p><p>We've looked at an example scenario for adding a custom 'Giftwrap' panel to WooCommerce. We've created a plugin and added a class to create the panel. Within the class, we've also used WooCommerce functions to add custom fields, and then we've sanitized and saved those field values.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-11T12:29:24+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[20 Useful PHP Scripts Available on CodeCanyon]]></title>
      <link>//shineyrock.com/blog/read/20-useful-php-scripts-available-on-codecanyon</link>
      <guid>https://shineyrock.com/blog/read/20-useful-php-scripts-available-on-codecanyon#When:19:18:16Z</guid>
      <description><![CDATA[<p>For many,&nbsp;<a href="http://php.net/" rel="external" target="_blank">PHP</a>&nbsp;is the lifeblood of web development.</p><p>It may be a general-purpose scripting language, but it powers&nbsp;<a href="https://wordpress.org/" rel="external" target="_blank">WordPress</a>,&nbsp;<a href="https://www.drupal.org/" rel="external" target="_blank">Drupal</a>,&nbsp;<a href="https://magento.com/" rel="external" target="_blank">Magento</a>, and more; not to mention the thousands of individual PHP scripts available. If you've got a problem that needs an online solution, more than likely, you can solve it by creating a PHP script—or by downloading something already built.</p><p>PHP is clearly suited for web development. Take these 20 popular&nbsp;<a href="https://codecanyon.net/category/php-scripts" rel="external" target="_blank">PHP scripts</a>&nbsp;available on Envato Market, for example:</p><h2><span class="sectionnum">1.</span>&nbsp;<a href="https://codecanyon.net/item/vanguard-advanced-php-login-and-user-management/14521866?_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Vanguard - Login and User Management</a></h2><p>If you run a website of any sort and are looking to introduce some type of login and authentication management, then take a look at&nbsp;<a href="https://codecanyon.net/item/vanguard-advanced-php-login-and-user-management/14521866" rel="external" target="_blank">Vanguard</a>.</p><figure class="post_image"><img alt="Vanguard - Login and User Management" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/25584/image/vanguard.jpg"></figure><p>In short, Vanguard is a Laravel-based application that makes it possible to introduce user registration, login, and authentication (through a variety of techniques) to a pre-existing website.</p><p><em>Some</em>&nbsp;of the features it offers include:<br></p><ul><li>interactive dashboard</li><li>unlimited number of user roles</li><li>powerful admin panel</li><li>unlimited number of permissions</li><li>super easy installation using installation wizard</li><li>user activity log</li><li>Avatar upload with&nbsp;<strong>crop</strong>&nbsp;feature</li><li>built using Twitter Bootstrap</li><li>active sessions management&nbsp;(see and manage all your active sessions)</li><li>full Unicode support</li><li>client-side and server-side form validation</li><li>fully customizable from settings section</li><li>complete and detailed documentation</li><li>fully object-oriented and commented PHP and JavaScript code.</li><li>localization support—translate the application to any language&nbsp;(English, Serbian and German&nbsp;translations included)</li><li><a href="https://codecanyon.net/item/vanguard-advanced-php-login-and-user-management/14521866" rel="external" target="_blank">with more</a></li></ul><p>If you run a website and are trying to figure out how to introduce memberships without moving to a completely different platform,&nbsp;<a href="https://codecanyon.net/item/vanguard-advanced-php-login-and-user-management/14521866" rel="external" target="_blank">give Vanguard a try</a>. Perhaps it'll give you exactly what you need.</p><h2><span class="sectionnum">2.</span>&nbsp;<a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank">Instagram Auto Post &amp; Scheduler - </a><a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank">Nextpost</a><a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank"> Instagram</a></h2><p>Turn your Instagram into an automated marketing powerhouse using Instagram Auto Post &amp; Scheduler - Nextpost Instagram. This online marketing tool allows you to auto-post, schedule, and manage your Instagram accounts from one place.</p><figure class="post_image"><img alt="Instagram Auto Post  Scheduler - Nextpost Instagram" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30601/image/nextpost_600.png"></figure><blockquote>"With Nextpost, you can post and assess your posts in a single panel and save time managing multiple Instagram accounts."</blockquote><p>Features include:</p><ul><li>extendable</li><li>proxy support</li><li>schedule posts</li><li>easy installation and great UI</li><li>supports multiple Instagram accounts</li><li>supports photo, story, video, and albums</li><li>and much, much more</li></ul><p>The list of features included are impressive and include just about anything you would ever want with an Instagram online marketing tool.</p><p><a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank">Instagram Auto Post &amp; Scheduler - </a><a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank">Nextpost</a><a href="https://codecanyon.net/item/nextpost-auto-post-schedule-manage-your-instagram-multi-accounts-php-script/19456996" rel="external" target="_blank"> Instagram</a> is a must-have for any Instagram marketer.<br></p><h2>3.&nbsp;<a href="http://codecanyon.net/item/php-login-user-management/49008?s_phrase=&amp;s_rank=505&amp;_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">PHP Login &amp; User Management</a><br></h2><p>There's no need to use an entire CMS to handle user logins and have private pages that can only be viewed by logged-in visitors to your website.</p><p>This can easily be done by leveraging PHP Login &amp; User Management, a MySQL-powered website PHP login script. You can even change User Levels using the built-in Control Panel when you need different levels of page security.<br></p><figure class="post_image"><img alt="PHP Login  User Management" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/PHP%20Login%20and%20User%20Management%20-%20Image.PNG"></figure><p>This script includes:</p><ul><li>captcha integration</li><li>profiles</li><li>social media login support</li><li>login expiration</li><li>lost password activation code email</li><li>welcome and activation emails</li><li>as well as many control panel features for Admin<br></li></ul><p>With the installation wizard and the HTML5 Twitter Bootstrap design, you'll be up and running with solid&nbsp;<a href="http://codecanyon.net/item/php-login-user-management/49008?s_phrase=&amp;s_rank=505" rel="external" target="_blank">PHP Login &amp; User Management</a>&nbsp;in no time.<br></p><h2>4.&nbsp;<a href="http://codecanyon.net/item/ultimate-client-manager-crm-pro-edition/2621629?s_phrase=&amp;s_rank=1&amp;_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Ultimate Client Manager - CRM - Pro Edition</a><br></h2><p>If you need a CRM for your business, or maybe you want to up your freelance project management, instead of adding another monthly fee to your expenses, why not host your&nbsp;<em></em><em>own</em>&nbsp;customer and project management system?</p><p>More specifically, the&nbsp;<em>Ultimate</em>&nbsp;Client Manager - CRM - Pro Edition.</p><figure class="post_image"><img alt="Ultimate Client Manager - CRM - Pro Edition" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/Ultimate%20Client%20Manager%20-%20Image.jpg"></figure><p>UCM Pro really does pack an impressive punch of features. You can:<br></p><ul><li>enjoy industry-standard PGP/RSA encrypted fields</li><li>email support tickets<br></li><li>organize your leads, customers, projects, and invoices</li><li>have your customers log in and see their project status</li><li>enable subscription billing features to help organize and automate client billing</li><li>convert invoices into PDF documents</li><li>make multiple currency and tax rate adjustments</li><li>have customers and staff upload project files<br></li></ul><p>This is only a fraction of the useful features you'll find. And while this CRM contender is robust enough to challenge many other subscription-based CRMs, it's the little things like being able to change your CRM theme that give the&nbsp;<a href="http://codecanyon.net/item/ultimate-client-manager-crm-pro-edition/2621629?s_phrase=&amp;s_rank=1" rel="external" target="_blank">Ultimate Client Manager - CRM - Pro Edition</a>&nbsp;that extra polish.</p><h2><span class="sectionnum">5.</span>&nbsp;<a href="https://codecanyon.net/item/perfex-powerful-open-source-crm/14013737?_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Perfex - Open Source CRM</a></h2><p>When it comes to managing customer relationships, there are a wide variety of solutions. Truth be told, it's not a one-size-fits-all solution, which is why it's a good thing to have a number of choices.</p><p>And one of those is&nbsp;<a href="https://codecanyon.net/item/perfex-powerful-open-source-crm/14013737" rel="external" target="_blank">Perfex</a>.</p><figure class="post_image"><img alt="Perfex - Open Source CRM" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/25584/image/perfex.jpg"></figure><p>Since we're all looking for a different set of features as it relates to CRM systems, here are some of the things that Perfex offers its users:</p><ul><li>Build professional, great-looking estimates and invoices.</li><li>Powerful support system with the ability to auto-import tickets.</li><li>Track time spent on tasks and bill your customers. Ability to assign multiple staff members on task and track time per assigned staff member.</li><li>Add task followers even if the staff member is not a project member. The staff member will be able to track the task progress without accessing the project.</li><li>Keep track of leads in one place and easily follow their progress. Ability to auto import leads from email, add notes, and create proposals. Organize your leads in stages and change stages easily with drag and drop.</li><li>Create good-looking proposals for leads or customers and increase sales.</li><li>Record your company/project expenses and have the ability to bill to your customers and auto-convert to invoices.</li><li>Know more about your customers with a powerful CRM.</li><li><a href="https://codecanyon.net/item/perfex-powerful-open-source-crm/14013737" target="_self">And much, much more</a>.&nbsp;</li></ul><p>You can view features, requirements, and more on the <a href="https://codecanyon.net/item/perfex-powerful-open-source-crm/14013737" target="_self">product page</a>.</p><p>This particular product is inexpensive, available in the marketplace, and can be installed on any system that supports PHP and MySQL (which is nearly any popular, current host).&nbsp;</p><h2><span class="sectionnum">6.</span>&nbsp;<a href="https://codecanyon.net/item/php-live-chat-pro/19932933" rel="external" target="_blank">PHP Live Chat Pro</a></h2><p>Build your own PHP and MySQL chat without monthly fees using PHP Live Chat Pro. This useful PHP script boasts many useful features.</p><figure class="post_image"><img alt="PHP Live Chat Pro" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30601/image/php live chat_600.jpg"></figure><blockquote>"Live Support Chat. PHP &amp; MySQL based. For any website. No monthly fees."</blockquote><p>Features include:</p><ul><li>easy to install installation wizard</li><li>conversation history with filters</li><li>full translation support</li><li>supports file sharing</li><li>sound notifications</li><li>mobile support</li><li>geolocation</li><li>and more</li></ul><p>From the desktop to mobile applications, this works with any website.</p><p>Start chatting it up with <a href="https://codecanyon.net/item/php-live-chat-pro/19932933" rel="external" target="_blank">PHP Live Chat Pro</a>.<br></p><h2><span class="sectionnum">7.</span>&nbsp;<a href="https://codecanyon.net/item/turbo-website-reviewer-indepth-seo-analysis-tool/20069330" rel="external" target="_blank">Turbo Website Reviewer - In-Depth SEO Analysis Tool</a></h2><p>Analyze SEO issues using the Turbo Website Reviewer - In-Depth SEO Analysis Tool and provide white-labeled PDF reports. With over 50 different checks, this tool checks key issues surrounding good SEO.</p><figure class="post_image"><img alt="Turbo Website Reviewer - In-Depth SEO Analysis Tool" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30601/image/turbo website reviewer_600.png"></figure><blockquote>"Turbo Website Reviewer helps to identify your SEO mistakes and optimize your web page contents for a better search engine ranking."</blockquote><p>Features include:</p><ul><li>user management system</li><li>full multilingual support</li><li>powerful admin control</li><li>fully customizable</li><li>built-in analytics</li><li>easy installation</li><li>and more</li></ul><p>With a side-by-side domain comparison, the <a href="https://codecanyon.net/item/turbo-website-reviewer-indepth-seo-analysis-tool/20069330" rel="external" target="_blank">Turbo Website Reviewer - In-Depth SEO Analysis Tool</a> includes just about anything you would ever want to be included in an SEO analysis tool.</p><h2>8.&nbsp;<a href="http://codecanyon.net/item/super-store-finder/3630922?s_phrase=&amp;s_rank=15&amp;_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Super Store Finder</a><br></h2><p>Customers can easily find your store in style with Super Store Finder.</p><p>By fully integrating Google API V3 and using Geo IP to detect the user location, Super Store Finder allows your customers to find your location quickly and easily from their smartphones.</p><figure class="post_image"><img alt="Super Store Finder" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/Super%20Store%20Finder%20-%20Image.jpg"></figure><p>The Twitter Bootstrap powered design—complete with modal popups, tabs, alerts, and more—looks great on the desktop or smartphone. But it's the feature set of this PHP script that really catches your eye:</p><ul><li>results sorted from nearest to furthest</li><li>use Google Street View<br></li><li>unlimited locations</li><li>bulk CSV import<br></li><li>autofill search field</li><li>multi-language support<br></li><li>users can request to add locations</li><li>multiple admins<br></li><li>add your own map markers</li><li>and much, much, more<br></li></ul><p>This is a great way to leverage Google Maps into your website for both desktop and mobile users, and includes enough unique features to use&nbsp;<a href="http://codecanyon.net/item/super-store-finder/3630922?s_phrase=&amp;s_rank=15" rel="external" target="_blank">Super Store Finder</a>&nbsp;for more than your stereotypical use cases.</p><h2>9.&nbsp;<a href="http://codecanyon.net/item/mailwizz-email-marketing-application/6122150?s_phrase=emailer&amp;s_rank=27&amp;_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">MailWizz - Email Marketing Application</a><br></h2><p>There's no need to keep monkeying around with your email marketing.</p><p>If you're serious about having your own email marketing application, this is a great place to start. In fact, the MailWizz - Email Marketing Application is robust and feature-rich enough for you to become an email service provider for your customers!</p><figure class="post_image"><img alt="MailWizz - Email Marketing Application" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/MailWizz%20-%20Image.jpg"></figure><p>Autoresponders? Check.</p><p>Restful API and Web Hooks? Double check.</p><p>Powerful theming system, customizable list forms, and customer back end? Triple check.</p><p>You'll have no problem sending tens of thousands of emails in just an hour, or importing and exporting subscriber lists, reports, and stats; not to mention enjoying IP location services, and best of all,&nbsp;<em>unlimited&nbsp;</em>lists and subscribers.</p><p>The&nbsp;<a href="http://codecanyon.net/item/mailwizz-email-marketing-application/6122150?s_phrase=emailer&amp;s_rank=27" rel="external" target="_blank">MailWhizz - Email Marketing Application</a>&nbsp;includes support for many delivery servers, including SMTP Amazon SES, Directory Pickup, PHP's mail, and Sendmail.<br></p><h2><span class="sectionnum">10.</span>&nbsp;<a href="https://codecanyon.net/item/freelance-cockpit-3-project-management-and-crm/4203727?_ga=2.13664370.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Freelance Cockpit</a></h2><p>If you're a freelancer, then you know the challenges of managing all of the overhead that comes with actually managing the business (aside from managing solutions for your clients).</p><p><a href="https://codecanyon.net/item/freelance-cockpit-3-project-management-and-crm/4203727" rel="external" target="_blank">Freelance Cockpit</a>&nbsp;aims to help you do exactly that.</p><figure class="post_image"><img alt="Freelance Cockpit" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/25584/image/freelance-cockpit.jpg"></figure><p>The application offers an all-in-one solution for managing projects, tasks, support, messaging, and so much more. Some of the features include:<br></p><ul><li><strong>Multi File Upload and File Commenting.&nbsp;</strong>On all projects you can upload any kind of files, like a screenshot of the mockup you made for a new web project, and share them with your client.</li><li><strong>Client Management.&nbsp;</strong>Easily manage your clients with all the details you need.</li><li><strong>Client Portal.&nbsp;</strong>Your clients can view the status of their projects and invoices.</li><li><strong>Invoice Management.&nbsp;</strong>Creating and sending invoices was never that easy!</li><li><strong>Expenses.&nbsp;</strong>Track all your expenses.</li><li><strong>Estimates.&nbsp;</strong>Send estimates to your clients.</li><li><strong>Recurring Invoices.&nbsp;</strong>Create recurring invoices.</li><li><strong>Calendar.&nbsp;</strong>Beautiful calendar with optional Google calendar integration.</li><li><strong>Item Management.&nbsp;</strong>Manage your items/products.</li><li><strong>Reports.&nbsp;</strong>A nice chart to view your income and expenses in a given period.</li><li><strong>User Activity Widget.&nbsp;</strong>See who is online.</li><li><strong>Email Notifications.&nbsp;</strong>Get email notifications on new messages, project assignment, etc.</li><li><strong>User Access Levels.&nbsp;</strong>Control the access of your agents to the different modules.</li><li><strong>Quick Access.&nbsp;</strong>Quickly open a project or start/stop the timer using the Quick Access widget.</li><li><strong>Database backup.&nbsp;</strong>Never lose any data again!</li><li><a href="https://codecanyon.net/item/freelance-cockpit-3-project-management-and-crm/4203727" rel="external" target="_blank">And more</a>.</li></ul><p>If you're a freelancer, or even a small business, and you're looking for an all-in-one solution to help manage the overhead for all things that you're doing related to your business, check out&nbsp;<a href="https://codecanyon.net/item/freelance-cockpit-3-project-management-and-crm/4203727" target="_self">Freelance Cockpit</a>.</p><h2><span class="sectionnum">11.</span>&nbsp;<a href="https://codecanyon.net/item/coin-table-full-cryptocurrency-market-responsive-page/19946546" rel="external" target="_blank">Coin Table - Cryptocurrency Market CMS</a></h2><p>Keep up to date and share the current exchange rate for over 1,000 different cryptocurrencies with the Coin Table - Cryptocurrency Market CMS. Easily manage it within its own admin panel and create multiple authenticated users.</p><figure class="post_image"><img alt="Coin Table - Cryptocurrency Market CMS" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30601/image/cointable_600.jpg"></figure><blockquote>"Coin Table is a Content Management System built for Cryptocurrency Real-time Information."</blockquote><p>Customizable pages include:</p><ul><li>home</li><li>table</li><li>currency</li><li>converter</li></ul><p>Features include:</p><ul><li>supports all the major social networks</li><li>plug and play custom HTML ads</li><li>convert to 156 currencies</li><li>and more</li></ul><p>Keep up with Bitcoin and cryptocurrency with <a href="https://codecanyon.net/item/coin-table-full-cryptocurrency-market-responsive-page/19946546" rel="external" target="_blank">Coin Table - Cryptocurrency Market CMS</a>.<br></p><h2>12.&nbsp;<a href="http://codecanyon.net/item/premium-url-shortener/3688135?s_phrase=&amp;s_rank=2&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Premium URL Shortener</a><br></h2><p>If you've used&nbsp;Bit.ly&nbsp;very much—especially if you're using a custom domain—you'll find there's a giant leap between their free and paid service. That makes something like Premium URL Shortener a "no-brainer".</p><figure class="post_image"><img alt="Premium URL Shortener" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/Premium%20URL%20Shortener%20-%20Image.png"></figure><p>This PHP URL shortener was built with performance in mind, and that's exactly what it does. It comes complete with a powerful dashboard, admin, and geotargeting, and it's fully social-media ready. You'll not only enjoy using&nbsp;<a href="http://codecanyon.net/item/premium-url-shortener/3688135?s_phrase=&amp;s_rank=2" rel="external" target="_blank">Premium URL Shortener</a>, but maybe even take advantage of the new built-in membership system.<br></p><h2><span class="sectionnum">13.</span>&nbsp;<a href="https://codecanyon.net/item/contactme-responsive-ajax-contact-form-html5-php/20256608" rel="external" target="_blank">ContactMe - Responsive AJAX Contact Form - HTML5 PHP</a></h2><p>There's hardly anything more useful than a good contact form. Look no further! ContactMe - Responsive AJAX Contact Form - HTML5 PHP is an excellent solution.</p><figure class="post_image"><img alt="ContactMe - Responsive AJAX Contact Form - HTML5 PHP" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/30601/image/contact forms_600.jpg"></figure><blockquote>"Extremely customizable Contact Form, in a easy and quick way you can create THOUSANDS of different Contact Forms to fit your needs!"</blockquote><p>Forms include:</p><ul><li>general</li><li>send files</li><li>hotel contact</li><li>job application</li><li>restaurant contact</li><li>and many more</li></ul><p>With over 28 combinations ready to use, you'll be up and running quickly with a good-looking contact form.</p><p>Features include:</p><ul><li>no database required</li><li>easy to customize</li><li>add attachments</li><li>no page reload</li><li>supports CC</li><li>and more</li></ul><p><a href="https://codecanyon.net/item/contactme-responsive-ajax-contact-form-html5-php/20256608" rel="external" target="_blank">ContactMe - Responsive AJAX Contact Form - HTML5 PHP</a> is perfect for every developer's toolkit.<br></p><h2>14.&nbsp;<a href="http://codecanyon.net/item/php-live-support-chat/6905905?s_phrase=chat&amp;s_rank=16&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">PHP Live Support Chat</a><br></h2><p>Set up a live support chat system with PHP Live Support Chat. This PHP and SQL-based solution brings real-time chat to your website.</p><p>(Yes, it also includes a high-quality emoticon set.)</p><figure class="post_image"><img alt="PHP Live Support Chat" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/PHP%20Live%20Support%20Chat%20-%20Image.png"></figure><p>On the customer/user side, PHP Live Support Chat offers:</p><ul><li>a well-designed chat window</li><li>avatars and emoticons to keep communication clear</li><li>and mobile support</li></ul><p>From the customer support side, you'll benefit from the:</p><ul><li>chat logs</li><li>desktop notifications</li><li>prepared messages</li><li>and more!</li></ul><p><a href="http://codecanyon.net/item/php-live-support-chat/6905905?s_phrase=chat&amp;s_rank=16" rel="external" target="_blank">PHP Live Support Chat</a>&nbsp;is easy to install, supports multiple users at once, and has unlimited usage.<br></p><h2><span class="sectionnum">15.</span>&nbsp;<a href="https://codecanyon.net/item/vtgram-instagram-tool-for-marketing/18101205?_ga=2.253141964.414692013.1519097832-1867108231.1504230454" target="_self">VTGram - For Instagram Marketing</a></h2><p>Ever since Instagram introduced videos, anyone and everyone who uses the service has seen the sponsored posts.</p><p>But what if you were able to leverage the platform to market your own product without needing to use the sponsorship features they provide? Or what if you were able to target people, likes, comments, posts, etc., all from within a single application.</p><p>Enter&nbsp;<a href="https://codecanyon.net/item/vtgram-instagram-tool-for-marketing/18101205" rel="external" target="_blank">VTGram</a>.</p><figure class="post_image"><img alt="VTGram - For Instagram Marketing" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/25584/image/vtgram-sized.jpg"></figure><p>Just some of the features include:</p><ul><li>Auto Post: You can post an image and/or video. The world’s first Instagram video posting tool post from your desktop—PC or Mac.</li><li>Auto Direct Message: You can send direct messages to your followers easily.</li><li>Auto Comment: Search and comment all the posts you want in one click.</li><li>Auto Like: Search and like all the posts you want in one click.</li><li>Auto Follow: The fastest and most economical way for you if you want to increase following.</li><li>Auto Unfollow: One reason that you want to unfollow all friends. Tools can also help you.</li><li>Auto Follow Back: You’re tired of follow back. This feature will help you save time.</li><li>Search: Search top hashtags and users in the quickest way.</li><li>Social Login: Supported login via Facebook, Google, and Twitter.</li></ul><p>You can purchase, read more, see the requirements, and even test drive the application all from its page in&nbsp;<a href="https://codecanyon.net/item/vtgram-instagram-tool-for-marketing/18101205" rel="external" target="_blank">the Envato marketplace</a>.</p><h2>16.&nbsp;<a href="http://codecanyon.net/item/phpdolphin-social-network-platform/5158794?s_phrase=emailer&amp;s_rank=22&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">phpDolphin - Social Network Platform</a><br></h2><p>With the popularity of Facebook, many people have found themselves leaving the popular social network for smaller, niche online communities.</p><p>With the phpDolphin - Social Network Platform, you can host your very own social network.</p><figure class="post_image"><img alt="phpDolphin - Social Network Platform" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/phpDolphin%20-%20Image.png"></figure><p>Facebook users will find themselves right at home with:</p><ul><li>likes</li><li>profile pages</li><li>news feed</li><li>groups</li><li>sharing</li><li>and much more</li></ul><p>As Admin, you'll have full control to manage users, groups, and reports. You can even add phpDolphin plugins to extend your social network's features—Dislike Plugin, anyone?</p><p><a href="http://codecanyon.net/item/phpdolphin-social-network-platform/5158794?s_phrase=emailer&amp;s_rank=22" rel="external" target="_blank">phpDolphin</a>&nbsp;is very robust, so don't let its Facebook "cloned" design deter you from&nbsp;it.<br></p><h2>17.&nbsp;<a href="http://codecanyon.net/item/ninja-media-script-viral-fun-media-sharing-site/6822888?s_phrase=&amp;s_rank=23&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Ninja Media Script - Viral Fun Media Sharing Site</a><br></h2><p>Creating your own media sharing site has never been so easy—or looked this good!</p><p>The Ninja Media Script - Viral Fun Media Sharing Site delivers lots of features and solid design.</p><figure class="post_image"><img alt="Ninja Media Script - Viral Fun Media Sharing Site" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/Ninja%20Media%20Script%20-%20Image.jpg"></figure><p>Built with Laravel 4, Bootstrap 3, Font Awesome 4, and more, this PHP script is easy to install, customizable, and fully responsive.</p><p>Users can log in and register with their email address, Facebook, or Google, and then upload images and videos that can then be approved by a site admin or published directly.</p><p>Add a logo, use a watermark, choose your layout—you're dealing with a ninja.</p><p>Features include:</p><ul><li>add pages</li><li>commenting</li><li>likes</li><li>NSFW functionality</li><li>translation ready</li><li>and more</li></ul><p>Any YouTube, Vimeo, Vine, GIF, or JPG could go viral with the&nbsp;<a href="http://codecanyon.net/item/ninja-media-script-viral-fun-media-sharing-site/6822888?s_phrase=&amp;s_rank=23" rel="external" target="_blank">Ninja Media Script - Viral Fun Media Sharing Site</a>&nbsp;PHP script.<br></p><h2>18.&nbsp;<a href="http://codecanyon.net/item/filegator/3041013?s_phrase=zip%20password&amp;s_rank=4&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">FileGator</a><br></h2><p>Copy, move, rename, edit, delete and upload files online with FileGator.</p><p>Without using a database—or Flash—you can run this powerful PHP file manager and Ajax uploader.</p><figure class="post_image"><img alt="FileGator" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/FileGator%20-%20Image.jpg"></figure><p>Share, zip, and manage multiple files online with your own file manager.</p><p>With FileGator's fast and easy-to-use UI, you can:</p><ul><li>use Google's URL shortener for email links</li><li>have multiple user and guest accounts</li><li>search files and folders</li><li>create archives with zip</li><li>unzip and decompress files online</li><li>and much more</li></ul><p>Easy to install, easy to use, easy to download&nbsp;<a href="http://codecanyon.net/item/filegator/3041013?s_phrase=zip%20password&amp;s_rank=4" rel="external" target="_blank">FileGator</a>.<br></p><h2>19.&nbsp;<a href="http://codecanyon.net/item/stock-manager-advance-with-point-of-sale-module/5403161?s_phrase=&amp;s_rank=24&amp;_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Stock Manager Advance with Point of Sale Module</a><br></h2><p>You can update product stock, purchases, and sales with an Internet connection and Stock Manager Advance with Point of Sale Module.</p><p>Manage multiple warehouses, generate reports, and more.</p><figure class="post_image"><img alt="Stock Manager Advance with Point of Sale Module" src="https://cms-assets.tutsplus.com/uploads/users/1225/posts/25584/image/Stock%20Manager%20Advance%20with%20Point%20of%20Sale%20Module%20-%20Image.jpg"></figure><p>Features:</p><ul><li>works well with touch screens</li><li>print order and bill</li><li>supports Stripe and PayPal Pro</li><li>calendar and calculator</li><li>staff and customer notifications</li><li>and more<br></li></ul><p>Manage your standard, combo, and digital products with&nbsp;<a href="http://codecanyon.net/item/stock-manager-advance-with-point-of-sale-module/5403161?s_phrase=&amp;s_rank=24" rel="external" target="_blank">Stock Manager Advance with Point of Sale Module</a>.</p><h2><span class="sectionnum">20.</span>&nbsp;<a href="https://codecanyon.net/item/rise-ultimate-project-manager/15455641?_ga=2.253141964.414692013.1519097832-1867108231.1504230454" rel="external" target="_blank">Rise Project Manager</a></h2><p>Project management is one of those areas of running a business that some prefer more than others. If you're a freelancer, it comes with the territory; if you're part of a larger business, then it may be your role.</p><p>Regardless, finding the best way to manage said projects can be tough. Perhaps&nbsp;<a href="https://codecanyon.net/item/rise-ultimate-project-manager/15455641" rel="external" target="_blank">Rise</a>&nbsp;is a viable solution?</p><figure class="post_image"><img alt="Rise Project Manager" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/25584/image/rise-pm.jpg"></figure><p>Straight from&nbsp;<a href="https://codecanyon.net/item/rise-ultimate-project-manager/15455641" rel="external" target="_blank">the product page</a>:</p><blockquote>Ultimate Project Manager is the best way to manage your projects, clients and team members. You can easily collaborate with your team and monitor your work. It’s easy to use &amp; install.<br></blockquote><p>And it has a ton of features, to boot. Some of the examples include:</p><ul><li><strong>Projects.&nbsp;</strong>Manage all your projects using some amazing tools. Create tasks in projects and assign your team members on the tasks. Create milestones to estimate the timeframe. Upload files by dragging and dropping in projects and discuss with your team. Let your team members comment on tasks and get notifications for important events. See activity logs for projects.</li><li><strong>Clients.&nbsp;</strong>It’s very simple to add your clients in Rise. You’ll get detailed information about contacts, projects, invoices, payments, estimates, tickets and notes of each client. You can allow your clients to use the client portal. Each client will get a separate dashboard to see their projects. Let your clients create tasks for the projects and get feedback instantly.</li><li><strong>Team members.&nbsp;</strong>Assign tasks to your team members and monitor the status easily. You can set different permissions on their access.</li><li><strong>Invoices.&nbsp;</strong>Send invoices to your clients by email with a PDF copy of the invoice. And get paid online via Stripe and PayPal.</li><li><strong>Estimates.&nbsp;</strong>Create estimate request forms according to your needs and let your clients request estimates. Review the estimate requests and submit your estimates to clients.</li><li><strong>Tickets.&nbsp;</strong>Let your clients create support tickets and get notification by web and email. Assign team members to tickets and track the status.</li><li><strong>Expenses.&nbsp;</strong>Track all your expenses and get information about your project cost easily.</li><li><strong>Event calendar.&nbsp;</strong>Create your personal events list and share events with team members.</li><li><strong>Messaging.&nbsp;</strong>Send private messages to team members and clients.</li></ul><p>And there's clearly&nbsp;<a href="https://codecanyon.net/item/rise-ultimate-project-manager/15455641" rel="external" target="_blank">much, much more</a>.</p><p>If you find yourself in this role, then I highly recommend checking out what Rise has to offer and see if it fits the bill. In a field that's got a lot of competition, this particular product may hit the right price point.</p><h2>Conclusion</h2><p>You can clearly see how versatile PHP is—it can be used for anything from simple solutions to full social networks and project management.<br></p><p>On Envato Tuts+, you'll find all kinds of helpful resources to learn PHP, like&nbsp;<a href="http://code.tutsplus.com/categories/php" rel="external" target="_blank">PHP tutorials</a>,&nbsp;<a href="http://code.tutsplus.com/ebooks" rel="external" target="_blank">code eBooks</a>, and&nbsp;<a href="http://code.tutsplus.com/categories/php/courses" rel="external" target="_blank">video code courses</a>. I particularly enjoy the video code courses. They have beginner PHP courses, like&nbsp;<a href="http://code.tutsplus.com/courses/introduction-to-wordpress-plugin-development" rel="external" target="_blank">Introduction to WordPress Plugin Development</a>&nbsp;and&nbsp;<a href="http://code.tutsplus.com/courses/php-fundamentals" rel="external" target="_blank">PHP Fundamentals</a>, or more advanced video courses such as&nbsp;<a href="http://code.tutsplus.com/courses/php-object-oriented-programming-fundamentals" rel="external" target="_blank">PHP Object Oriented Programming Fundamentals</a>&nbsp;and&nbsp;<a href="http://code.tutsplus.com/courses/go-further-with-woocommerce-themes" rel="external" target="_blank">Go Further With WooCommerce Themes</a>. No matter your learning style, you'll be sure to find helpful PHP code courses.</p><p>And if you're curious to know what other PHP scripts are out there, take a peek at what's on offer at&nbsp;<a href="https://codecanyon.net/category/php-scripts" rel="external" target="_blank">Envato Market</a>.</p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-05-03T19:18:16+00:00</dc:date>
    </item>
  
    <item>
      <title><![CDATA[How to Find and Fix Poor Page Load Times With Raygun]]></title>
      <link>//shineyrock.com/blog/read/how-to-find-and-fix-poor-page-load-times-with-raygun</link>
      <guid>https://shineyrock.com/blog/read/how-to-find-and-fix-poor-page-load-times-with-raygun#When:14:43:46Z</guid>
      <description><![CDATA[<p>In this tutorial, we'll focus on finding and fixing poor page load times with <a href="https://raygun.com/" rel="external" target="_blank">Raygun</a>. But before we do that, let's discuss why slightly longer page load times can be such a big deal.<br></p><p>One of the most important things that you can do to make a good first impression on potential customers or clients visiting your website is improve its loading speed.</p><p>Imagine a customer who just heard about your company from a friend. You sell a product online which users can purchase by visiting your website. If different website pages are taking a long time to load and you are not selling that product exclusively, there is a good chance that the customer will abandon your site and go somewhere else.</p><p>You did not just miss out on your first sale here, you also missed the opportunity to have a loyal customer who would have purchased more products in the future. <br></p><p>That's the thing with the Internet—people are just a few clicks away from leaving your website and buying something from your competitors. Faster loading pages can give you an edge over competitors and <a href="https://www.fastcompany.com/1825005/how-one-second-could-cost-amazon-16-billion-sales" rel="external" target="_blank">increase your revenue</a>.<br></p><h2>How Can Raygun Help?</h2><p>Raygun relies on Real User Monitoring Insights (RUM Insights) to improve a website's performance and page load time. The term "Real User Monitoring" is the key here. You could use tools like <a href="https://www.webpagetest.org/" rel="external" target="_blank">WebPagetest</a> and <a href="https://developers.google.com/speed/pagespeed/insights/" rel="external" target="_blank">Google Page Speed Insights</a> to optimize individual pages, but those results will not be based on real user data. On the other hand, the data provided by Raygun is based on real users who visited your website.</p><p>Raygun also presents the information in a more organized manner by telling you things like the average page speed for the website, the most requested pages, and the slowest pages. This way, you can prioritize which page or section of the website needs to be optimized first.</p><p>You can also see how fast the website is loading for users in different countries or for users with different browsers. Similarly, you can compare the speed of your website on mobile vs. desktop. </p><p>Another advantage of Raygun is that it will show you how the website is performing for different users. For example, the website may be loading slowly for one of your most valuable clients. In such cases, you would definitely like to know about it and do something to improve their experience before it is too late.<br></p><p>We will learn how to do all that with Raygun in the next few sections of this article.</p><h2>Integrating Raygun Into Your Website</h2><p>You need to <a href="https://app.raygun.com/signup" rel="external" target="_blank">sign up for an account</a> before integrating Raygun into your website. This account will give you access to all Raygun features for free for 14 days.</p><p>Once you have registered successfully, you can click on the <strong>Create Application</strong> button to create a new application. You can fill out a name for your application on the next screen and then check some boxes to receive notifications about errors and real user monitoring insights.</p><figure class="post_image"><img alt="Create Raygun Application" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/setup-app-name.png"></figure><p>Now you just have to select your development platform or framework. In this case, we are using JavaScript.</p><figure class="post_image"><img alt="Choose Raygun Language or Framework" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/steup-framework.png"></figure><p>Finally, you will get some code that you have to add on all the pages you want to monitor. Instead of placing the following code in your website, you could also download the <a href="http://cdn.raygun.io/raygun4js/raygun.min.js" rel="external" target="_blank">production</a> or <a href="http://cdn.raygun.io/raygun4js/raygun.js" rel="external" target="_blank">development</a> version of the library and include it yourself.</p><pre class="brush: javascript noskimlinks noskimwords">&lt;script type="text/javascript"&gt;
  !function(a,b,c,d,e,f,g,h){a.RaygunObject=e,a[e]=a[e]||function(){
  (a[e].o=a[e].o||[]).push(arguments)},f=b.createElement(c),g=b.getElementsByTagName(c)[0],
  f.async=1,f.src=d,g.parentNode.insertBefore(f,g),h=a.onerror,a.onerror=function(b,c,d,f,g){
  h&amp;&amp;h(b,c,d,f,g),g||(g=new Error(b)),a[e].q=a[e].q||[],a[e].q.push({
  e:g})}}(window,document,"script","//cdn.raygun.io/raygun4js/raygun.min.js","rg4js");
&lt;/script&gt;<br></pre><p>Once you have added the above code snippet before the closing <code class="inline">&lt;/head&gt;</code> tag, you have to place the following snippet just before the closing <code class="inline">&lt;body&gt;</code> tag.</p><pre class="brush: javascript noskimlinks noskimwords">&lt;script type="text/javascript"&gt;
  rg4js('apiKey', 'YOUR_API_KEY');
  rg4js('enableCrashReporting', true);
  rg4js('enablePulse', true);
&lt;/script&gt;</pre><p>If you don't add any more code, Raygun will now start collecting anonymous data. This means that you will be able to know how your website is performing for different users, but there will be no way to identify those users.</p><p>There is an easy fix for this problem. All you have to do is add the following code in your webpages and Raygun will take care of the rest.</p><pre class="brush: javascript noskimlinks noskimwords">rg4js('setUser', {
  identifier: 'unique_id',
  isAnonymous: false,
  email: 'users_email@domain.com',
  firstName: 'Firstname',
  fullName: 'Firstname Lastname'
});</pre><p>You will have to include these three pieces of code in all the pages that you want to track. Once done, the data will start showing up in the dashboard for you to analyze.</p><h2>Finding Pages With Poor Load Times</h2><p>The Real User Monitoring section in the Raygun dashboard has a lot of tabs to present the data in different formats. We will briefly go over all these tabs to show you how the information presented in them can be used to find pages with poor load times.</p><figure class="post_image"><img alt="Raygun Live Sessions - Visiting Countries" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/visiting-countries.png"></figure><p>The <strong>Live</strong> tab will give you an overview of your site's performance in real time. It has different metrics like <strong>Health Score</strong> to show you how the site is currently performing. You can read more about all these metrics in the <a href="https://raygun.com/docs/pulse/Live" rel="external" target="_blank">documentation for the Live tab</a> on the Raygun website.</p><p>It also has a world map to point out the countries of your currently
 active users. You will also find a list of most recent requests to your
 website by different users. Here is an image showing the most recent requests to our website.<br></p><figure class="post_image"><img alt="Live Tab - Recent Requests" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/recent-requests.png"></figure><p>The performance tab has five useful metrics to give you a quick overview of the website page load times. For example, a median load time of 1.41 seconds means that 50% of your pages load before 1.41 seconds have passed. Similarly, a <strong>P90 Load Time</strong> of 6.78 seconds tells you that 90% of the time, the website loads before 6.48 seconds.</p><figure class="post_image"><img alt="Performance Tab" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/whole-website.png"></figure><p>This should give you a rough idea of the performance of a website and how slow it is for the slowest 10% of users.<br></p><p> The performance tab also has a list of the slowest and most requested pages at the bottom. Knowing the most popular and the slowest pages can be very helpful when you want to prioritize which sections of your website need to be fixed first.</p><p>Even though all pages in a website should load as quickly as possible, some of these pages are more important than others. Therefore, you might be interested in finding out the performance of a particular page on a website. You can do so by simply typing the page you are looking for in the input field. This will give you information about the median, average, and P90 load time of a particular page. Here is the data for the home page of our website.<br></p><figure class="post_image"><img alt="Page load time data for a sample website" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/specific-page.png"></figure><p>You can use the <strong>Sessions</strong> tab to see session-related information like the total number of sessions, total number of users, and median session length. The sessions table will give you a quick overview of the last 150 sessions with information like the country, duration, total page views, and the last visited page for a session.</p><p>Clicking on the magnifying glass will show you more details of a particular session like the pages the user visited, the load time of those pages, and the browser/device used during the session.</p><p>The <strong>Users</strong> tab will give you an overview of the satisfaction level of different users with your website. This can be very helpful when you want to see how a particular user is interacting with your website and if or why their page load time is more than expected.</p><p>There are three other tabs to show information about all the page views in terms of browsers, platforms, and geography. This way you will be able to know if a webpage is loading slowly only on a particular browser or platform. You will also have a rough idea of the distribution of users. For instance, knowing if most of your clients are from a particular country or use a particular browser can be very handy.</p><p>Raygun lists the percentage of visitors from a particular continent at the top of the <strong>Geo</strong> tab. After that, it provides a map with the distribution of load times. Countries with the slowest load times are filled with red, and countries with quick load times are filled with green.</p><figure class="post_image"><img alt="Raygun Geo Tab" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/geo-tab.png"></figure><p>If you are consistently getting poor loading times from a particular country, it might be worth your time to look closely and find out the reason.</p><h2>Fixing Poor Page Load Times</h2><p>In the previous section, we learned how to use all the data collected by Raygun to figure out which pages are taking a long time to load or if there are any countries where our page load times are longer than usual.</p><p>Now it is time to see how we can use Raygun to discover issues which might be causing a particular page or the whole website to load slower than usual.</p><p>Improving poor page load time of a website can be pretty overwhelming, especially if the website is very complicated or if it has a lot of pages. The trouble is in finding what to improve and where to start.</p><p>Luckily, Raygun can offer you some general insights to fix your website. You can click on the <strong>Insights</strong> options under the <strong>Real User Monitoring</strong> menu, and Raygun will scan your website for any potential issues. You can find a list of all these rules in the <a href="https://raygun.com/docs/pulse-insights/the-rules" rel="external" target="_blank">official Raygun documentation</a>. Fixing all the listed issues will significantly speed up your website.</p><figure class="post_image"><img alt="Raygun Insights Rules" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/insight-rules.png"></figure><p>Besides following these general guidelines, you might also want to isolate the pages that have been loading slowly. Once you have isolated them, Raygun can show you the time they take to resolve DNS, latency, SSL handshake, etc. This will give you a good idea of the areas where you can make improvements to reduce the page load time. The following image should make it clear.</p><figure class="post_image"><img alt="About Us Page" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/about-us-no-filter.png"></figure><p>You can also filter the data in order to get a more accurate picture of the load time for a particular page and various factors affecting it. The above image showed you the average latency for all requests made to the "About Us" page. However, you can click on the <strong>Add Filter</strong> button at the top and only see the "About Us" loading time graph for a specific country like Italy.</p><figure class="post_image"><img alt="About Us Italy Filter" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/about-us-italy.png"></figure><p>You will also see all the requests made by a specific page at the bottom. Basically, you will be able to see the DNS, latency, SSL, server, and transfer time for every resource loaded for a specific page and see if any of them is the culprit.</p><figure class="post_image"><img alt="About Us Requests" src="https://cms-assets.tutsplus.com/uploads/users/1251/posts/30961/image/about-us-requests.png"></figure><p>Once you find out which resources are taking too long to load, you can start optimizing your pages.<br></p><h2>Final Thoughts</h2><p>As you saw in this tutorial, Raygun can be of great help to organizations looking to improve their page load times. It is super easy to integrate, and after successful integration, the data will simply start showing up in the dashboard without any intervention from your side.</p><p>Raygun also has different tabs to organize the collected data so that you can analyze it more easily and efficiently. For example, it can show you load times for different countries, browsers, and platforms. It also has filters that you can use to isolate a particular set of data from the rest and analyze it closely.</p><p>If you or your company are looking for an easy-to-integrate tool which can provide great insights about how your real users are interacting with your website, you should definitely <a href="https://app.raygun.com/signup" rel="external" target="_blank">give Raygun a try</a>. You don't have anything to lose since it is free for the first 14 days!</p><p>And while you're here, check out some of our other tutorials on Raygun!</p><ul class="roundup-block__contents posts--half-width roundup-block--list">
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/tutorials/error-and-performance-monitoring-for-web-mobile-apps-using-raygun--cms-30311"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/1469/posts/30311/preview_image/ray.png"><div class="roundup-block__primary-category topic-code">Angular</div>
<div class="roundup-block__content-title">Error and Performance Monitoring for Web &amp; Mobile Apps Using Raygun</div>
<div class="roundup-block__author">Roy Agasthyan</div></a></li>
<li class="roundup-block__content"><a class="roundup-block__content-link" href="http://code.tutsplus.com/tutorials/getting-started-with-raygun-insights-and-crash-reporting-for-app-developers--cms-24852"><img class="roundup-block__preview-image" src="https://cms-assets.tutsplus.com/uploads/users/34/posts/24852/preview_image/Getting-Started-With-Raygun---Insights-and-Crash-Reporting-for-App-Developers.png"><div class="roundup-block__primary-category topic-code">JavaScript</div>
<div class="roundup-block__content-title">Getting Started With Raygun: Insights and Crash Reporting for App Developers</div>
<div class="roundup-block__author">Jeff Reifman</div></a></li>
</ul><p></p>]]></description>
      <dc:subject><![CDATA[Daily]]></dc:subject>
      <dc:date>2018-04-26T14:43:46+00:00</dc:date>
    </item>
  
    </channel>
  </rss>