Blog Archives

A Fresh Coat of Paint

As with most things, a little change can be a great thing.

I’ve finally gotten the basics of my new WordPress theme finished and uploaded. I got so bored with all of these business themes with their straight lines and boring colors…

… so I decided to kick it up a notch!

This is the new version of my site. There’s a lot of angles, colors, and various insights to my life that aren’t work related. Eventually I want to do a lot more, but I know that the best things in life are built a bit at a time… Rome wasn’t built in a day, after all!

Everything is built with CSS and Flexbox. I debated using Grid, but I knew I could get Flexbox to behave – especially with the vertical timeline in the middle of the page.

I still need to add my portfolio, but I feel like this is a much more vibrant representation of who I am. I’m not stuffy, business minded… I want to make the web a more beautiful place.

The site also adds in a few of my other passions as well: specifically, gaming, ministry, and culture. I know this seems like a smorgasbord of topics, but they all come together to form who I am, and they (combined with my design and development work) are the lenses in which I view life.

Some things to note:

  • The lines are angled at 1.75 degrees
  • The backgrounds all scroll at the same rate, even those the images are different.
  • I created a function specifically to randomize the background color on some sections because I love a little bit of chaos 🙂
  • The calendar is running a customized version of Modern Tribe’s “The Events Calendar”. I wanted something where I could have a nice way to look at upcoming stuff. Eventually, I’ll have streams (Twitch or YouTube) and other ‘short term’ items that aren’t just conferences.
  • I have a few other ideas that will be coming soon. But I want to nail down what I have before I add on, and that’s nearly done!

I’ve never felt so good about a design as I do about this one, and I feel like it’s… me. It’s a little rad, a little chaotic, and bright – just like I aspire to be in real life!


Getting into Gutenberg, Part 2: A Knee-Jerk REACTion (and an Introduction to Gutenberg Blocks)

I wrote yesterday on Gutenberg, WordPress' soon-to-be editing experience, as it was highly mentioned at WordCampUS here in Nashville over the weekend. Yesterday, I focused specifically on the outer facade of Gutenberg – movable blocks, layouts, and modular approaches to content.

Today, we're going to look at the back-end. For a WordPress developer, this is where their experience may become a little less rosy. For a modern developer, a lot of this will look familiar.

Gutenberg's Content Structure

Gutenberg's content is structured into "blocks". A block is simply a syntaxed area of code that WordPress recognizes as something it should hook into with the editor.

On the outside, as we saw yesterday, a typical text block looks like your standard paragraph. But on the backend…

…we have syntax. Commented code that Gutenberg recognizes to store its information. Those paragraphs are pretty standard fare, but there could also be parameters…

…stored as an array.

This is the first of two pain points a lot of developers seem to have, as a structure like this is just not sustainable in the long run. Commented code is normally frowned upon in clean standards, and with WordPress using it as the primary source of templating for Gutenberg, it seems that (for the moment) the simple content looks bloaty on the inside.  One of the biggest outside forces right now in the development cycle – other than adoption and testing – is for a better, cleaner, leaner way of storing data.

Adding a New Block

I've been fiddling with Gutenberg's block syntax all day, and I've finally come up with something of a boilerplate to use for plugins.

<?php

