Decorative Flower
Her Realm, Personal website and blog of Cole
Dec 19

WordPress Database: Shrinking the Database

In the first post about understanding the WordPress database, I described the basics and how to change options and your password directly from the database. This post will be all around shrinking your database. The other day, I logged into mine to see that it had suddenly jumped to 70 megabytes. I had just done some maintenance, so I began to investigate because I was moving dangerously close to my storage limit with my host.

Why is it important to shrink your database?

  1. Because you pay for the space you use on your host, and the database uses that space.
  2. Because tables can become so large that you won’t be able to move them if you get a new host.
  3. Because large databases that aren’t optimized may cause your site to run sluggishly.

WP Commentmeta Table full of Akismet Artifacta

WP Commentmeta Table full of Akismet Artifacta

Check out Akismet’s damage

This may not affect you, especially if your blog is younger than mine. Akismet is a decent spam blocking tool. You probably use it. It it is intended to keep two weeks worth of spam comment data then delete that data from your database. Older versions didn’t always delete correctly, however. This means you could have junk entries in your database for years.

I did. In fact, my “wp_commentmenta” tables were upwards of 10 megabytes. This became an issue when I was trying to move to my new host. I went into browse mode and quickly saw that almost all of the rows were related to Akismet. My next step was to Google whether this was necessary data, and the answer was a resounding “No!” I could delete that information manually, but I had thousands of entries.

The easiest way is to run a query to look for data in that table that doesn’t correlate to data in “wp_comments.”

So I logged into PHPMyAdmin, and clicked “SQL” Then, I entered this query:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

You may have to edit the name of the tables if your installation uses a prefix. Click “Go.” If prompted, click “Ok” to continue. This shrunk my tables by dozens of megabytes, so it was a good start.

Delete Unused Tables

When you delete plugins, the actual files disappear, but developers rarely code plugins so that they remove unneeded tables. The first step to remove this data is to look at the names. As I did this for one of my blogs, some tables quickly stood out as created by plugins that I no longer use. These include “fssstats” and some for YARRP, a related posts plugin that I had swapped for another. When you see tables like this, check them and select “Drop” from the drop-down menu. You’ll be prompted to continue.

As long as you’re no deleting the twelve tables that WordPress creates, which I talked about here, you won’t do irreversible damage. You could break something that you want but likely nothing that you’ll need. I simply spent a lot of time Googling table names. This frequently brings up threads in the WordPress forums. I repeated that process quite a few times, but the tables I wound up dropping entirely were really much smaller than the wp_commentmeta tables that contained all those Akismet artifacts.

If you’re curious about whether you can delete a table, go ahead and leave the table name here. I’m more than willing to do what I can to help.

Optimize your database

I recommend doing this after you delete any large chunks of information because there will be a lot of “orphaned” data. This is data that is no longer attached to anything in your database. After deleting dozens of megabytes of data from Akismet, I used WP Optimize to get rid of a few more megs. This plugin does a few things, including some new features that clear up space in your database:

  • Delete revisions
  • Clear spam
  • Remove trackbacks and pingbacks (I keep mine)
  • Remove post drafts
  • Delete transient options
  • Clear orphaned postmeta

Even if you’re not deleting large chunks of data, optimizing on a regular basis is a good idea, especially if you frequently save posts. You could have dozens of revisions per post. This plugin now allows you to automatically optimize. I have mine set to optimize on a weekly basis but, to be honest, I manually do it every day.

You can also optimize your database directly from PHPMyAdmin. After logging in to PHPMyAdmin, click on the database name. Select any tables that you’d like to optimize or simply select “Check All.” From the drop-down menu in the bottom of the page, choose “Optimize Tables.” This doesn’t delete all the extra information from your installation, but it’s handy to know.

Dec 18

WordPress Database: The Basics

Once upon a time, everything on your site actually existed in hard copy in PHP or HTML files. This isn’t so with WordPress. The script stores everything in a database. Every post, comment, link, option, widget setting, plugin setting and everything else that’s not your theme is store in the database. Whenever a visitor is on your site viewing a category, WordPress retrieves the relevant data from the database. Without a database, you have no blog.

Accessing the WordPress Database

To view your database, you can use a tool called phpMyAdmin, which you’ll find when you log in to your host’s control panel — not your WordPress dashboard. phpMyAdmin shows up under “Databases.” Select the user with access to your WordPress database (there may be multiple users and databases), and it will log you in.

