Version 2.7 Theme Updates

We’ve just released updates to our Modularity theme framework and its child themes which include some exciting new features:

Functionality Enhancements

  • iPhone Video Support
  • Theme Internationalization (i18n) and Localization (L10n)
  • Improved Theme Options Panel
  • PhotoShelter Configurator Compatibility Fixes
  • Theme Minification

iPhone Video Support

You can now add iPhone ready versions of your videos to posts by creating a custom field that contains a key named iphone and pasting the full path to your MP4 video file as its value.

Theme Internationalization (i18n) and Localization (L10n)

One of the most requested features during the last several months has been the ability to translate our themes without actually needing to hard-code any translations into our theme files. You now have that ability in Modularity version 2.7 or newer:

If you are multilingual and interested in helping us create new translation packs for Modularity and its child themes, please get in touch with us.

Note: We already have translators for the following languages:

  • Dutch
  • French
  • German
  • Norwegian
  • Russian
  • Spanish
  • Swedish

Improved Theme Options Panel

The theme options panel has been made even better in Modularity 2.7. We’ve added in links to theme instructions files, our new FAQ page, video tutorials, and our support forum. Panels for disabled theme options have been minimized, iPhone video support has been added to Modularity and its child themes, and we’ve also added in a navigation bar link generator for Photoshelter users:

PhotoShelter Configurator Compatibility

We worked closely with our friends at PhotoShelter to increase the number of supported themes from two to seven.  PhotoShelter users can now choose from seven of our themes, including:

Just how easy is integrating our designs with PhotoShelter?  This video should give you a good idea.  Check out our PhotoShelter Integration page for all the details.  PhotoShelter is also giving Graph Paper Press users a special $70+ discount available only until April 30, 2010.  Click here to take advantage of this rare special offer.

Additional tweaks

Unnecessary Javascript functions and obsolete legacy files have been removed from Modularity and its child themes, reducing your site’s response time and increasing your theme’s overall speed. Videos contained in password protected posts are now properly hidden. The thumbnail slider in F8 now correctly responds to its selected category option and CSS tweaks to the footer allow for proper embedded image margins.

Themes Updated

What’s next, you ask?

All we can say is think big.  Think wide.  Our next themes are going to push the envelope in more directions than one. Expected release date?  C’mon, we’re designers, not prophets.

Get early access, coupon codes and pleasantly infrequent updates via email

New theme showcase

Today, we are totally pumped to unveil our new theme showcase.  To say that we have some amazingly talented users is a massive understatement, but this isn’t news to us.  Now that we have a centralized place for users to post their sites and generate traffic, you can help us prove to the world what we have always known.

The theme showcase is user-driven and allows you to submit your site and have it automatically appear for others to check out.  Not only is it a great way to increase traffic, but we will also be rewarding the highest rated sites on a semi-regular basis.  We will provide more details on this at the end of February (hint: the prize is tiny, shiny and starts with an “i”).  You can get a jump start on the contest by submitting your site today. Don’t forget to tweet your followers to help your ranking.

Visit the theme showcase now.

Get early access, coupon codes and pleasantly infrequent updates via email

Workspace

Workspace is a minimalist theme for WordPress that features eight optional homepage apps that can be enabled or disable from the theme options page.  This theme is perfect for a photo, design, or panorama portfolio.  This is a child theme for our Modularity theme framework.  You must have Modularity installed for this theme to work.

Main features

  • Close to 100 theme options
  • Optional homepage slideshow
  • Optional full-screen homepage video
  • Homepage sliding thumbnails
  • HD video player
  • Four widgetized areas for custom content
  • Color picker tool for easy site customization
  • Easy logo insertion
  • Tracking code and RSS Feedburner integration
  • Drop-down navigation for displaying categories
  • Crazy good S.E.O.
  • Ability to choose which categories and pages appear in navigation from theme options
  • Automatic post thumbnails

Upload your own background image from the theme options panel to create a unique, layered theme design.  Use this theme for your integrated portfolio & blog to help drive traffic, attract readers and attract new clients.

Get early access, coupon codes and pleasantly infrequent updates via email

Version 2.6 theme updates

We’ve just released updates to our Modularity theme framework and its child themes.  These themes include:

Functionality enhancements include:

  • 7 optional, customizable links can now be added to the navigation from the theme options panel.  (replaces automated PhotoShelter integration links)
  • Automatic thumbnail resizing for images inserted into your blog post hosted externally.  If you haven’t set a post thumbnail, or uploaded an image into WordPress using the Add Media button, our script will scan your post and use the first image inserted, resize it to fit your theme design, and use it as the post thumbnail.  This will be a major plus for those users hosting images on Flickr or PhotoShelter.  Because these images don’t exist in your WordPress Media Library, you cannot use WordPress’ cropping tools for these externally hosted images.
  • Sticky posts now possible on featured app

Behind the scenes enhancements include:

  • Slideshow styles moved into theme-css.php and out of header
  • Removed deprecated files

Bugs squashed:

  • Optional externally hosted RSS feed in footer fixed
  • Slider app now displays correctly in Opera browser
  • Extra black background behind search removed
  • Special characters on category names bug fixed

Should I upgrade?

You only need to upgrade if you:

  • Use externally hosted images
  • Use externally hosted RSS feed
  • Want more control over your automated integration links in your navigation
  • Need to use special characters ( ‘ or & or foreign characters ) in your homepage application titles

How do I upgrade?

  1. If you haven’t done so already, upgrade to the latest version of WordPress.
  2. Make a backup of your existing theme, including Modularity.
  3. Download the latest version of the themes from your member page.
  4. Using FTP, replace the old theme folders with the new theme folders.
  5. Double check to make sure your theme folder has 755 permissions and that the files inside have 644 permissions.  99% chance you won’t need to do this.
  6. Visit your theme options page and add your new navigational links, if you want the new custom nav links.

The above upgrade should take you 3 minutes, tops.

Get early access, coupon codes and pleasantly infrequent updates via email

How to create child themes for our Modularity theme for WordPress

Building child themes for your WordPress theme is a good way to future-proof your site from future theme upgrades.  In this post, I’m going to show you how to create your very own child theme for Modularity, our multimedia theme framework that powers many of our themes.

Preview Example Child Theme

Download Example Child Theme

What you need

  • Modularity 2.5 or higher
  • WordPress 2.9 or higher
  • A text editor.  We use Coda.  Anyone of these will work, though.
  • A wee bit of css, html and php knowledge (don’t worry if you don’t…we’ll give examples)
  • FTP access to your server & WordPress install

How a child theme works

A child theme inherits all of the theme files of the parent theme, unless specified in the child theme.   At the very minimum, a child theme must consist of the child theme folder (call it whatever you want, no empty spaces) and a style.css file.  If you add any one of these template files in your child theme, WordPress will use them instead of the parent theme files.  Now, because Modularity contains many additional files (sliders, slideshow, other homepage apps) that don’t exist in the WordPress template hierarchy, we’ll need to change the file paths to where these new template files will reside.   More on this later.

Style.css

As I mentioned above, a child theme must have a style.css file and it must contain this info at the very top:

/*
Theme Name: Child Theme
Theme URI: http://graphpaperpress.com
Description: Child Theme for Modularity
Author: Thad Allender
Author URI: http://graphpaperpress.com
Template: modularity
Version: 1.0
*/

@import url("../modularity/style.css");

The @import rule must precede all other rules. All styling rules you add must be placed after it. This rule instructs the browser to: Jump one level up (../) into the themes directory, go into modularity, get the content of style.css and @import it here.  You can override any css styles contained in the parent theme by adding the css to this stylesheet beneath the @import rule.  For example, if you wanted to change the background color from black to white, you would add this to the child theme’s style.css file:

body { background: #fff }

Now, if we put all this together, we would have this code on style.css:

/*
Theme Name: Child Theme
Theme URI: http://graphpaperpress.com
Description: Child Theme for Modularity
Author: Thad Allender
Author URI: http://graphpaperpress.com
Template: modularity
Version: 1.0
*/

@import url("../modularity/style.css");
body { background: #fff }

Important notes about style.css:

  1. The child theme will not be recognized by WordPress unless a file called style.css is found in its directory.
  2. WordPress identifies themes by reading the part between /* and */.  If you leave this off, your theme won’t work.
  3. The Template line is important, since it declares the parent theme. The parent must be declared by the name of its directory exactly as you see it, case-sensitively — not by the name of the theme. The two are often different.

You can add as many css classes as you would like to style.css. To figure out which css classes you would like to override, we like to use the Firebug extension for Firefox.  This tool allows you to point your cursor on an item on the page and inspect the exact css classes that control it’s styling.  You can also edit the css live on the page.  When you like the results, you can save these changes onto your child theme’s style.css file.  Watch this video tutorial on using Firebug for more info:

http://vimeo.com/9355485

Functions.php

Functions.php is a very powerful file for WordPress themes.  It is typically the place where theme authors insert additional functions that can manipulate the WordPress admin panel, add theme options, insert javascripts, define global variables, and much more.  All child themes for Modularity must have a functions.php file.  At a bare minimum, it should contain the following info:


<?php

// Define Theme Options Variables
$themename='Child Theme';

?>

This one line will defines the name of your child theme.   Below is a more advanced functions.php file for the child theme we are building:


<?php

// Define Theme Options Variables
$themename='Child Theme';
$default_thumb = get_bloginfo('stylesheet_directory') . "/images/default-thumb.jpg";

// Load some javascripts for child theme
if (!is_admin()) add_action( 'init', 'load_base_child_js' );
function load_base_child_js( ) {
 wp_enqueue_script('fader', get_bloginfo('stylesheet_directory').'/js/jquery.fader.js', array('jquery'));
}

?>

Important notes about functions.php:

Here, we are defining a new default thumbnail to be used and we are also loading a new javascript called jquery.fader.js.  There are one important takeaway from the code above: The use of stylesheet_directory.  This statement makes WordPress look in the child theme directory for the files that it is inserting, rather than the parent directory.  To make WordPress look in the parent directory, you would change stylesheet_directory to template_directory. You can read more about the bloginfo(); function at the WordPress Codex.

Header.php

We have added header.php into our example child theme because we are going to replace the default navigational items (nav.php) with a series of custom navigation links.  We have to overwrite the header.php file so that WordPress doesn’t use Modularity’s header.php file and thus, insert Modularity’s nav.php file.  This might be tough to grasp at first.  If so, re-read the paragraph above until it sticks.  Here is child theme’s header.php file:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
<head profile="http://gmpg.org/xfn/11">

    <title><?php wp_title( '-', true, 'right' ); echo wp_specialchars( get_bloginfo('name'), 1 ); ?></title>
	
	<meta http-equiv="content-type" content="<?php bloginfo('html_type') ?>; charset=<?php bloginfo('charset') ?>" />
	<meta name="description" content="<?php bloginfo('description') ?>" />
	<?php if(is_search()) { ?>
	<meta name="robots" content="noindex, nofollow" /> 
    <?php }?>
    
<!-- BeginStyle -->
	<link rel="stylesheet" type="text/css" href="<?php bloginfo('stylesheet_url'); ?>" />
	<link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/styles/print.css" type="text/css" media="print" />
	<!--[if IE]><link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/styles/ie.css" type="text/css" media="screen, projection" /><![endif]-->
	<!--[if IE 7]><link rel="stylesheet" href="<?php bloginfo('template_directory'); ?>/styles/ie7.css" type="text/css" media="screen, projection" /><![endif]-->
<!-- EndStyle -->


	<link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="<?php if ( get_option('gpp_feedburner_url') <> "" ) { echo get_option('gpp_feedburner_url'); } else { echo get_bloginfo_rss('rss2_url'); } ?>" />
	<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>" />

	<?php wp_head(); ?>
	<!-- Conditional Javascripts -->
	<!--[if IE 6]>
	<script src="<?php bloginfo('template_directory'); ?>/includes/js/pngfix.js"></script>	
	<![endif]-->
	<!-- End Conditional Javascripts -->

	<?php if ( is_singular() ) wp_enqueue_script( 'comment-reply' ); ?>

</head>

<body <?php body_class(); ?>>

<!-- BeginHeader -->
<div id="top">
<div id="masthead">
        <div id="logo">
            <h1 class="sitename"><a href="<?php bloginfo('url'); ?>" title="<?php bloginfo('description'); ?>"><?php if(get_option('gpp_logo_off')=="true") { bloginfo('name'); } else { ?><img class="title" src="<?php if ( get_option('gpp_logo') <> "" ) { echo get_option('gpp_logo'); } else { bloginfo('stylesheet_directory'); ?>/images/logo.png<?php } ?>" alt="<?php bloginfo('name'); ?>" /><?php } ?></a></h1>
           
            <div class="description"><?php bloginfo('description'); ?></div>
        </div>

</div>

<?php include ('nav.php'); ?>

<div class="clear"></div>
</div>
<!-- EndHeader -->

<div class="container">
<div class="container-inner">

<!-- BeginContent -->

If this looks scary, don’t fret, because there is really only one line we are interested in talking about. Locate line 48:

<?php include ('nav.php'); ?>

This code says this: Include the contents of the file nav.php and insert it right here.  Please note:  nav.php must be located relative (in the same directory) to header.php.  If you didn’t overwrite header.php, WordPress would use the header.php file from Modularity, and thus, insert the nav.php file located in the Modularity theme folder.

Nav.php

As I mentioned above, we are overwriting header.php so that we can change the navigational items to custom, “hard-coded” links.  The nav.php file in Modularity contains about 226 lines of code, which is pretty large considering that it merely outputs a few lines of html code that makes your navigation.  Most of this code is used to query the navigational display options that you have set on Modularity’s theme options panel.  If all you wanted to do was to show your categories in one drop down list in your child theme, you could add this to nav.php located in your child theme:

<!-- Navigation -->
<ul class="sf-menu">
  <li>
    <a href="#" title="Navigation">Navigation</a>
    <ul>
      <?php wp_list_categories('title_li='); ?>
    </ul>
  </li>
</ul>

If you wanted to show a few links to pages, you could do this:

<!-- Navigation -->
<ul class="sf-menu">
  <li>
    <a href="#" title="Navigation">Navigation</a>
    <ul>
      <?php wp_list_categories('title_li='); ?>
    </ul>
  </li>
  <li><a href="/about/" title="About page">About</a></li>
  <li><a href="/contact/" title="Contact page">Contact</a></li>
</ul>

If you wanted to “hard-code” in a series of links in a drop-down list to other websites, you could do this:

<!-- Navigation -->
<ul class="sf-menu">
  <li>
    <a href="http://example.com">Sub list</a>
    <ul>
      <li><a href="http://example.com">Sub list 1</a></li>
      <li><a href="http://example.com">Sub list 2</a></li>
      <li><a href="http://example.com">Sub list 3</a></li>
      <li><a href="http://example.com">Sub list 4</a></li>
      <li><a href="http://example.com">Sub list 5</a></li>
    </ul>
  </li>
  <li>
    <a href="#" title="Navigation">Navigation</a>
    <ul>
      <?php wp_list_categories('title_li='); ?>
    </ul>
  </li>
  <li><a hef="/about/" title="About page">About</a></li>
  <li><a hef="/contact/" title="Contact page">Contact</a></li>
</ul>

You can refer to these instructions for listing all pages and these instruction for list all categories. You can even pass parameters to these WordPress template tags to have further creative control over what the tags output onto in your navigation.

Home.php

This is the main file that controls how your homepage looks and where the homepage apps are arranged vertically.  Here is the contents of Modularity’s home.php file:


<?php get_header(); ?>

<!-- Pagination -->
<?php if ( $paged < 1 ) { ?>

<?php if ( get_option('gpp_welcome') == 'true' || !get_option('gpp_welcome') ) { include (TEMPLATEPATH . '/apps/welcome.php'); } ?>

<?php if ( get_option('gpp_slideshow') == 'true' || !get_option('gpp_slideshow') ) { include (TEMPLATEPATH . '/apps/slideshow.php'); } ?>

<?php if ( get_option('gpp_video') == 'true' ) { include (TEMPLATEPATH . '/apps/video-home.php'); } ?>

<?php if ( get_option('gpp_slider') == 'true' || !get_option('gpp_slider') ) { include (TEMPLATEPATH . '/apps/slider.php'); } ?>

<?php if ( get_option('gpp_slider_posts') == 'true' ) { include (TEMPLATEPATH . '/apps/slider-posts.php'); } ?>

<?php if ( get_option('gpp_featured') == 'true' || !get_option('gpp_featured') ) { include (TEMPLATEPATH . '/apps/featured.php'); } ?>

<!-- End Pagination -->
<?php } ?>

<?php if ( get_option('gpp_blog') == 'true' ) { include (TEMPLATEPATH . '/apps/blog.php'); } ?>

<?php if ( get_option('gpp_category_columns') == 'true' || !get_option('gpp_category_columns') ) { include (TEMPLATEPATH . '/apps/category-columns.php'); } ?>

<!-- Footer -->
<?php get_footer(); ?>

Starting at the top, we get the header with this template tag:

<?php get_header(); ?>

Next, we tell WordPress to only show the Welcomebox, Slideshow, Video, Slider, Slider Posts and Featured apps on the homepage with this statement:

<?php if ( $paged < 1 ) { ?>

The statement ends a few lines down with this:

<?php } ?>

Why?  If you choose to enable the Blog app on your homepage, you will more than likely want to be able to paginate to older posts.  You likely won’t, however, want your Welcome message to appear on every paginated post.  This is why we wrap these apps in the if ( $paged < 1) statement.

Home.php checks your theme options settings to see which apps you have enabled.  If they are enabled, then home.php includes the app file with this statement:


<?php if ( get_option('gpp_slideshow') == 'true' || !get_option('gpp_slideshow') ) { include (TEMPLATEPATH . '/apps/slideshow.php'); } ?>

In English, this statement reads like this: If the slideshow is turned on or the slideshow option isn’t set yet, then include the contents of the file located in /moduarity/apps/slideshow.php.  Each one of these similar statements on the homepage checks your theme options setting and includes different app files.  You can rearrange the files simply by copying and pasting each homepage app statement where ever you want on home.php.  You can even paste these statements into any other theme files, assuming that you are inserting them into a region that spans the full 950 pixels of the page and not inside another WordPress loop. In the example below, I’m going to cut and paste the homepage Welcome app (welcome.php) into the header right below the EndHeader comment, and wrap it in an if ( is_home () ) statement, so it only shows on the homepage:

<!-- Only show welcomebox on the homepage -->
<?php if(is_home()) { ?>
<div class="container-inner">
<?php if ( get_option('gpp_welcome') == 'true' || !get_option('gpp_welcome') ) { include (TEMPLATEPATH . '/apps/welcome.php'); } ?>
</div>
<?php } ?>

Now, lets say that you wanted to create you own app, or replace an existing app with your own.  Using the Featured app as an example, you would want to change this on home.php:


<?php if ( get_option('gpp_slider_posts') == 'true' ) { include (TEMPLATEPATH . '/apps/featured.php'); } ?>

With this:


<?php if ( get_option('gpp_featured') == 'true' || !get_option('gpp_featured') ) { include ('featured.php'); } ?>

Important

Notice that we have removed TEMPLATEPATH, the dot (.), and also /apps/ from the statement.  Assuming that you have added this newly customized home.php file into your child theme folder, this tells WordPress to look for the featured.php file right next to your new home.php file located in your child theme.  If you wanted to adhere to the same folder structure as seen in Modularity, you could do this instead:


<?php if ( get_option('gpp_featured') == 'true' || !get_option('gpp_featured') ) { include ('apps/featured.php'); } ?>

And make sure you put featured inside a folder called apps located in your child theme folder.  Either way is fine. It’s your code, so do whatever you prefer.  I like to keep all child theme files on the top level in my child themes because the files are more directly accessible.

Now that we are telling WordPress to use our own featured.php app, we need to create on.  Here is the example featured.php file:

<?php
$featured_category = get_option('gpp_featured_cat');
if($featured_category=="") {$featured_category = "Latest";}
$featured_category_ID = get_cat_ID($featured_category);
?>

<div class="span-24 last">

<h3 class="sub"><?php echo "$featured_category"; ?></h3>

	<?php $my_query = new WP_Query("cat='$featured_category_ID'&showposts=9"); ?>
	<?php $i = 0; ?>
	<?php while ($my_query->have_posts()) : $my_query->the_post(); $do_not_duplicate = $post->ID; $i++;  ?>

			<div class="span-8<?php if (($i%3)==0) { ?> last<?php } ?>">
			<div class="post-<?php the_ID(); ?> portfolio-image-wrapper">

			<?php get_the_image( array( 'custom_key' => array( 'photo-310x150' ), 'default_size' => '310x150', 'width' => '310', 'height' => '150', 'image_class' => 'thumbnail-310x150' ) ); ?>

			<p><?php if (the_category(', '))  the_category(); ?></p>
			<h6 class="title-overlay"><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title() ?></a></h6>
			</div>
			<div class="clear"></div>
			</div>

	<?php endwhile; wp_reset_query(); ?>
</div>

<hr />

This new feature.php file, which we also refer to as the “Featured” app, is a three column grid of thumbnails, where each thumbnail represents a separate post.

Archive.php

Now, lets say that you wanted to change the way your category archives page looks.  You want a 950 pixel wide, three column grid of thumbnails that represents each post.  Because the archive.php file is part of WordPress’ template hierarchy, you can simply create a file called archive.php, paste the code below, and drop it into your child theme folder. Here is the code:


<?php get_header(); rewind_posts(); $i=0; ?>

<div class="span-24 last">

		<?php 
		query_posts($query_string.'&posts_per_page=24');
		$default_thumb = get_bloginfo('template_url') . "/images/default-thumb.jpg";
		if (have_posts()) : ?>

 	  <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
 	  <?php /* If this is a category archive */ if (is_category()) { ?>
		<h3 class="sub"><?php single_cat_title(); ?></h3>
 	  <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
		<h3 class="sub">Posts Tagged &#8216;<?php single_tag_title(); ?>&#8217;</h3>
 	  <?php /* If this is a daily archive */ } elseif (is_day()) { ?>
		<h3 class="sub">Archive for <?php the_time('F jS, Y'); ?></h3>
 	  <?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
		<h3 class="sub">Archive for <?php the_time('F, Y'); ?></h3>
 	  <?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
		<h3 class="sub">Archive for <?php the_time('Y'); ?></h3>
	  <?php /* If this is an author archive */ } elseif (is_author()) { ?>
		<h3 class="sub">Author Archive</h3>
 	  <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
		<h3 class="sub">Blog Archives</h3>
 	  <?php } ?>

<?php while (have_posts()) : the_post(); $i++; ?>
	<div class="span-8<?php if (($i%3)==0) { ?> last<?php } ?>">
		<div class="post-<?php the_ID(); ?> portfolio-image-wrapper">
			<?php get_the_image( array( 'custom_key' => array( 'photo-310x150' ), 'default_size' => '310x150', 'width' => '310', 'height' => '150', 'image_class' => 'thumbnail-310x150' ) ); ?>
			<div class="title-overlay">
				<h6><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title() ?></a></h6>
				<p><?php if (the_category(', '))  the_category(); ?></p>
			</div>
		</div>
	</div>
<?php endwhile; ?>

<div class="clear"></div>

<div class="nav-interior">
			<div class="prev"><?php next_posts_link('&laquo; Older Entries') ?></div>
			<div class="next"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
		</div>
<div class="clear"></div>

	<?php else : ?>

		<h2 class="center">Not Found</h2>
		<?php get_search_form(); ?>

	<?php endif; ?>
</div>

<!-- Begin Footer -->
<?php get_footer(); ?>

You can download the child theme that we just build above right here:

Download Child Theme

If you found this tutorial helpful, considering signing up for a Graph Paper Press membership to watch over two hours of video tutorials, receive support from developers, and download any of our themes and plugins.

Get early access, coupon codes and pleasantly infrequent updates via email

WordPress 2.9 Video Tour

WordPress 2.9 delivers a handful of new features that cater specifically to those who demand total creative control over image handling.  If you are a photographer, videographer, artist or serious online publisher, you need to familiarize yourself with these new features, which include easy selection of post thumbnails, the ability to crop and rotate images, include & exclude images from galleries, and dead simple video embedding.  Below is an overview of these four new features, including video tutorials and useful links for further reading.

The Post Thumbnail

There is now a unified way of handling post thumbnails in WordPress.  Hallelujah!  Over the last few years, I’ve tinkered with dozens of different ways of handling post thumbnails to create “magazine” and “portfolio” themes.  From custom fields to custom scripts, all of these techniques proved to be either inflexible or unintuitive in my opinion.  Despite a few shortcomings, the new post thumbnail function is a much needed feature that simplifies the process of choosing which image becomes your post thumbnail.

Important note:  This feature must be enabled on your theme to work.  Below is a list of our themes that support this new feature. You can download these themes from your member page.  We plan to update the remaining themes, including the Monochrome series, later this week.

If you have switched themes recently or uploaded images with incorrect dimensions, you will likely need to “regenerate” your thumbnails to the new dimensions. To do this, you need the Regenerate Thumbnails plugin.

Video: How to use the post thumbnail feature

http://vimeo.com/8462281

Further reading:

Crop, Rotate, Flip

About 90% of the time, automated image crops generated by computer scripts deliver surprisingly acceptable results.  But if you have ever had a beautiful portrait becomes an odd neck-to-torso photo, you certainly know the limitations of automated image cropping.  This all changes in WordPress 2.9 with the new cropping, rotating and flipping tools.

Video: How to use the crop tool in WordPress 2.9

http://vimeo.com/8462348

Include & Exclude images from galleries

Until now, every image that you uploaded into a WordPress post would be thrown into the gallery.  To remove the image from the gallery, you had to delete the photo.  With WordPress 2.9, you can now choose images to include or exclude from each post gallery.  Please note that include and exclude cannot be used together.

Video: How to include & exclude images in WordPress 2.9 galleries

http://vimeo.com/8465648

Further reading:

Gallery Shortcode – via WordPress Codex

Video Embedding

Embedding video and images from third party sites like YouTube, Flickr or Vimeo into a WordPress post can be a pain.  Unless you use custom fields or another similar approach, more times than not, you video code would become a big garbled up mess in the write post panel.  WordPress 2.9 now uses the new oEmbed API to simplify video embedding.  Now, you can merely paste the link to the YouTube or Vimeo video into the post, and WordPress will generate the embed code for the video on the fly.  I am using it on this post to embed all of the Vimeo videos.  Pretty neat, eh?

Video: How to Add Videos to WordPress 2.9

http://vimeo.com/8462405

Suggestions for core WordPress developers

Here are a few suggestions that I hope core WordPress contributors consider for an upcoming WordPress release:

  • Integrate image editing with the Piknic API.
  • Add include/exclude photo gallery checkboxes.  Memorizing attachment ID’s gets old.
  • More buttons, fewer text links in the Add Media user interface.
  • Dynamically generated post thumbnails.
  • Ability to use oEmbed in custom fields for improved data/content-type separation.

What improvements would you like to see in future versions of WordPress in terms of image handling?

Get early access, coupon codes and pleasantly infrequent updates via email

Graph Paper Press is two years old

Happy Birthday Graph Paper Press

We turned two years old, so we baked a cake. Happy Birthday us!

December 7th marks the two year birthday of Graph Paper Press. What a ride it has been! We have watched as WordPress and the theme market have literally exploded. We are lucky to have connected with amazingly talented users who are passionate and continually pushing the envelope when it comes to publishing artwork, design, photography and video on the World Wide Web.

Discounts

In celebration of our two years making stuff, we are offering 30% off all annual subscriptions for the month of December. To take advantage of this offer, signup here and use the following coupon code: ED64B25D77

For the month of December, we have partnered with some of the best WordPress plugin developers to bring you savings on a few must-have plugins. They include:

  • 25% off Gravity Forms – the best form management plugin available for WordPress
  • 20% off WP SEO – the best search engine optimization (S.E.O.) plugin for WordPress

To receive these discounts, simply sign up for an account here. The instructions for receiving these discounts is located on your member page.

Upcoming theme releases

F22 theme for WordPress screenshot

Screenshot of F22

We recently released Workaholic Pro and On Assignment themes for WordPress. Our next theme, which we are calling F22, is about two weeks away from launch. It is primarily a theme for displaying photography and visuals. It’s jam packed with jQuery for slideshows, image galleries, collapseable navigation and footer regions, and a series of monochromatic buttons so your users can turn the lights down or up on your design. Click the screenshot to the left for a sample of the homepage. The theme is currently being beta tested.

Poll: Tell us what you want

[poll id="3"]

Get early access, coupon codes and pleasantly infrequent updates via email

Workaholic Pro

Workaholic Pro is a modern and clean portfolio theme for WordPress created by Graph Paper Press designer Chandra Maharzan. Workaholic Pro allows you to separate your portfolio from your blog, without editing a single line of code. This colorful child the for Modularity comes with preset three color palettes, variable sidebar content, jQuery-powered image-hover effects, plus much more.

Major features

  • Close to 100 theme options
  • Easy logo insertion from the theme options panel
  • Twitter Integration
  • Homepage design options
  • Optional homepage slideshow
  • Optional homepage video
  • Built-in HD video player
  • Automatic thumbnail generator
  • Multi-level drop down navigation
  • Four widgetized areas (sidebar and footer)
  • Three pre-built designs with killer color palettes

Requirements

  • Modularity 2.2.4 or higher
  • WordPress 2.8.6 or higher

This theme includes what we call “apps” which you can enable or disable from the theme options page. These apps can transform the theme into a portfolio site for photographers and multimedia producers, a magazine-style site, or a normal blog-style homepage literally at the click of a button.

Screenshots of 2 other color palettes

Limegreen

Monotone

Get early access, coupon codes and pleasantly infrequent updates via email

On Assignment

On Assignment is a WordPress child theme for the Modularity multimedia theme framework. It is primed for photographers, videographers and journalists who need to feature their portfolio and connect with followers and potential clients with status updates and news/blog posts. You must have Modularity installed for this theme to work.

Main features

  • Close to 100 theme options
  • Optional homepage slideshow
  • Optional full-screen homepage video
  • Homepage sliding thumbnails
  • HD video player
  • Four widgetized areas for custom content
  • Color picker tool for easy site customization
  • Easy logo insertion
  • Tracking code and RSS Feedburner integration
  • Drop-down navigation
  • Crazy good S.E.O.
  • Ability to choose which categories and pages appear in navigation from theme options
  • Automatic post thumbnails

And that is only a start. We guarantee that if you present a snappy portfolio and fresh, regularly updated content, you are sure to attract readers and attract new clients. With On Assignment, this is all ridiculously easy.

Example sites

We released On Assignment about one month ago to Graph Paper Press paying members. Here are a few example sites using On Assignment:

If you would like to be added to this list, please submit your site.

Case study

Jack Gruber is a staff photojournalist at USA TODAY, the largest newspaper in the U.S. With his new site, which is powered by WordPress and the On Assignment theme, Jack is able to display his portfolio, provide status updates while covering the war in Afghanistan and provide visitors with overviews and links to his recently published projects.

Get early access, coupon codes and pleasantly infrequent updates via email

Post to Twitter from WordPress using Twitter Overload Plugin

try-it-out

About

This free plugin for WordPress allows anyone to post to their Twitter account directly from your site’s sidebar. Want to test it out? Try it out in the sidebar.

Download

To download this plugin, sign up for a free account and download twitter-overload.zip from the downloads section.

Installation

Unzip twitter-overload.zip and move the entire twitter-overload folder into wp-content -> plugins. Activate the plugin on your WordPress admin panel. Finally, visit your Appearance -> Widgets panel and drag the Twitter Overload widget into one of your widgetized areas.

How’d we do it?

Twitter has an API that allows developers to tap into posting and displaying updates on Twitter. There are many methods for interacting with Twitter remotely, including the oAuth approach, but we decided to use the PHP CURL approach because it’s flexible and easy to integrate into a plugin.

Error handling is handled with jQuery. Test it out by leaving one of the blanks empty and click submit. You’ll get a fancy little notice on what you did wrong.

Get early access, coupon codes and pleasantly infrequent updates via email

WordPress theme evolution, plugin updates and discount coupons

We have been so busy making new stuff and improving old stuff that we just about forgot to tell you all about it. So, although this note might seem late and a wee bit long, the update below is priceless if you use WordPress and our themes.

Discount coupons

We have extended our 30% off subscription coupon for annual and annual developer membership subscriptions until Dec. 1, 2009. Only a limited number of coupons are still available, so please sign up soon so you don’t miss out.

Theme updates

Last week, we released updates to Modularity and all of its child themes, High-Def, F8, F8-Remixed, Modfolio, Modslider, and the newest of the bunch, On Assignment (more on this theme tomorrow). These updates provide users with a massive amount of flexibility and customization that didn’t exist before including the following:

You can download these themes from your member page. If your membership expired, you will need to re-activate your subscription.

Tim Thumb (a thumbnail generating script) was removed to prepare our themes for a new and exciting feature in WordPress 2.9, which is just around the corner. You can read more about the new cool photo cropping and thumbnail functions over at WPEngineer.com. It’s good to see WordPress take a more unified approach to image and thumbnail management for posts. I was beginning to loose track of all the available image and thumbnail plugins. This will undoubtedly make WordPress more user-friendly for visual folks.

Photo Galleria Plugin Updated

Yesterday I spent a few hours updating our Photo Galleria plugin to work with the latest version of WordPress and the latest version of jQuery. Here are the major changes:

  • Javascript is now added via the enqueue_script function, which WordPress introduced a while back to help resolve javascript conflicts in plugins & themes.
  • What this means to you is the plugin won’t conflict with themes containing existing javascript libraries nor should it conflict with any plugins
  • Same simple activation: Simply activate the plugin and all of your existing galleries inserted into posts will use the script. No configuration needed.

PhotoShelter Plugins

We are currently beta testing and squashing server-specific bugs on our new PhotoShelter plugin. The new plugin merges all three previous plugins into one plugin. Here is an overview of the changes:

  • Merges all 3 plugins into 1 plugin.
  • Improved navigating through thousands of archived images
  • Adds photo display options (lightbox overlay or direct link to PS photo page)
  • Improved Searching
  • Improved error handling

We would like to have a bullet-proof version for public consumption available by the end of next week. If you want to help beta test the new version, please get in touch.

New theme and plugin changelog

Curious to see how we work? Want to follow our theme development? Please check out our new and improved changelog: http://graphpaperpress.com/changelog/

Kudos to Philip Arthur Moore and our friends at Codebase on this project.

Wordcamp & Future of Web Design in New York

This weekend, I’m heading to New York to attend Wordcamp NYC and the Future of Web Design to, well, frankly, mingle with people who are way smarter than me. Hopefully some of it will wear off on me. I’m really looking forward to sharing ideas and meeting folks who I’ve been tangentially connected with over the last four years. Follow us on Twitter if you want to receive news snippets and updates from these events.

Next month

The next month is going to be massive for Graph Paper Press. We are releasing four new themes, each of which caters to the visual crowd. You can expect to see a few things that you have yet to see in WordPress themes in our upcoming releases, including resizeable, full screen images, crazy cool modern portfolio designs, and best of all, continued killer support.

Get early access, coupon codes and pleasantly infrequent updates via email

PhotoShelter integration plugins & themes for WordPress

Now this is going to be fun….

We’re excited to announce our first batch of WordPress + PhotoShelter plugins that allow you to:

  1. Integrate your PhotoShelter photos and galleries into your Graph Paper Press themes for WordPress
  2. Allow your visitors to search your PhotoShelter photos from your site’s sidebar
  3. Pull in your PhotoShelter gallery updates into your site’s sidebar

If you are a photographer who uses PhotoShelter, these integration plugins will enable you to manage your portfolio, blog, and PhotoShelter photos and galleries all from one site. The combination of WordPress, PhotoShelter and our themes and plugins will push your web presence into the future, allowing you to connect with clients, promote, sell and license your work all from one place.

How do you get this plugins?

These plugins are currently only available to our paying members. You will need to sign up and become a member of Graph Paper Press to download these plugins. So, yep, that’s over 20 themes, two hours of HD video tutorials, a well-groomed support forum managed by experienced WordPressers, and these special PhotoShelter integration plugins.

Example

Jack Gruber is a staff photojournalist at USA TODAY, the largest newspaper in the US. His newly integrated website allows him to:

  • Shoot, batch upload to PhotoShelter, and batch insert his photos into his new site in minutes
  • Store his photo archive with PhotoShelter
  • Add PhotoShelter photos and galleries to his WordPress-powered site
  • Allow his site visitors to search his photo archive from his WordPress sidebar
  • Retain the same look and feel across his PhotoShelter + Graph Paper Press + WordPress site

Here’s a secret: Jack Gruber is sporting our new On Assignment theme (a free child theme for Modularity). This theme is a free download and is available in your member area. If you are an existing GPP user, you will need to log into your Member area; if you are a newcomer to GPP, you will need to signup to download.

For those who don’t know what PhotoShelter is, here is a brief run-down of their services, in their own words:

PhotoShelter builds the best photography websites with sales and marketing tools, high-res file delivery, and secure image archiving. We serve over 48,000 photographers worldwide, from full-time pros to aspiring artists.

Discount
In all honesty, if you are a serious photographer, you need PhotoShelter. Here is a little incentive: PhotoShelter is giving Graph Paper Press users a special discount. Sign up for PhotoShelter here for the special discount. The savings is a $55 discount compared to their regular monthly account ($29.99) and $25 off their advertised annual discount (normally $329). This special offer last until Oct. 31, 2009.

Now lets take these plugins for a little ride, shall we?

How to integrate PhotoShelter & WordPress (Tutorial #1)

How to add PhotoShelter galleries to a WordPress sidebar (Tutorial #2)

How to add PhotoShelter gallery updates to WordPress (Tutorial #3)

How to search PhotoShelter photos from WordPress (Tutorial #4)

We have also updated Modularity, F8, F8-Remixed, and Modslider to version 2.1. These are merely enhancements and not critical at all. Most of the upgrades happened on the Theme Options page, as you can see in this video tutorial:

Get early access, coupon codes and pleasantly infrequent updates via email

Theme news, a redesign, example sites, and Twitter

gpp_v6

In case you’ve missed it, we’ve been busy reinventing our theme lineup, with updates to Modularity and all of its child themes, the Gridline suite, Fullscreen and Work-a-holic. You can read about specific changes by visiting our theme changelog page. These updates will give you the ability to:

  • Add new and improved homepage applications
  • Install virtually any plugin, without running into javascript conflicts
  • Retain theme options configuration when switching between child themes for Modularity
  • Load your site quicker than ever, thanks to decreased theme file sizes.

If you are a current or past Graph Paper Press theme user, this is a highly recommended update.

Graph Paper Press also went back to the design chopping block and has emerged much cleaner and now features links to a growing list of sites using our themes. We received a flood of emails after we released this feature and I’ve got to say that I’m totally and utterly impressed by how our sites are being used around the world wide internets. These sites are a testament to our WordPress theme design philosophy: We build themes that are highly flexible and minimally skinned so that you, the publisher, can have maximum creative control. The people who use our themes are highly creative content producers, including photographers, videographers, designers, and publishers.

The new Graph Paper Press site is a slightly modified version of Modularity. Here is the amazing part: The site redesign was completed in about eight hours total. Yep, eight hours. Designing with Modularity as a base theme makes theme development ridiculously simple because of the numerous homepage “apps” to choose from. These apps, paired with a CSS framework, gave me a great head start on reinventing this site. More changes are planned, so stay tuned.

In theme news, we postponed the release of Fullscreen Pro so that we could update our existing set of themes. That said, Fullscreen Pro is going to be a real surprise and will include a feature set that is much, much more robust that initially planned. Fullscreen Pro is actually three themes crammed into one, with a set of homepage designs to select from on the theme options page. This will be very popular with the photo/visual crowd.

And to keep up with the Jones’, we’re also now on Twitter. Imagine that! As you can see, I’m not a huge fan of the site, but it will give us another channel to communicate smallish news updates and snippets of goodness from around the Web. So follow us if you want.

Get early access, coupon codes and pleasantly infrequent updates via email

Theme updates for Modularity, F8, High-Def, Modslider and Modfolio

You can now download theme updates for Modularity, F8, High-Def, Modfolio and Modslider by visiting your member page. These updates are for WordPress 2.8.1, so please make sure you are running the most current version if you want to get the most out of these theme updates.

Notable improvements

  1. Optional full-screen HD video display on homepage
  2. Cross javaScript framework compatible – this means, you can now add plugins that use any other javaScript library than jQuery.
  3. Revamped theme options. Fewer clicks!

Feature changes

  1. Theme Options – Show or hide contact info in the menu.
  2. Theme Options – Easy selection of categories. No more searching for category IDs! (for 2.8.1 only)
  3. Theme Options – Add your custom logo.
  4. Navigation issues in IE fixed.
  5. Slider overlapping issue fixed. Now only pulls posts that has images.
  6. Dynamic slideshow also pulls posts that have images so no blank frames.
  7. Static slideshow reads from the slideshow folder and automatically pulls 5 random images at a time. No more hard-coding needed. You only have to upload your images in the slideshow folder.
  8. Choose to show slideshow or a video on the main area on homepage.

View the improved Theme Options page

Minimized theme options page

Minimized theme options page

Full theme options page

Full theme options page

We are also now on Twitter! Follow us.

Get early access, coupon codes and pleasantly infrequent updates via email

Fullscreen

Fullscreen is a free one-column photography and multimedia theme for WordPress that can be used for portfolios, photoblogs, videoblogs, and virtually anything else where you want your content to be front and center. It provides visual artists (photographers, painters, videographers, motionographers, illustrators) a better way of presenting their latest work online using a minimalist side-scrolling homepage. Emphasis is placed on your content, rather than on an overly designed theme. If you are a free or paying subscriber to Graph Paper Press, Fullscreen can be downloaded from your member page.

Major Features

  • Side-scrolling homepage packed with thumbnails representing your posts
  • Automatic thumbnail generator with the ability to override the automated thumbnails
  • Built-in HD video player for self-hosting HD quality video
  • Ability to embed video from YouTube (HD), Vimeo, MetaCafe, Seesmic, Google Video, Revver
  • jQuery UI framework for icons
  • 950 pixel wide theme with no left or right sidebar
  • Comments are revealed in a modal dialog window to minimize page clutter
  • Threaded comments
  • Three footer widgets
  • Built-in Gravatar support for comments
  • Drop-down navigation to maximize homepage space
  • Built atop CSS frameworks to speed customization
  • Forward and backward compatibility with previous versions of WordPress
  • XHML: This theme has been tested on Firefox, Safari, IE 8, 7, 6.

Fullscreen examples

Design philosophy

We think your site should highlight your content, not our design. Our design takes a back seat so that your content can shine through front and center. The homepage of Fullscreen is an amalgam of your latest visual content, organized in a hierarchical manner with your latest five posts featured twice as large as the preceding 20 posts. Single post pages are 950 pixels wide, enabling your post large photos, videos, or other work that is important to you. Three widgetized areas give you customization control over the bottom (footer) region of your site.

Get early access, coupon codes and pleasantly infrequent updates via email

How to add featured sliding content to WordPress

sliding content for wordpress screenshot In this tutorial, I’ll show you how to add a sliding content region to your WordPress site. You can download the source code for the tutorial, which contains everything you need to put this little thingy on your site in 5 minutes max.

There are a few basic principle that you must know before jumping into this tutorial. First, javascripts are like car parts: You can’t mix Ford parts and expect them to work on a Honda. The same goes with javascript libraries. Conflicting javascript libraries can cause some javascript-powered features to “choke” or freeze. There are ways to use multiple libraries together, but that is beyond the scope of this tutorial. Second, you must load JQUERY before you load JQUERY plugins, like the ones we use on our sites. Make sure that JQUERY shows before other javascripts in the head of your site.

Demo

Download

First
Unzip the download files posted above. Upload slider.css, slider.php, timthumb.php, the /js/ and /cache/ folders into your active theme folder. Copy the contents of the /images/ folder into your themes /images/ folder. Do not overwrite your existing /images/ folder. TimThumb.php requires the GD library, which is available on any host sever with PHP 4.3+ installed. Manually change the /cache/ folder permissions to 777.

Open up header.php in the theme editor. Add these three lines of code somewhere between the <code>__abENT__lt;head__abENT__gt;</code> and <code>__abENT__lt;__abENT__#8260;head__abENT__gt;</code>

<code>__abENT__lt;link rel=__abENT__quot;stylesheet__abENT__quot; href=__abENT__quot;__abENT__lt;?php bloginfo(__abENT__apos;template_directory__abENT__apos;); ?__abENT__gt;__abENT__#8260;slider__abENT__#46;css__abENT__quot; type=__abENT__quot;text__abENT__#8260;css__abENT__quot; media=__abENT__quot;screen__abENT__quot; charset=__abENT__quot;utf-8__abENT__quot;__abENT__gt;<br />
__abENT__lt;script src=__abENT__quot;__abENT__lt;?php bloginfo(__abENT__apos;template_directory__abENT__apos;); ?__abENT__gt;__abENT__#8260;js__abENT__#8260;jquery-1__abENT__#46;3__abENT__#46;2__abENT__#46;min__abENT__#46;js__abENT__quot; type=__abENT__quot;text__abENT__#8260;javascript__abENT__quot; charset=__abENT__quot;utf-8__abENT__quot;__abENT__gt;__abENT__lt;__abENT__#8260;script__abENT__gt;<br />
__abENT__lt;script src=__abENT__quot;__abENT__lt;?php bloginfo(__abENT__apos;template_directory__abENT__apos;); ?__abENT__gt;__abENT__#8260;js__abENT__#8260;slider__abENT__#46;js__abENT__quot; type=__abENT__quot;text__abENT__#8260;javascript__abENT__quot; charset=__abENT__quot;utf-8__abENT__quot;__abENT__gt;__abENT__lt;__abENT__#8260;script__abENT__gt;</code>

If you already have JQUERY running on site, do not add it again. If you are unsure, view your source code and look for a line containing “jquery.”

Second
Now that we have loaded the css and javascripts required for running the slider, we can now include the slider.php WordPress template file in your theme files. Open up index.php or home.php and locate spot where you want to include the slider. If you are using our Modularity theme framework, you might insert the slider right above this line of code:

<code>__abENT__lt;?php<br />
$featured = get_option(__abENT__apos;T_featured__abENT__apos;);<br />
if($featured == __abENT__quot;On__abENT__quot;) { include (THEMELIB __abENT__#46; __abENT__apos;__abENT__#8260;apps__abENT__#8260;featured__abENT__#46;php__abENT__apos;); }<br />
?__abENT__gt;</code>

Paste this right above it:

<code>__abENT__lt;?php include (__abENT__apos;slider__abENT__#46;php__abENT__apos;) ?__abENT__gt;</code>

As you might guess, this tells WordPress to include the slider.php.

Third
Finally, we are going to create a custom write panel to your WordPress post, so that you can choose a thumbnail for each post. Open up your functions.php file and add this code right above the very last ?>.

<code>__abENT__#8260;__abENT__#8260; Custom Write Panel<br />
<br />
$meta_boxes =<br />
	array(<br />
		__abENT__quot;image__abENT__quot; =__abENT__gt; array(<br />
			__abENT__quot;name__abENT__quot; =__abENT__gt; __abENT__quot;image__abENT__quot;,<br />
			__abENT__quot;type__abENT__quot; =__abENT__gt; __abENT__quot;text__abENT__quot;,<br />
			__abENT__quot;std__abENT__quot; =__abENT__gt; __abENT__quot;__abENT__quot;,<br />
			__abENT__quot;title__abENT__quot; =__abENT__gt; __abENT__quot;Image__abENT__quot;,<br />
			__abENT__quot;description__abENT__quot; =__abENT__gt; __abENT__quot;Using the __abENT__#92;__abENT__quot;__abENT__lt;em__abENT__gt;Add an Image__abENT__lt;__abENT__#8260;em__abENT__gt;__abENT__#92;__abENT__quot; button, upload an image and paste the URL here__abENT__#46; Images will be resized__abENT__#46; This is the post main image and will automatically be sized__abENT__#46;__abENT__quot;)<br />
	);<br />
<br />
function meta_boxes() {<br />
	global $post, $meta_boxes;<br />
	<br />
	echo__abENT__apos;<br />
		__abENT__lt;table class=__abENT__quot;widefat__abENT__quot; cellspacing=__abENT__quot;0__abENT__quot; id=__abENT__quot;inactive-plugins-table__abENT__quot;__abENT__gt;<br />
		<br />
			__abENT__lt;tbody class=__abENT__quot;plugins__abENT__quot;__abENT__gt;__abENT__apos;;<br />
	<br />
			foreach($meta_boxes as $meta_box) {<br />
				$meta_box_value = get_post_meta($post-__abENT__gt;ID, $pre__abENT__#46;__abENT__apos;_value__abENT__apos;, true);<br />
				<br />
				if($meta_box_value == __abENT__quot;__abENT__quot;)<br />
					$meta_box_value = $meta_box[__abENT__apos;std__abENT__apos;];<br />
				<br />
				echo__abENT__apos;__abENT__lt;tr__abENT__gt;<br />
						__abENT__lt;td width=__abENT__quot;70__abENT__quot; align=__abENT__quot;center__abENT__quot;__abENT__gt;__abENT__apos;;		<br />
							echo__abENT__apos;__abENT__lt;input type=__abENT__quot;hidden__abENT__quot; name=__abENT__quot;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_noncename__abENT__quot; id=__abENT__quot;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_noncename__abENT__quot; value=__abENT__quot;__abENT__apos;__abENT__#46;wp_create_nonce( plugin_basename(__FILE__) )__abENT__#46;__abENT__apos;__abENT__quot; __abENT__#8260;__abENT__gt;__abENT__apos;;<br />
							echo__abENT__apos;__abENT__lt;h2__abENT__gt;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;title__abENT__apos;]__abENT__#46;__abENT__apos;__abENT__lt;__abENT__#8260;h2__abENT__gt;__abENT__apos;;<br />
				echo__abENT__apos;	__abENT__lt;__abENT__#8260;td__abENT__gt;<br />
						__abENT__lt;td__abENT__gt;__abENT__apos;;<br />
							echo__abENT__apos;__abENT__lt;input type=__abENT__quot;text__abENT__quot; name=__abENT__quot;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__quot; value=__abENT__quot;__abENT__apos;__abENT__#46;get_post_meta($post-__abENT__gt;ID, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;, true)__abENT__#46;__abENT__apos;__abENT__quot; size=__abENT__quot;70%__abENT__quot; __abENT__#8260;__abENT__gt;__abENT__lt;br __abENT__#8260;__abENT__gt;__abENT__apos;;<br />
							echo__abENT__apos;__abENT__lt;p__abENT__gt;__abENT__lt;label for=__abENT__quot;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__quot;__abENT__gt;__abENT__apos;__abENT__#46;$meta_box[__abENT__apos;description__abENT__apos;]__abENT__#46;__abENT__apos; __abENT__lt;__abENT__#8260;label__abENT__gt;__abENT__lt;__abENT__#8260;p__abENT__gt;__abENT__apos;;<br />
				echo__abENT__apos;	__abENT__lt;__abENT__#8260;td__abENT__gt;<br />
					__abENT__lt;__abENT__#8260;tr__abENT__gt;__abENT__apos;;<br />
			}<br />
	<br />
	echo__abENT__apos;<br />
			__abENT__lt;__abENT__#8260;tbody__abENT__gt;<br />
		__abENT__lt;__abENT__#8260;table__abENT__gt;__abENT__apos;;		<br />
}<br />
<br />
function create_meta_box() {<br />
	global $theme_name;<br />
	if ( function_exists(__abENT__apos;add_meta_box__abENT__apos;) ) {<br />
		add_meta_box( __abENT__apos;new-meta-boxes__abENT__apos;, __abENT__apos;Photo for post__abENT__apos;, __abENT__apos;meta_boxes__abENT__apos;, __abENT__apos;post__abENT__apos;, __abENT__apos;normal__abENT__apos;, __abENT__apos;high__abENT__apos; );<br />
	}<br />
}<br />
<br />
function save_postdata( $post_id ) {<br />
	global $post, $meta_boxes;<br />
	<br />
	foreach($meta_boxes as $meta_box) {<br />
		__abENT__#8260;__abENT__#8260; Verify<br />
		if ( !wp_verify_nonce( $_POST[$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_noncename__abENT__apos;], plugin_basename(__FILE__) )) {<br />
			return $post_id;<br />
		}<br />
	<br />
		if ( __abENT__apos;page__abENT__apos; == $_POST[__abENT__apos;post_type__abENT__apos;] ) {<br />
			if ( !current_user_can( __abENT__apos;edit_page__abENT__apos;, $post_id ))<br />
				return $post_id;<br />
		} else {<br />
			if ( !current_user_can( __abENT__apos;edit_post__abENT__apos;, $post_id ))<br />
				return $post_id;<br />
		}<br />
	<br />
		$data = $_POST[$meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;];<br />
		<br />
		if(get_post_meta($post_id, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;) == __abENT__quot;__abENT__quot;)<br />
			add_post_meta($post_id, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;, $data, true);<br />
		elseif($data != get_post_meta($post_id, $pre__abENT__#46;__abENT__apos;_value__abENT__apos;, true))<br />
			update_post_meta($post_id, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;, $data);<br />
		elseif($data == __abENT__quot;__abENT__quot;)<br />
			delete_post_meta($post_id, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;, get_post_meta($post_id, $meta_box[__abENT__apos;name__abENT__apos;]__abENT__#46;__abENT__apos;_value__abENT__apos;, true));<br />
	}<br />
}<br />
<br />
<br />
add_action(__abENT__apos;admin_menu__abENT__apos;, __abENT__apos;create_meta_box__abENT__apos;);<br />
add_action(__abENT__apos;save_post__abENT__apos;, __abENT__apos;save_postdata__abENT__apos;);</code>

You are done.
If you have made it this far, it’s now time to see your slider in action. Go write a new post in WordPress, paste the URL to your image in to the new image panel, and view your site.

Cheers.

Thanks to CSS Tricks for the jquery trick, TimThumb for thumbnail generation and WordPress for the great publishing system.

Get early access, coupon codes and pleasantly infrequent updates via email

WordPress Photo Gallery Theme, Modularity & Modslider Theme Updates

Next up: A minimalist photo gallery theme. This theme will cater specifically to photographers, illustrators and artists and will include two built-in lightboxes to pick from, HD video player, content slider, slideshow, minimalist navigation built atop the Modularity theme framework. Users will have the same variable homepage options as our current child themes for Modularity, plus the ability to over-ride the auto-generated thumbnails produced by WordPress. As always, you can also over-ride the default theme styling from the theme options page. Sounds good, eh?

This theme is going to rock the iPhone, too. It’s gonna be mobile-friendly so you can pitch editors, entice clients and promote your work while on the go.

Now we turn to you, the faithful WordPresser. What would you like to see in a photo gallery theme? Post your suggestions in the comments below.

For those interested, you can grab the latest Modularity theme framework and Modslider releases from the members-only area. These two updates squashed a couple IE bugs.

Get early access, coupon codes and pleasantly infrequent updates via email

New Membership System Information

UPDATE: Re-enrollment has now closed. Previous theme buyers must use the coupon code emailed out to receive an enrollment discount.

By now, most of you have had a chance to log into our new “members only” section. For those who have not, here is your chance. The new membership system improves how we interact with Graph Paper Press theme users, forum support, downloads, theme updates, etc. Users can now grab all our themes and member-only content (support, tutorials, etc) access by signing up. Both free and paid memberships are available.

Why the new membership system, you ask? It is simple. WordPress has grown tremendously recently, so fast in fact, that it is easy to spend hours and hours Googling for answers to basic WordPress questions. Many questions posted on the official WordPress forums often go unanswered largely because there is a finite group of developers responding to an exponentially increasing user base. We offer an alternative to that system by keeping our user base small and focused around a familiar theme framework. Oh yeah….plus we make some neat themes and child themes that can manage your portfolio or magazine Web site.

UPDATE: Re-enrollment has now closed. Previous theme buyers must use the coupon code emailed out to receive an enrollment discount.

Get early access, coupon codes and pleasantly infrequent updates via email

Tip: How to change the default WordPress excerpt

Ever get tired of those nasty [...] ellipses that appear beneath your blog excerpts? I do. In this tutorial, I am going to show you how to change WordPress’ default excerpt display without changing core WordPress files.

Open up functions.php and add this code to the very bottom of the file:

<?php function gpp_excerpt($text) { return str_replace('[...]', '<br /><a href="'.get_permalink().'">Read More &rarr;</a>', $text); } add_filter('the_excerpt', 'gpp_excerpt'); ?>

The above code “filters” WordPress’ default the_excerpt function and replaces it with our own gpp_excerpt function. We have just written a very simple plugin for WordPress.

If, however, you are writing your own excerpts and want to add a Read More permalink, replace:

<?php the_excerpt(); ?>

with this:

<?php the_excerpt(); ?><span class="read_more"><a href="<?php the_permalink(); ?>">[ Read More &rarr; ]</a></span>

If you found this tutorial useful, consider subscribing to Graph Paper Press. You will get access to our support forum, where additional tutorials similar to this one are available to our subscribers.

Get early access, coupon codes and pleasantly infrequent updates via email

Behind the scenes at Graph Paper Press

As you have all likely noticed, Graph Paper Press has undergone a few substantial changes recently, both in presentation, on our support forum and membership systems. We (Yes, I say we. GPP is no longer a one man show! More on this below.) have also committed ourselves to a new subscription based service to better serve our members. The changes also include improvements to our themes and expanding our child theme selection to our include our most popular themes from 2008.

Lets back up a bit
About six months ago, I realized that the site was becoming much larger that I had ever intended it to be. My initial reason for starting Graph Paper Press was to move my WordPress-related activities away from my personal Web site, http://thadallender.com. My personal site is and was largely a portfolio Web site using WordPress as the CMS. The move proved to be a good thing. Graph Paper Press has grown and grown and grown largely because of our free WordPress theme selection. More free themes are planned for the very near future.

About four months ago, it became clear that I needed to make a decision: Either sell Graph Paper Press or bring others on board who shared my passion for WordPress and design to help run the Web site. For example, one of my free themes reached 10,000 downloads. One month later, two more free themes reached over 10,000 downloads. That many theme downloads translates into many, many forum questions, hundreds of emails about customization, phone calls requesting theme services, etc. It has been an eye-opening experience. During this time, I also got married! And, moved from Kansas City to Washington, D.C. It was simply way too much for one person to handle.

So today, I would like everyone to say hello to Chandra Maharzan, my newest collaborator at Graph Paper Press. Chandra is a seasoned, thoughtful designer and is a great addition to Graph Paper Press.

More Child Themes
That’s right, we’re releasing more child themes for Modularity, our popular theme framework. F8 is now available for members as a child theme for Modularity. This is a beta release. Members can download the F8-Child beta theme in their member-only dashboard. Next up is converting F8-Remixed and Gridline Magazine into child themes for Modularity. All remaining themes will be free.

New Support Forum
We are slowly transitioning to a new forum so that our subscribers and members don’t have to re-register for the forum. The new forum will largely be focused around providing support for our members. We plan on importing all posts from the old forum into the new support forum.

New Membership Area
My favorite change to Graph Paper Press is our new membership dashboard. This area allows members to download themes from one central location and manage accounts independently.

Our Philosophy
Our approach to WordPress and design remains unchanged. We believe that your website should be about your content, not our design. This is why we prefer clean, minimalist designs, a theme options page packed with configurable options, design alternatives, and homepage settings. We also value innovation, member relationships and helping extend the publishing possibilities using WordPress. Happy blogging!

Get early access, coupon codes and pleasantly infrequent updates via email