/**
 * Plugin Name: Mitch's Gutenblocks
 * Plugin URI: https://github.com/WordPress/mitch-gutenblocks
 * Description: Mitch's playground for creating new blocks for Gutenberg.
 * Version: 1.0.0.0
 * Author: Mitch Canter
 * Author URI: https://www.mitchcanter.com
 *
 * @package mitch-gutenblocks
 */

 /** Defining Constants **/
 define( 'SG_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
 define( 'SG_PLUGIN_URL', plugin_dir_url( __FILE__ ) );

 /** Separating Files **/
 require_once ( SG_PLUGIN_PATH . 'blocks/sample-block/sample-block.php');

For our main plugin file, I've defined constants and broken the actual block off into its own file.

Our structure looks something like this:

mitch-gutenblocks
|- blocks
|--- sample-block
|----- block.js
|----- index.php
|----- sample-block.php
|--- index.php
|- index.php
- mitch-gutenblocks.php

We have our root folder (with main plugin file), a separate folder for each block, and a javascript and php file inside of that folder (along with silencing indices for each level).

Let's look at the sample-block.php code:

<?php

function sample_block_editor_assets() {
	wp_enqueue_script( 'sample-block', plugins_url( 'block.js', __FILE__ ), array(
		'wp-blocks',
		'wp-i18n',
		'wp-element',
	), time() );

	wp_enqueue_style( 'giphy-block', plugins_url( 'editor.css', __FILE__ ), array( 'wp-blocks' ), time() );
}
add_action( 'enqueue_block_editor_assets', 'sample_block_editor_assets' );

But wait, you may ask… where is all of the plugin functionality?

Welcome to Gutenberg's second pain point with WordPress developers – all of the blocks are based on React JavaScript. I think that of the two major pain points, this is the loudest simply because WordPress developers see PHP as the defining language of their platform. I'll go into another post explaining why this is turning into an incorrect assumption another time, but the long story short is this: with WordPress turning into a REST-API powered CMS, we can start to focus on other languages to create WordPress sites.  React is a natural choice, despite its baggage or emotional reaction.

Here is a VERY simple block.js file:

( function( wp, $, _ ) {
	var __ = wp.i18n.__;

	wp.blocks.registerBlockType( 'sample-block/sample-block', {
		title: __( 'Sample Block', 'sample-block' ),
		category: 'common',
		icon: 'admin-plugins',
		keywords: [ 'sample' ],

    edit: function edit( props ) {

      ... code goes here ...
 
		},

    save: function save( props ) {

      ... code goes here ...

		},

	} );

} )( window.wp, window.jQuery, window._ );

Let's walk through it. If you're familiar with React, this syntax may be familiar. If not, here's what's going on:

The first few lines set up the function and call wp.blocks.registerBlockType – similar to firing up a class in PHP. We're using an abstracted layer to generate the guts of the block itself.  We define a title, category, an icon (via Dashicon naming) and any keywords we want to have this pop up for in search.

There are two important sections: Edit, and Save. Editing functions are what happen as you use the block in the editor. You can modify the block at will with functions, and any inputs you have can be utilized in the next function.

Save functions fire when the box itself is manipulated. Moving a box, adding a box, or any other CRUD functions will fire the save command and make sure any data currently in the box isn't lost.  

Change for Change Sake? Or Progression?

There are very, very loud opinions on both sides of the aisle on this topic. WordPress purists argue that PHP is the de-facto language for WordPress. Why use another framework to do something that we've been able to do for a long time – create content?

On the other hand, progress marches on, and others see value in allowing other frameworks that are maturing and progressing to interact with WordPress.

We're going to continue to look through the Gutenberg platform over the next days – adding a block is fine and dandy, but what does that mean for meta boxes, options in WordPress (stored via PHP) and other data we already have in WordPress?

That's a whole different post altogether!


WordCamp US – In Nashville!

In less than one week, WordPress enthusiasts from all over the globe will converge on Nashville, TN for WordCamp US – the annual pilgrimage to celebrate, learn about, and meet others interested in WordPress.

Nashville’s been my home for over 10 years now, and has a very strong WordPress community here. I’ve been very privileged to work for an organization that celebrates WordPress’ role on the web – Vanderbilt has over 2,600 WordPress sites and that number is ever expanding!

But this isn’t about WordPress.  This is about Nashville, and the things you absolutely have to do when you get here, if you’re coming in.

Food

  • Hot chicken absolutely has to be first on the list. Go to Hatti B’s or Prince’s. I prefer Hatti B’s myself, but if you want to avoid the 30minute + lines, there’s a new location on 8th street that may prove closer.
  • The Pancake Pantry is great, but if you can get further out of the city go to Loveless Cafe – it’s west of town on Highway 100. Take enough people, and you can get the all-you-can-eat breakfast and just shovel in as much food as you can handle. The biscuits are top. notch.
  • Cracker Barrel has a new concept called Holler and Dash that has phenomenal biscuits, too. Worth a look because it’s just so unique. Also down on 8th street. I’m not joking when I call it “hipster cracker barrel”.
  • Otaku Ramen is down in the Gulch area – just a stones throw from downtown. Fantastic food, and just down the street from the Yazoo Brewery – which, by the way, has the best local beer in town.

Stuff to Do

  • We have a life-size replica of the parthenon in Centennial Park. Go see it – it’s free, and it’s pretty cool to look at. It was featured in the Percy Jackson – Lightning Thief movie.
  • The Opryland Hotel is lit up for the holidays. It’s gorgeous. A bit outside the city, but it’s adjacent to the Opry Mills Mall which has a LOT of shopping opportunities.
  • Nearby is ICE! – 2 million pounds of ice carved into sculptures and 4 two-story ice slides. Super cool – pun completely intended.
  • Downtown is pretty fun to just wander around. There’s a ton of restaurants, honky-tonks, live music, and people to watch.
  • The Nashville Predators play two games during the weekend of WordCamp – one against the Hurricanes on Thursday and another against the Ducks on Saturday. ESPN voted Nashville’s fans as the #1 fans IN ALL OF SPORTSDOM. You should check out a game to see why – Bridgestone Arena is across the street from the conference venue!
  • Vanderbilt is a working Arboretum, and is an open campus to walk around. Come explore the campus and see all the beautiful trees and buildings!
  • If you like country music – or even if you’re just curious about it – the Johnny Cash museum and the Country Music Hall of Fame are in a good spot downtown to walk to – nearby to the convention center.

This is just a small, small list of my favorite things to do in Nashville. And we haven’t even touched on Franklin (south of town – if you’re a Civil War buff, there’s a LOT of history here, and it’s the number 1 town square in the country). If you’re coming in, leave a message below and let’s connect.

Welcome to our beautiful city. It’s definitely quirky and unique, but we hope you’ll find it as much a home as I do!


High Ed Web 2017: A Hart(ford) for Higher Ed

Some super awesome presenter talking about Docker at HighEdWeb. Man does that guy look handsome ;)

