Redirecting domains to a WordPress Multisite

Redirecting domains to a WordPress Multisite is slightly more complicated that I would have expected. WordPress checks what referrer you’re coming from when using WPMU (which totally makes sense, so it can know what multisite blog you’re wanting), but when it finds a URL that it doesn’t recognize, things go down the tube, quick..

WordPress is fantastic, but there are some things hidden under rocks that you rarely know about until you need it. Today I needed to point an clients’ old domain to their new website! The problem was, WordPress was using it’s logic of “That domain doesn’t exist here, they must want to register it as a new blog!”, which is totally wrong. (Good thinking though, WordPress!)

We have new blog registration disabled. When I was looking at this setting, I noticed a small note below.

If registration is disabled, please set NOBLOGREDIRECT in wp-config.php to a URL you will redirect visitors to if they visit a non-existent site.

Good to know! This means we can actually stop that pesky “Registration is disabled” page from coming up without using any plugins! Just go into your wp-config.php file and direct any non-recognized URLs to any URL (in most cases, the new site’s URL).

{code type=php}
define( ‘NOBLOGREDIRECT’, ‘’ );

Now we can start redirecting domains to a WordPress Multisite with no more interference!

WP on!

Custom Post Type date archive links in WordPress

Custom Post Type date archive links are not supported out-of-box within WordPress (as of 3.6 beta). Nor are CPT date archives, but that’s another post (coming soon). The built-in date archive link functions (get_year_link, get_month_link, get_day_link) only work for Post archives.

Here is a function that will create your date archive links for you. I had a fallback of giving you get_post_type_archive{}, but took it out. If there is ever the case of not having the year, you should just use get_post_type_archive{} directly.

This function also automatically handles any rewrites you have for custom post types. I often use prefixes at work as best practice, and nobody wants eh-events in their URL string!

Let me know if you find a more efficient way of doing this. I’d love to direct to your source, or at least update mine! :)

The Function