When you first arrive in phpMyAdmin, you may have to click on the database name in the left navigation. Then, all the tables that the database contains will appear in a list. My database  currently houses 3 WordPress installs and nothing else for a total of 62 tables. Yours will likely have fewer for a single site and more if several scripts use the same database.

Default WordPress Tables

As of WordPress 3.8, there are exactly 12 tables that you never want to drop (delete) as a whole. You may edit these tables, but they should always remain to keep your blog working properly. They are:

  • wp_commentmeta
  • wp_comments
  • wp_links
  • wp_options
  • wp_postmeta
  • wp_posts
  • wp_post_relationships
  • wp_terms
  • wp_term_relationships
  • wp_term_taxonomy
  • wp_usermeta
  • wp_users

Any other table has been created by a plugin, and some plugins may create multiple tables.

If you specified a table prefix in your config.php file, your tables will have different names. For example, all my default WordPress tables for Reviews by Cole start with “rbc.”

When you’re looking at the list of tables, you can select one or several and perform options such as drop (delete) or empty (delete contents but keep the table). You can also optimize the tables, which I’ll touch on in the next post in this series.

Every table has an icon that allows you to browse it.

Changing WP Password through phpMyAdmin

Let’s say your website was hacked, and they changed the password to your installation. It’s the weekend, and your host has checked out for the night. What do you do? You change your password in phpMyAdmin. To do this, use the following steps:

  1. Log in to phpMyAdmin.
  2. Click “wp_users.”
  3. Click “Browse “tab.
  4. Click the Edit icon next to your account.
  5. Type your new password into the “Value” for “user_pass”.” The existing password is shown using encryption. This is good in the event that someone gains access to your database.
  6. Select “encrypt” from the Function drop-down menu.
  7. Click “Go” button.

You’ll now be able to log in to WordPress with your new password!

Exporting Tables in phpMyAdmin

Exporting Tables in phpMyAdmin

Backing up the WordPress Database

phpMyAdmin is the easiest way to save your entire blog, and it only takes a few steps. While plugins allow you to back up your blog manually and download it to your computer or to schedule email backups, phpMyAdmin provides a simple way to create that backup without every logging in to your WP dashboard.

  1. Log in to phpMyAdmin. Click the database name on the left.
  2. Click “Export” tab. Select any WordPress tables from the list.
  3. Click “Save as file.” Type in a database name.
  4. Choose a compression type. None saves as a larger SQL file. Bzip provides the best compression. I personally use Gzip.
  5. Click “Go.”

Your database will download to your computer via your browser.

These are the basic processes I think all WordPress users/website owners should know when it comes to phpMyAdmin and your databases. There’s much more that you can do, which I will touch on in subsequent posts.

If you have any specific questions about the database or anything I mentioned in this post, let me know in the comments. I’ll answer them directly or add them to my upcoming posts if they fit!

Dec 16

How to Use Custom Fonts on Your Website (In ALL Browsers)

If you’re a WordPress user, you may have used Cufon to make your titles appear on custom fonts. This isn’t a terrible way, but every extra plugin slows down your website. Plus, people who don’t use Cufon don’t have that option. So what can you do?

Thanks to CSS 3, you can simply use the @font-face rule to show anything you want in a specific font as long as you have the TTF.

First, you must locate the TTF file on your computer and make an EOT copy to ensure compatibility with Internet Explorer. You can use this TTF to EOT converter to get both files. Then, upload the files to your server. For my purposes, the TTF and EOT files reside in my theme directory. However, you might make a folder such as “current-theme/fonts” if you use many fonts.

Secondly, you must specif the location of the file on your server and the name you’ll use for the font in your CSS like the following.

font-family: MyFont;
src: url('My-font.ttf'),
url('My-font.eot'); /* IE9 */

In this example,  we’re going to use the font name “MyFont” and the font files are calls “My-font.” They’re located in the same directory as the stylesheet.

The next step is to actually use the