Some super awesome presenter talking about Docker at HighEdWeb. Man does that guy look handsome 😉 photo credit HighEdWeb.

I’ve only been home for a few hours, but the lessons and memories of HighEdWeb 2017 are still fresh on my mind.  I feel like one of the few people on earth that actually recharge at a conference, but after WPCampus earlier in the year, I was ready to get back out and network with my fellow web geeks again.  Yes, I’m exhausted, and yes it’s great to be home, but I can honestly say it was one of the favorite conferences I’ve been to.

Fantastic Content

A lot of the conferences I attend tend to be geared toward a certain type of people: marketing, social media, developer people with a focus on business. And while that’s not a bad thing, I always appreciate a fresh perspective when it comes to the content. HighEdWeb’s focus is purely Higher Education – and it’s awesome to see what other institutions are doing to push the envelope with web, social, and marketing stuff.  I sat in on a few sessions and all of them were extremely informative and entertaining.

  • I’ve been working on a new campus map for Vanderbilt, and there were several map-focused sessions intersecting various pieces of the map puzzle.
  • Knowing that others in the field are going through the same things you are going through? Priceless.
  • A deep(er) dive into WP-CLI – something I’ve been exploring in my workflow both at work and on freelance projects.

And that’s just a cross-section of the amazing content there.

Inspiring Keynotes

I’m going to be honest: I’ve been looking forward to Felicia Day’s keynote ever since it was announced. And it was everything I hoped it was. What I -didn’t- expect was to be blown away by Tatjana Dzambazova’s keynote, and a look into what she’s done for both the maker movement and the future of technology. 3D Printing, virtualization of real life environments… I felt like I was looking into the future, happening now.