{code type=php}
* This allows us to generate any archive link – plain, yearly, monthly, daily
* @param string $post_type
* @param int $year
* @param int $month (optional)
* @param int $day (optional)
* @return string
function EH_get_post_type_date_link( $post_type, $year, $month = 0, $day = 0 ) {
global $wp_rewrite;
$post_type_obj = get_post_type_object( $post_type );
$post_type_slug = $post_type_obj->rewrite[‘slug’] ? $post_type_obj->rewrite[‘slug’] : $post_type_obj->name;
if( $day ) { // day archive link
// set to today’s values if not provided
if ( !$year )
$year = gmdate(‘Y’, current_time(‘timestamp’));
if ( !$month )
$month = gmdate(‘m’, current_time(‘timestamp’));
$link = $wp_rewrite->get_day_permastruct();
} else if ( $month ) { // month archive link
if ( !$year )
$year = gmdate(‘Y’, current_time(‘timestamp’));
$link = $wp_rewrite->get_month_permastruct();
} else { // year archive link
$link = $wp_rewrite->get_year_permastruct();
if ( !empty($link) ) {
$link = str_replace(‘%year%’, $year, $link);
$link = str_replace(‘%monthnum%’, zeroise(intval($month), 2), $link );
$link = str_replace(‘%day%’, zeroise(intval($day), 2), $link );
return home_url( “$post_type_slug$link” );
return home_url( “$post_type_slug” );

Subdomain Multisites for WordPress – and sub-subdomain multisites

Subdomain multisites are a great way to break up a WordPress multisite. I personally think it looks much cleaner, and separate. vs

The former(subdomain multisite) looks like a section or portion of the domain, while the latter(subfolder multisite) looks as though you are just sitting within a folder – not as professional!

The setup is actually quite simple to accomplish this. All you need to do is log into your hosting cPanel (or hosting provider equivalent) and locate where you can manage your subdomains. I use JustHost and have never regretted choosing them! Anyways, they use cPanel, so the image below is a screenshot from within cPanel.

Wildcard subdomains for subdomain multisites

It’s a pretty painless process. Once you locate your Subdomains, add the * subdomain. Then set the Home folder to the proper location (most likely /public_html/).

Wildcard Subdomain


This wildcard process also works for sub-subdomains as well! It’s a pretty edge-case scenario, but I ran into it (today in fact) when setting up a WP multi-site on a development server (where we use subdomains for each project).

From what I can tell (referenced in this post) wildcard subdomains on a domain level ( will also support sub-subdomain wildcards ( Thanks to Andrea Rennick for providing this answer!

Best practice for setting/checking PHP Cookies

PHP cookies are great tools, when used properly (and implemented properly). In a recent WordPress project, I created a semi-basic Poll form. Because WP uses actions, I was able to detect that my form ran, and updated my Poll Results in the database. In the SAME page load, however, you cannot check your $_COOKIE node for your cookie. PHP Globals are not altered (besides $_SESSION) except for when the page first loads. This means  your $_COOKIE value will not be set until you refresh, or go to another page. So I explored the Googlesphere for a fair chunk of time, and discovered the best practice for setting/checking PHP cookies within the same page load (no redirect).

The practice to check for your value is quite simple – when you set your cookie, set it to a global variable as well. That way you do not have to force a refresh/redirect to get your $_COOKIE value.

Setting the Cookie:

{code type=php}
setcookie( ‘my_cookie_name’, $my_cookie_value, time() + 60*60*24*30, ‘/’ );
$my_cookie = $my_cookie_value;
{code type=php}
$my_cookie = $my_cookie_value;
setcookie( ‘my_cookie_name’, $my_cookie, time() + 60*60*24*30, ‘/’ );
or (if you are just storing true/false)
{code type=php}
$my_cookie = setcookie( ‘my_cookie_name’, true, time() + 60*60*24*30, ‘/’ );

Checking for your cookie later in the page

{code type=php}
if( isset( $my_cookie ) || isset( $_COOKIE[‘my_cookie_name’] ) ) {
// do stuff

There you have it, the best practice for setting/checking PHP Cookies. If anyone has other methods/practices, please comment!

Using WordPress core externally

Using WordPress Core externally can be quite useful when wanting to utilize WordPress functions from within another project/app. I’m setting up a cron job at server level, but I wanted to be able to leverage WordPress functionality. Because of how WP Cron works (initiated on page load, not time), I wanted to separate my cron process from the WordPress installation.

After a little digging around, I found this thread on StackExchange. It explains the setting up how to access WordPress core externally.

The following code will allow you to use all WordPress Core functionality!

{code type=php}
Test it

{code type=php}
if( function_exists( ‘update_option’ ) )
echo ‘We have WordPress support’;
echo ‘no WordPress support’;

Use WordPress core externally!

Now that you have access to WordPress core functionality, the limit is the sky! (or at least the latest version of WordPress).

Transferring a WordPress Multisite

I have run into the situation where I needed to transfer a WordPress Multisite twice now, My first experience was horrific, but it seems I have a better handle on this now.

Step 1: Back everything up

Should be pretty self-explanatory — back up your files and database in preparation to transfer. DO NOT copy the .htaccess and wp-config.php files, it’s better practice to set these up from scratch.

Step 2: Copy the files to your new server/location

Send over your files to the new location via FTP, SSH, SVN, whatever. Create your database and set up your wp-config.php file.

Step 3: Go through WordPress installation

Before you import your database, go through the steps to set up the WP site from a clean install. Go through the steps to setting up a WPMU. This way the code you need to stick into your .htaccess and wp-config.php files will have the proper rewrite rules, as well as DOMAIN_CURRENT_SITE and PATH_CURRENT_SITE definitions.
Continue reading Transferring a WordPress Multisite

Determine if you are on the Static Posts page in WordPress

When using the Static Home Page option (and thus Static Home Page ) in WordPress, there are ways to check whether you are on the home static page, or the designated posts page.

Static Front Page

{code type=php}
// If the current page is the blog posts index,
// but is NOT the site front page
if ( is_home() && is_front_page() ) {
// do something
Continue reading Determine if you are on the Static Posts page in WordPress

Pharma Hack via MM Forms Community

Early last week, we experienced several injection attacks from something known as the “pharma hack” – this is a sneaky attack on your website, which alters the Search Engine results of your website’s pages. If you are using MM Forms Pro or MM Forms Community, I strongly recommend changing your site’s forms IMMEDIATELY.

The Signs

An easy way to check whether your site has been attacked is to do a quick Google search for your own site. Check to see if any of the pages that seem have anything funky – specifically Viagra, Cialis, or Propecia related.
Continue reading Pharma Hack via MM Forms Community

How to Get the total number of Posts in WordPress

In a recent project, I was looking to find out how many posts were in a Feedback custom post type, to display on a Dashboard widget similar to the “Right Now” Dashboard Widget that comes with WordPress.

I noticed that the only way to get a count of posts within a certain post type was using:
{code type=php}
wp_count_posts( ‘my_post_type’ );

wp_count_posts() returns an object, which gives detailed information of each post status and how many posts were within that status. If you are using default post statuses, you can probably get away with this:
Continue reading How to Get the total number of Posts in WordPress