{font-family: MyFont;

All my h1s will use “MyFont” as the face. I can now use MyFont as the face for any element within my stylesheet. It doesn’t matter whether the viewer has the original font file on her computer.

Now, not all mobile devices support this method even when they claim to support @font-face. This is the case with IE9 on Windows Phones, the stock browser on Android 2.1 and Symbian’s Nokia browser. However, Safari on iOS4 and greater, Android 2.2 stock browser and all browsers on Android 4.0 seem to be compatible. When the browser doesn’t understand @font-face, a default font will show  — either the system default (when you haven’t specified a body font) or the default font face you use for your body.

This is still better than nothing, of course.

Let me know how this works for you!


Dec 10

Jetpack and Forms: A Quick How-To

A while back I installed JetPack on one of my blogs. There’s a lot of handy tools from the developers of WordPress in JetPack. You have access to them by default when you’re hosted but not when you host your own WordPress-powered site. One of those tools is a contact form, which you can enable without using an additional form plug-in. This is handy. I’ve been using Contact Form 7 for some time on many sites, but an older contact form plugin was the vulnerability that caused Lyrical Musings to be hacked a few months ago.

Jetpack Contact Forms

Jetpack Contact Forms

To enable forms:

  1. Click on the JetPck menu.
  2. Search for “Contact Form.”
  3. Click “Activate.”

Once forms are enabled, you’ll see a button on every post and page editor to add a form. You can easily create a form for any page with the visual editor. The default options are name, website and message. Jetpack allows you to add additional text, textarea, checkbox and radio fields, among others, with the option to set each and every form field as required. By default, the form is sent to the author of the page. However, you can specify another email address in “Notifications.” Whenever someone sends a message through the form that isn’t marked as spam, you receive an email.

Stop Spam with Jetpack’s Contact Form

By default, Jetpack forms do not have a CAPTCHA or anti-spam technology. However, you can easily emulate an anti-spam plugin that requires visitors to check a box indicating they’re human. Simply

  1. Click “Add a field”
  2. Type text such as “Click if you’re human” into the  “Label” field.
  3. Select “Checkbox.”
  4. Check “Required.”
  5. Click “Save the field.”

Spam bots won’t even be able to submit the form, which will clear up some space in your Feedback panel and your database. Good news because you can only view 20 entries in the Spam folder at a time. Deleting is tedious.

Manage Jetpack Feedback Form Submissions

Your navigation will also have a new “Feedback” menu. When you click this, you’ll see all the form submissions stored in three categories:  messages, spam and trash. Successfully-completed messages appear in the first. Any messages that you move from the “Messages” or “Spam” folders move to the trash. Any message that Jetpack isn’t sure is real winds up in the spam folder. Many of mine were in Russian or simply blank. However, a few legitimate messages did make it through. I was able to mark them as not spam, at which point I received an email like they were new.

While you can empty the trash in one fell swoop, you can’t do the same with spam. Unfortunately, dealing with spam is tiresome if you just realized that Jetpack has taken over  your forms because it uses the same shortcode as Contact Form 7. It took few a few minutes to delete the 500+ spam messages and find the handful of legitimate messages. However, it’s all cleaned up, now.

I hope this helps you better use contact forms with Jetpack!

Oct 08

Embedding Twitter and SEO

As part of the many — and I do mean many — articles I’ve written about SEO, I’ve talked about how a popular tweet containing a link to your site can help make you more visible. This was more true when Google showed the live Twitter stream because your tweets showed up directly in the feed. The search engine still counts retweets as a sign of popularity when it comes to ranking results, however.

One thing you can do to encourage social sharing of your content is to make it easy to share. You can put widgets/buttons/links in your posts, so people can share them to Twitter, Google+, Facebook or other social networks. Once I post something to Facebook, for example, you can share it to your friends on your timeline or your own page. As a page owner, sharing content is something that I do quite frequently.

Something that you might not think to do is to make your existing tweets easily readable and interactive to your blog readers. I’ve seen a few blogs do this before, but I always assumed that they had manually styled it with CSS, and I was not up to the task.

It took months before I stumbled across a post about how to embed it, and when I realized how easy it was, I could have pinched myself. All you need to do is to grab the URL of the individual tweet and paste it into your post editor. It works with WordPress, whether you paste it into the visual or text editor.

It doesn’t matter whether it’s a text tweet or has attached video and photos; those will show, too. The default styling is just like a tweet on Twitter, as you will see below.

You can change the style by using CSS selectors “.twitter-tweet,” which the default code uses as the blockquote class.

For people using any platform other than WordPress, every tweet has a “…” link that you can expand to see more options. One of those is the ability to embed the post, and you’ll copy some code that works everywhere else.

Does this help SEO? Well, it certainly can. That’s especially true if you’re part of Twitter’s Headlines project. When you embed tweets, Twitter displays your url on the tweet’s permalink page. I’ve seen a few of these, but didn’t realize how it works. It’s quite similar to pingbacks with blogs.

Of course, social media isn’t the only aspect you’ll want to consider. Email marketing is typically less important for a blog like mine, where I’m not trying to sell anything, but it’s still useful as the infographic below shows:

What SEO measures do you take for your site? Do you think you’ll ever embed a tweet?

Skip to toolbar