And yes, Felicia Day’s keynote was EXCEPTIONAL. It’s a bit surreal to hear her story, since it mirrors my own so closely: a rural kid turns to the internet for friendship, learn French and how powerful community is. Technology changed my life, and I learned today it did the same for her and her career.

Personal Development

I was extremely fortunate to be able to present a session at this year’s conference. I chose “Local Development Made Easy” as my topic, and was able to talk about something that’s changed my development life: Docker.

I was even more blown away, however, when my session was announced as this year’s “Best in Track” for the development track. I received one of the coveted “red staplers” and was asked to present again. I didn’t win the “Best in Conference”, but from what I heard the session that won absolutely deserved it!.

Felicia Day signed my stapler. It was a good day.

Felicia Day signed my stapler. It was a good day.

Out of the Gate

Don’t get me wrong: I love coming out of a conference fired up and ready to change the world – and HighEdWeb was no difference – but this time, it’s got me taking a long hard look at my priorities in life. I have so many wonderful, amazing ideas I want to pursue, and at the end of the day I just want to make sure I’m making time for what matters: myself, my family, and to be able to invest some time into doing something awesome.

I’ve got ideas, for sure. I’ve come off this conference remembering how much I love teaching. I want to get back to writing guides, doing videos, and other stuff that people can use to learn to do their craft better. And beyond that? Who knows. All I know is that I want to do something amazing, and I can’t wait to get started.

HighEdWeb’s got a special place in my heart. It’s only my second year, but the people there make it truly special. They are people passionate about the web, and using it to shape and mold the people that are the future of our country. And in today’s culture, anything we can do to spread a little love around – whether it’s online or in real life – is worth doing well. And bettering ourselves with technology? That helps us do  it even better.

Featured Photo Credit: Lacy Paschal (@lacydev)


Ajax + jQuery: An Introduction

Since Twitch released their ‘Twitch Extensions’ SDK, I’ve been having a lot of fun playing around with different things I can integrate into Twitch’s panels. I’ve build a WordPress Panel and I’m working on Tumblr and Instagram Panels (which require a lot more API work).  But the crux of everything I’ve been working on relies on getting data from source to destination in a way that makes sense to everyone. At one point, RSS feeds were the de-facto standard. Personally, I think there’s a better solution – one that uses a more pure form of data in transmission: Ajax.

Ajax, or (Asynchronous JavaScript and XML), uses JavaScript to pull a data-based content feed and display it somewhere in a content space.  I prefer using jQuery’s $.ajax function with a JSON feed, but there are numerous combinations of ajax and feeds you can use.  Today, we’re going to write a very simple “feed fetching” application that will allow us to not only fetch the feed, but to re-fetch it on demand.

See a working JSFiddle here: https://jsfiddle.net/45qsp39y/

HTML Markup

First off, we’re going to generate some basic HTML. We’re not going to re-invent the wheel here. We need two items: a container for the content we’re going to pull, and a mechanism for fetching more. A div and button will suffice:

<html>
  <head>
    ...
  </head>
  <body>
    <div id="feed"></div>
    <button class="button">Random Chuck Norris Joke</button>
  </body>
</html>

Notice how the #feed doesn’t have any additional fields; it’s just an empty container. We’re going to call some basic markup to fill that as we bring the feed in.

The jQuery / JavaScript

First off, we need to ensure that we’ve brought in the jQuery library:

<html>
  <head>
   <script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
   <script type="text/javascript">
    ...
   </script>
  </head>
  <body>
    <div id="feed"></div>
    <button class="button">Random Chuck Norris Joke</button>
  </body>
</html>

We’re also going to include a script tag. Normally, you could include this in a script file to clear up the markup, but for a small example it’s fine to leave it inline so we can show our work.

Now, the fun part: including the $.ajax command that jQuery uses to fetch our feed.

function fetchFeed() {
  $.ajax({
    url: 'https://api.icndb.com/jokes/random',
    dataType: 'json',
    type: 'GET',
    success: function(data) {
      var output = '<p>' + data.value.joke + '</p>';
      $('#feed').html(output);
    },
    error: function(jqXHR, exception) {
      if (jqXHR.status === 0) {
        var output = '<p>Unable to access WordPress Posts. Please check your URL and try again!</p>';
     } else if (jqXHR.status == 404) {
       var output = '<p>The requested page not found. [404]</p>';
     } else if (jqXHR.status == 500) {
       var output = '<p>Internal Server Error [500].</p>';
     } else if (exception === 'parsererror') {
       var output = '<p>Requested JSON parse failed.</p>';
     } else if (exception === 'timeout') {
       var output = '<p>Time out error.</p>';
     } else if (exception === 'abort') {
       var output = '<p>Ajax request aborted.</p>';
     } else {
       var output = '<p>Uncaught Error.\n' + jqXHR.responseText + '</p>';
     }
       $('#feed').html(output);
     }
  });
}

$('button.button').click(function() {
 fetchFeed();
});

fetchFeed();

There’s a lot going on here. Let’s break it down:

  • Between lines 1 and  29 are the fetchFeed() function. This wraps all of the scripting we need to run into a function that we can call 1) automatically on page load and 2) on an action we will define later.
  • Line 2 starts the $.ajax function: a helper function included in jQuery that makes it easier to write AJAX calls.
  • Line 3 is our feed url – in this case, a random “Chuck Norris” joke. Because why not.
  • We’re telling our application what KIND of data to pull in Line 4. In this case, it’s JSON. If it were another format, we could define that here and jQuery would appropriately format said data.
  • Line 5 is how we’re approaching the data. We’re “GET”ing this data, which means we’re fetching data from another source. If we had the appropriate permissions we could also “POST” or “PUT” data onto an external server – good if we’re using a 3rd party access tool for an application. Usually we’d need some sort of API Key to do that. Since the Chuck Norris Joke website’s API is public, we don’t need that to just read the posts.
  • Lines 6-9 defines what we do on a “success” response. In this case, we’re setting an ‘output’ variable, and defining it as a bit of HTML. Inside of the HTML we’re pulling part of our “fetched feed” (data.value.joke). This varies based on the feed we’re working with, but it will always come back as data. Finally, we’re setting the HTML of the #feed container as our generated output.
  • Lines 10-27 are “error handlers”. Based on what response we get back on a failed fetch, i can display an error message. In this case, I’m displaying it in the feed container itself, but I could also echo this as a console.log if I were debugging.
  • Lines 31-33 are setting up a click event on the button we added. When that button is clicked, the fetchFeed() function is called immediately.
  • Line 35, once all of the other functions are done, will fire the fetchFeed() function on the initial page load.

Looking back at the JSFiddle you can see the script in action. On the initial page load, it’ll pull one random joke from the API. Pushing the button will load in a new joke and replace the HTML in the container with a new joke.

AJAX provides a fantastic, easy way to manage data without having to refresh a page. You can seamlessly reload data as it’s added, or provide an easy way to add content to a page without disturbing other elements on the page.


WordPress, React, and The Future

On September 14, Matt Mullenweg announced that WordPress was rethinking its use of the React.js library due to Facebook’s clarification on its patents.

The short story: Facebook released React under a modified “open-source-ish” license (called BSD+Patents) that allow them to judiciously revoke the patent if a service violates the terms of service (specifically, if they use React to build a system that would compete with Facebook).  In doing so, the Apache Foundation has condemned the license and placed it in their “category X” group – disallowed for use on Apache projects.

With over 25% of the web powered by WordPress, Matt Mullenweg states, ‘having them all inherit the patents clause isn’t something I’m comfortable with’.

At the end of the day, a large company like WordPress shunning a software package would normally be a death knell, but it’s basically putting two Internet superpowers against each other. I know personally I’ve been trying to decide on a JavaScript framework to branch into, and this has caused me to have pause with regards to React.js.

I think that this is a great time for WordPress/Automattic to do what they’ve done with projects in the past: create a brand new (or purchase the rights to an existing) framework library, rebrand/revitalize it, and license it the same way they’ve licensed WordPress products in the past.  With WordPress’ front-end quickly being excised from its back-end system, this could be just the push needed to create something that would do for JavaScript frameworks what WordPress did for blogging: revolutionize it.


Totality

There are really no words to describe the feeling I had seeing the Eclipse today.  I could try to throw out words with empty meaning like “fantastic”, or “magical”, but they seem to fall flat when I think back and recall how I actually felt.

Holly and I had decided early on that we wanted our kids to experience the Eclipse with us; all-together, as a family. When the school system announced that the absence would be excused, that only solidified that we had made the correct choice. We were originally going to head to the Vanderbilt campus to watch the big event, but after finding out the festivities there were faculty/staff/students only, we knew we needed an alternative.

We settled on (at the last minute) going to Stones River Battlefield in Murfreesboro. Since Franklin was juuuuuust outside of the totality area, our options were to head north (into Nashville), or East (to Murfreesboro). We chose the latter. We would find out later we had made the best choice.

We left early, and got to the park expecting crowds. There were handfuls of people, but we basically had our pick of both parking and a place to pitch our blanket. The day went on, lunch was served, the kids were much happier, and we waited.

Right around 12 noon, you could start to see the Eclipse happen, even if there wasn’t anything “visible” to show it.

I recently swapped to a Samsung Galaxy S8, and the default camera has “pro” modes that let you digitally set typical camera settings: aperture, ISO values, shutter speed, and the like.  I adjusted a few settings, put my camera lens behind the special solar glasses, and… got a photo like the one above.

As the day went on, you could see the surroundings begin to change. There was slight cloud cover, but even when the clouds would break you could tell that the sky was darkening around us, even if it was just slightly.  It was around 90% totality where it started to look like an “eternal sunset”. The shadows of the leaves mirrored the eclipse: crescent shapes cut into the light as you looked at the ground.

Franklin hit 99.98% totality, which means that it never truly got dark enough to remove the glasses. People asked me: was it worth it to drive over to Murfreesboro to see the full totality?

Yes. Absolutely yes.

At 100% totality, the sky was as dark as night. The crickets, asleep in the heat of the day, began to chirp their normal evening songs.  It was only a minute, but it was long enough for bats to wake up and fly around.  We saw fireflies lighting up the darkened sky.  The temperature dropped (officially, somewhere around 7-8 degrees). Any animals nearby bedded down where they stood, knowing that something was off, but not being able to really figure out what it was.

A look up revealed the featured image on this post: a darkened sky with a vivid ring around the void, and an eerily quiet world all gazing upward in wonder. People in other parts of the country mentioned being able to see certain stars that were only visible during the eclipse – mainly due to the light pollution the sun emits on a daily basis.

And, in a moment (around 57 seconds, specifically) the light begun to return. We donned our solar glasses and saw once again the world returning to its normal state. Around 3pm, the final part of the moon slid away from the sun.

I remember looking at Holly and seeing the same look that was in my eyes: utter amazement. To think that, for a brief moment, the sun, moon, and earth would align in perfect unison to allow a glimpse of the miraculous.

People drove hours (some even flew in) to see the Eclipse in its totality.  I can see why now.

And I’ve already begun making plans for the 2024 Eclipse in its totality – which will pass over Carbondale, IL – a mere 90 minutes from my childhood home.

The images you see, the videos you watch only show a small picture of what it was really like to be there experiencing it. To hear the animals react, to feel the temperature shift… there’s no words still I can come up with that will describe those feelings completely.


Level Up Your WordPress Security

I had an amazing time speaking and networking at the #WPCampus Event in Buffalo this past weekend.  I was fortunate to be able to share some insight on the realm of Security, and make it (hopefully) more than a fruitless, confusion quest.

First of all, here are my slides:

And now, the caveats/prologues:

  • I had someone reach out on Twitter and mention that the 56% was too low of a number to spend so much time on. We’ve since connected and expounded on that, but the biggest thing I want to mention is that this is a talk from the perspective of the WordPress user/administrator.  There are TONS of other ways that someone can hack into your website, and a lot of them have nothing to do with your code:
    • Social Engineering – people playing fast and loose with user information that protects their password identity
    • A 3rd party hack – Website A gets hacked, and since the passwords were stored incorrectly there that allows the hacker to gain access to Website B through the same password.
    • Bad Passwords – dictionary attacks on passwords that are just plain bad can be brute-forced and overcome in a few minutes (unless you disallow access based on failed password attempts!)
  • A lot of attendees explained that they don’t have a lot of control over the server-side of things. That’s fine – that’s why I positioned it like I did (as something that’s innate, but that you may not have a lot of sway over). That’s why the site-specific stuff is so important. It allows you to do something to prevent baddies from gettting in.
  • There are more items coming out nearly daily, which is why the external resources and information gathering is so important. Education on a problem means you know what to look for and how to fix it!

Thanks to everyone that came to the sessions – I hope I was able to teach something, and that you come away knowing even a tiny bit more about security than you did when you came in!


WPCampus

I got a crash course in the world of “higher education” when I joined the amazing team at the Vanderbilt Web Communications department. Higher-Ed was a brand new world to me, and while a lot of the same issues carry over from “normal” web design, there’s a whole different set of things to worry about.

Now, over a year later, I feel like I’ve eased into the water, and It’s amazing some of the stuff that happens in this space. People are doing incredible things with WordPress, not only as a content management system but as an entire learning system. You could – with the right amount of time and development – run an entire university AND its classes on a WordPress site.

There’s no surprise, then, that great communities of people would form dedicated to sharing the hows and whys of High-Ed design and development. The WPCampus conference this year is such a group, and its sophomore annual conference was a resounding success.

WPCampus is focused on celebrating WordPress in the Higher Education world. It focused on design, development, content, and personal development topics for professionals in that field. With topics covering the REST API, security, content strategy, scaling a web presence for a university, and even “impostor syndrome”, there was a great selection of opportunities to learn various facets of WordPress in higher education.

I had the privilege to speak on WordPress Security (my slides are here, by the way!)

If you are involved in any way in higher education – whether it’s communications or I.T – and you use WordPress, you need to check out WPCampus. It’s worth attending, not only for the sessions, but for the opportunity to network (and kvetch!) with your fellow WordPress High-Ed Geeks!


Adding a Favicon / Site Icon to your WordPress Site

Chances are, you’ve bookmarked a site to re-visit it later. And, if you have, you’ve seen the small icon that shows up next to the site in your bookmarks.

See the first three? No icon.  The final one, however does have an icon – called a ‘favicon’ associated with it.  WordPress, for a long time, didn’t have a native way to include favicons – we had to use plugins like All-in-One Favicon to get the icon to show up.  Now, the WordPress customizer actually has a native way to bring that icon into WordPress – the “Site Icon” option.

Adding a Favicon

To get to it, open up your WordPress Dashboard and click on “Customize”

The customizer will open – allowing you set various options in your website at a glance.  The top option, Site Identity, is where we’ll find the settings for the Site Icon.

The site icon has to be at least 512px wide and tall – preferably a square image.  The icons can have transparency, and it’s best if you have a .png image to use.

Not only do Site Icons get used as the favicon, but if a user adds your website to their home screen (via Android or iOS), that icon will also appear there as well.


Contact/Hire Mitch

Want to book Mitch for a speaking event at your business or church?

Or does your business or project need some amazing design / development muscle?

Use the form below!


Don’t worry - your information is safe with us! We dont’ sell it, and we don’t like people who do!

Please only contact Mitch related to speaking engagements, projects, or personal messages.

NO SPAM EMAILS, PLEASE!