Creating a Filterable Portfolio with WordPress and jQuery

Creating a Filterable Portfolio with WordPress and jQuery

Tutorial Details
  • Program: WordPress and jQuery
  • Version: 3.0 - 3.3
  • Difficulty: Intermediate
  • Estimated Completion Time: 30 minutes

Learn in this tutorial how to make a filterable Portfolio with jQuery integrated with WordPress, remember that this portfolio kind can make a big difference on your themes!


Step 1: Introduction

You can use the code from this tutorial in any theme that you’ve created or are creating, we’ll follow simple steps and in my case, I’ll use the default Twenty Eleven theme and running on WordPress 3.3. Okay, let’s work!

You can use the code used in this tutorial in any theme that you’ve created or are creating.


Step 2: Creating the Project Item on Admin

We’ll need to create a section on Admin bar called Project, in this section you’ll create all the portfolio entries with their respective thumbnail and demo link.

Open the functions.php file and at the end, let’s create a function to register the Project item. (You can see the complete function at the end of this step)

add_action('init', 'project_custom_init');    
	
/* SECTION - project_custom_init */
function project_custom_init()
{
	// the remainder code goes here
}
/* #end SECTION - project_custom_init --*/

In this code we are using the add_action function so that when WordPress begins to load our function will be called.

Inside the project_custom_init function lets add the code that registers a Custom Post Type called Project.


	// The following is all the names, in our tutorial, we use "Project"
	$labels = array(
		'name' => _x('Projects', 'post type general name'),
		'singular_name' => _x('Project', 'post type singular name'),
		'add_new' => _x('Add New', 'project'),
		'add_new_item' => __('Add New Project'),
		'edit_item' => __('Edit Project'),
		'new_item' => __('New Project'),
		'view_item' => __('View Project'),
		'search_items' => __('Search Projects'),
		'not_found' =>  __('No projects found'),
		'not_found_in_trash' => __('No projects found in Trash'),
		'parent_item_colon' => '',
		'menu_name' => 'Portfolio'
	);
	  
	// Some arguments and in the last line 'supports', we say to WordPress what features are supported on the Project post type
	$args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'show_in_menu' => true,
		'query_var' => true,
		'rewrite' => true,
		'capability_type' => 'post',
		'has_archive' => true,
		'hierarchical' => false,
		'menu_position' => null,
		'supports' => array('title','editor','author','thumbnail','excerpt','comments')
	);
	  
	// We call this function to register the custom post type
	register_post_type('project',$args);

The code above will add an item on the Admin menu called Portfolio and it will be in this section that we’ll create all the portfolio items.

Now, inside the function, let’s add more code.

	// Initialize Taxonomy Labels
	$labels = array(
		'name' => _x( 'Tags', 'taxonomy general name' ),
		'singular_name' => _x( 'Tag', 'taxonomy singular name' ),
		'search_items' =>  __( 'Search Types' ),
		'all_items' => __( 'All Tags' ),
		'parent_item' => __( 'Parent Tag' ),
		'parent_item_colon' => __( 'Parent Tag:' ),
		'edit_item' => __( 'Edit Tags' ),
		'update_item' => __( 'Update Tag' ),
		'add_new_item' => __( 'Add New Tag' ),
		'new_item_name' => __( 'New Tag Name' ),
	);
		
	// Register Custom Taxonomy
	register_taxonomy('tagportfolio',array('project'), array(
		'hierarchical' => true, // define whether to use a system like tags or categories
		'labels' => $labels,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => array( 'slug' => 'tag-portfolio' ),
	));

Attention to the ‘hierarchical’ argument on the register_taxonomy function, if you type true you will have a system like categories for your portfolio items, but if you type false you will have a system like tags. I prefer the category style system.

Oh yeah! The project_custom_init() function is finished! See below for the full code of this function.

	add_action('init', 'project_custom_init');  
	
	/*-- Custom Post Init Begin --*/
	function project_custom_init()
	{
	  $labels = array(
		'name' => _x('Projects', 'post type general name'),
		'singular_name' => _x('Project', 'post type singular name'),
		'add_new' => _x('Add New', 'project'),
		'add_new_item' => __('Add New Project'),
		'edit_item' => __('Edit Project'),
		'new_item' => __('New Project'),
		'view_item' => __('View Project'),
		'search_items' => __('Search Projects'),
		'not_found' =>  __('No projects found'),
		'not_found_in_trash' => __('No projects found in Trash'),
		'parent_item_colon' => '',
		'menu_name' => 'Project'

	  );
	  
	 $args = array(
		'labels' => $labels,
		'public' => true,
		'publicly_queryable' => true,
		'show_ui' => true,
		'show_in_menu' => true,
		'query_var' => true,
		'rewrite' => true,
		'capability_type' => 'post',
		'has_archive' => true,
		'hierarchical' => false,
		'menu_position' => null,
		'supports' => array('title','editor','author','thumbnail','excerpt','comments')
	  );
	  // The following is the main step where we register the post.
	  register_post_type('project',$args);
	  
	  // Initialize New Taxonomy Labels
	  $labels = array(
		'name' => _x( 'Tags', 'taxonomy general name' ),
		'singular_name' => _x( 'Tag', 'taxonomy singular name' ),
		'search_items' =>  __( 'Search Types' ),
		'all_items' => __( 'All Tags' ),
		'parent_item' => __( 'Parent Tag' ),
		'parent_item_colon' => __( 'Parent Tag:' ),
		'edit_item' => __( 'Edit Tags' ),
		'update_item' => __( 'Update Tag' ),
		'add_new_item' => __( 'Add New Tag' ),
		'new_item_name' => __( 'New Tag Name' ),
	  );
		// Custom taxonomy for Project Tags
		register_taxonomy('tagportfolio',array('project'), array(
		'hierarchical' => true,
		'labels' => $labels,
		'show_ui' => true,
		'query_var' => true,
		'rewrite' => array( 'slug' => 'tag-portfolio' ),
	  ));
	  
	}
	/*-- Custom Post Init Ends --*/

If you go to the Admin now, you will see a new item on menu called Portfolio like the image below:

Let’s create a new function that will ensure nice messages are shown when the user, for example, creates a new item on portfolio or something like this.

The code below must be typed below our last function and not inside it.

	/*--- Custom Messages - project_updated_messages ---*/
	add_filter('post_updated_messages', 'project_updated_messages');
	
	function project_updated_messages( $messages ) {
	  global $post, $post_ID;

	  $messages['project'] = array(
		0 => '', // Unused. Messages start at index 1.
		1 => sprintf( __('Project updated. <a href="%s">View project</a>'), esc_url( get_permalink($post_ID) ) ),
		2 => __('Custom field updated.'),
		3 => __('Custom field deleted.'),
		4 => __('Project updated.'),
		/* translators: %s: date and time of the revision */
		5 => isset($_GET['revision']) ? sprintf( __('Project restored to revision from %s'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
		6 => sprintf( __('Project published. <a href="%s">View project</a>'), esc_url( get_permalink($post_ID) ) ),
		7 => __('Project saved.'),
		8 => sprintf( __('Project submitted. <a target="_blank" href="%s">Preview project</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
		9 => sprintf( __('Project scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview project</a>'),
		  // translators: Publish box date format, see http://php.net/date
		  date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( get_permalink($post_ID) ) ),
		10 => sprintf( __('Project draft updated. <a target="_blank" href="%s">Preview project</a>'), esc_url( add_query_arg( 'preview', 'true', get_permalink($post_ID) ) ) ),
	  );

	  return $messages;
	}
	
	/*--- #end SECTION - project_updated_messages ---*/

This function creates custom messages for when a user modifies the portfolio post, see a message example on image below:

You can see that with only this code you can add tags/categories to your portfolio and create new portfolio items! But let’s add more one feature, good idea? Sure!

Adding a Demo URL Meta Box

In this step, we’ll add a meta box on the portfolio item creation screen where the user can paste a url to the website or other page.

Let’s create three functions to add this meta box where we will save our URL for the portfolio item. The code goes below the last function that we’ve created.

	/*--- Demo URL meta box ---*/
	
	add_action('admin_init','portfolio_meta_init');
	
	function portfolio_meta_init()
	{
		// add a meta box for WordPress 'project' type
		add_meta_box('portfolio_meta', 'Project Infos', 'portfolio_meta_setup', 'project', 'side', 'low');
	 
		// add a callback function to save any data a user enters in
		add_action('save_post','portfolio_meta_save');
	}
	
	function portfolio_meta_setup()
	{
		global $post;
	 	 
		?>
			<div class="portfolio_meta_control">
				<label>URL</label>
				<p>
					<input type="text" name="_url" value="<?php echo get_post_meta($post->ID,'_url',TRUE); ?>" style="width: 100%;" />
				</p>
			</div>
		<?php

		// create for validation
		echo '<input type="hidden" name="meta_noncename" value="' . wp_create_nonce(__FILE__) . '" />';
	}
	
	function portfolio_meta_save($post_id) 
	{
		// check nonce
		if (!isset($_POST['meta_noncename']) || !wp_verify_nonce($_POST['meta_noncename'], __FILE__)) {
		return $post_id;
		}

		// check capabilities
		if ('post' == $_POST['post_type']) {
		if (!current_user_can('edit_post', $post_id)) {
		return $post_id;
		}
		} elseif (!current_user_can('edit_page', $post_id)) {
		return $post_id;
		}

		// exit on autosave
		if (defined('DOING_AUTOSAVE') == DOING_AUTOSAVE) {
		return $post_id;
		}

		if(isset($_POST['_url'])) 
		{
			update_post_meta($post_id, '_url', $_POST['_url']);
		} else 
		{
			delete_post_meta($post_id, '_url');
		}
	}
	
	/*--- #end  Demo URL meta box ---*/

I won’t explain in details this code because you can learn about meta boxes in this tutorial: Reusable Custom Meta Boxes or just do a little search through the WordPress Codex or on Google.

The code above just creates one meta box with one field where the user can type a URL. We need all these functions, the first just initializes the meta box, the second is the meta box code, and the last is a function to save the data.

Ok! After this, we can go on to next step and work on the front-end, because the back-end is done! We’ll then add the content after.


Step 3: Creating the Portfolio Page template

Now we’ll work to show our portfolio entries to the user! But first let’s create some categories and then add some items to the portfolio.

In this tutorial I’ll use a two column portfolio layout, with some adjustments on markup and CSS you can create a lots of layouts!

A few tips to create a portfolio item

  • Create the tags/categories first
  • In the “Add New Project” page you’ll have an editor like the post/page editor, then just type all the text and images that your user will see when they click on the “More Details” link
  • To add thumbnails we’ll use the Featured Image that is a default WordPress feature
  • In this tutorial I’ll use images with 400px x 160px (width and height), but feel free to use one that you like and that fits in your layout
  • Use http:// before the links on the meta box so you don’t get a 404 not found error

Ok, the first thing that we’ll need to do now is create a new Page Template called “Portfolio 2 Columns”, so let’s go!

Creating the Page Template

First, duplicate the page.php file. Then, rename it to page_portfolio_2c.php.

We need to edit this new file and paste the code below on the file’s first line:

<?php
/*
Template Name: Portfolio 2 Columns
*/
?>

This will show a new option on the page creation screen, but remember that this code MUST be pasted on the file’s first line!

Now just erase all the content inside content div, in this tutorial, I’m using the Twenty Eleven theme and after erasing, I have this code in my file:

<?php
/*
Template Name: Portfolio 2 Columns
*/
?>

<?php
get_header(); ?>

		<div id="primary">
			<div id="content" role="main">

				<?php // I removed all the lines here ?>

			</div><!-- #content -->
		</div><!-- #primary -->

<?php get_footer(); ?>

If you are using your own theme, then erase all the lines that get content from your page, like the_content() for example. We’ll create some custom code, so don’t leave other code here, in the portfolio page we just need your projects!

Now, go to WordPress Admin and create a new Page called “Portfolio” and don’t forget to select “Portfolio 2 Columns” in the Template field, like the image below.

Just add a title and leave the content blank, we don’t need it.

If you try to access the page now you’ll get only the header, footer and blank content. So, let’s add life to our filterable portfolio!


Step 4:The jQuery Filterable Portfolio

Let’s talk a little about the plugin that we’ll use to make the portfolio.

The plugin

In this tutorial I’ll make use of a plugin called Filterable, this plugin was created by GetHifi.

This plugin was written without jQuery’s compatibility mode, so I just changed it and the version that works fine with WordPress is in the Source Code file for this tutorial.

The plugin is a little old, to be more exact, it’s from 2009, but it’s on MIT License, so you can use on premium themes, commercial sites and wherever you like.

Just download the modified script that is on Source Code (link on tutorial top) and let’s begin! If you like, visit the homepage to get more details about it.

How Filterable works

Using Filterable is very simple! The first step is use the right markup, the plugin expects markup like the example below:

	<ul id="portfolio-filter">
		<li><a href="#all">All</a>
		<li><a rel="jquery" href="#jquery">jQuery</a>
		<li><a rel="webdesign" href="#webdesign">Webdesign</a>
	</ul>

Here we have the filter items, when we click on one of these links, then all the magic will happen. Important: all the entries will need a class with the same text in the ‘href’ and ‘rel’ attributes.

And now, we have the portfolio items markup:

	<div id="portfolio-wrapper">
		<ul id="portfolio-list">
		
			<li class="portfolio-item all webdesign">
				<!-- ALL CUSTOM MARKUP HERE -->
			</li>
			
			<li class="portfolio-item all jquery">
				<!-- ALL CUSTOM MARKUP HERE -->
			</li>
		
		</ul>
		<div class="clearboth"></div>
	</div>

Important: What really matters here is that all the items (li) must be inside a (ul), in other words, must be wrapped. Note that we use a div too, we use it because we’ll ‘float’ the li elements, so it is important to have another wrapper and a clear div to avoid structure breaking problems.

After this, we’ll need to call the filterable script in our functions.php file and initialize the filterable portfolio by calling the filterable() function, like the code below:

	<script>
		jQuery(document).ready(function() {	
			jQuery("#portfolio-list").filterable();
		});
	</script>

But for now, we’ll add our custom markup inside the li, but, we’ll need to generate all the filters and class names with PHP to get all the categories, portfolio entries and all the other details from WordPress! Let’s work!

Creating the Portfolio Filter

Let’s back to the page_portfolio_2c.php file and write the portfolio filter. The code actually is something like the code below:

<?php
/*
Template Name: Portfolio 2 Columns
*/
?>

<?php
get_header(); ?>

		<div id="primary">
			<div id="content" role="main">

				<!-- WE'LL ADD OUR CODE HERE, INSIDE CONTENT DIV -->

			</div><!-- #content -->
		</div><!-- #primary -->

<?php get_footer(); ?>

We need get all the terms/categories from WordPress, edit some names to use inside the class attribute and print a ul for the required template.

We’ll type the following code inside the #content div:

	<?php
		$terms = get_terms("tagportfolio");
		$count = count($terms);
		echo '<ul id="portfolio-filter">';
		echo '<li><a href="#all" title="">All</a></li>';
			if ( $count > 0 )
			{	
				foreach ( $terms as $term ) {
					$termname = strtolower($term->name);
					$termname = str_replace(' ', '-', $termname);
					echo '<li><a href="#'.$termname.'" title="" rel="'.$termname.'">'.$term->name.'</a></li>';
				}
			}
		echo "</ul>";
	?>

The code above will generate a ul with the default element ‘All’, and do a loop on terms to print all other categories that have entries. Let’s do a more detailed explanation:

First, we create a variable called $terms, and we use the get_terms() function that returns an array with all terms. As a parameter, the function requires a string or an array of strings with the taxonomy name(s), we pass tagportfolio, that was the name we used in our functions.php file. You can get more detailed info under get_terms() in the WordPress Codex.

Then, we create a variable called $count and use the count() function to get the total number of elements in the array, we print the default markup and the All item.

After that, we verify if the $count variable is greater than zero, if yes, we have at least one category with items to print.

Inside if, we create a foreach loop to get all array values, and create a different li element for each element in the $terms array.

Inside foreach, we create a variable called $termname to store the term name, remember that we change the text to lower case, because this variable will be used inside the class attribute.
Then, we just replace any white space with a - using the str_replace function, this line will enable you to use categories/terms with more than one word, like “WordPress Themes” for example.
And last, we print an li element and use our variables to print the data in the right place.

If you test now, you’ll see a categories/terms list with the names that you created in WordPress Admin. Now, let’s work on the items.

Displaying the Portfolio Items

Now let’s display the portfolio items, we need do it following the required template shown above.

We’ll do it just adding the code below:


<?php 
	$loop = new WP_Query(array('post_type' => 'project', 'posts_per_page' => -1));
	$count =0;
?>
			
<div id="portfolio-wrapper">
	<ul id="portfolio-list">
			
		<?php if ( $loop ) : 
					 
			while ( $loop->have_posts() ) : $loop->the_post(); ?>
					
				<?php
				$terms = get_the_terms( $post->ID, 'tagportfolio' );
									
				if ( $terms && ! is_wp_error( $terms ) ) : 
					$links = array();

					foreach ( $terms as $term ) 
					{
						$links[] = $term->name;
					}
					$links = str_replace(' ', '-', $links);	
					$tax = join( " ", $links );		
				else :	
					$tax = '';	
				endif;
				?>
							
				<?php $infos = get_post_custom_values('_url'); ?>
							
				<li class="portfolio-item <?php echo strtolower($tax); ?> all">
					<div class="thumb"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail( array(400, 160) ); ?></a></div>
					<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
					<p class="excerpt"><a href="<?php the_permalink() ?>"><?php echo get_the_excerpt(); ?></a></p>
					<p class="links"><a href="<?php echo $infos[0]; ?>" target="_blank">Live Preview →</a> <a href="<?php the_permalink() ?>">More Details →</a></p>
				</li>
						
			<?php endwhile; else: ?>
					 
				<li class="error-not-found">Sorry, no portfolio entries found.</li>
						
		<?php endif; ?>

	</ul>

	<div class="clearboth">
</div>

A lot of lines of code, no? But don’t worry, I’ll explain the code for you.

The first step is create a custom query, we do it with WP_Query function, I pass as parameter the custom post type “project”, that we created on functions.php file. This query will get all the projects that you’ve created.

Then, I do a loop like we do normally with post exhibition, for example.

Inside the while, we do the same process used on filter creation, but here we create a array called links where we’ll store all the terms of the post. Note that now, beyond the taxonomy name we pass the post ID in get_the_terms().

Then, we use join and create a unique string with all array elements, if the post terms are “WordPress” and “Design”, the $tax variable will be equal to “wordpress design”, we’ll use this to add the right classes to allow the portfolio to be filterable.
If the post doesn’t have terms, we just set $tax being equal to a blank string.

After this, we create a variable called $infos where we’ll get the demo url from our Custom Post Field created in the functions.php file

Then, we just print the template markup and make use of functions like get_the_excerpt(), the_post_thumbnail (note that you can change the dimensions to fit your layout, if you for example, would like to create a three column portfolio.)

If you update the page, you will see all the items listed, but the filter still doesn’t work. Let’s fix it!

Using Filterable in WordPress

Now, let’s use our plugin. Did you already download it? If yes, copy and paste the filterable.js file inside the js/ folder.

In the functions.php file, let’s add the jQuery library to the ‘head’ tag first. To do it we’ll use a custom function and the wp_enqueue_script function.

	function enqueue_filterable() 
	{
		wp_register_script( 'filterable', get_template_directory_uri() . '/js/filterable.js', array( 'jquery' ) );
		wp_enqueue_script( 'filterable' );
	}
	add_action('wp_enqueue_scripts', 'enqueue_filterable');

Now, back to the page_portfolio_2c.php file and below the last code added but inside the content div, add the following code:

	<script>
		jQuery(document).ready(function() {	
			jQuery("#portfolio-list").filterable();
		});
	</script>

This only links the plugin to the page and calls the filterable() function to make our portfolio filterable.

Full Code

<?php
/*
Template Name: Portfolio 2 Columns
*/
?>

<?php
get_header(); ?>

		<div id="primary">
			<div id="content" role="main">

			<?php
				 $terms = get_terms("tagportfolio");
				 $count = count($terms);
				 echo '<ul id="portfolio-filter">';
				 echo '<li><a href="#all" title="">All</a></li>';
				 if ( $count > 0 ){
					
						foreach ( $terms as $term ) {
							
							$termname = strtolower($term->name);
							$termname = str_replace(' ', '-', $termname);
							echo '<li><a href="#'.$termname.'" title="" rel="'.$termname.'">'.$term->name.'</a></li>';
						}
				 }
				 echo "</ul>";
			?>
						
			<?php 
				$loop = new WP_Query(array('post_type' => 'project', 'posts_per_page' => -1));
				$count =0;
			?>
			
			<div id="portfolio-wrapper">
				<ul id="portfolio-list">
			
				<?php if ( $loop ) : 
					 
					while ( $loop->have_posts() ) : $loop->the_post(); ?>
					
						<?php
						$terms = get_the_terms( $post->ID, 'tagportfolio' );
								
						if ( $terms && ! is_wp_error( $terms ) ) : 
							$links = array();

							foreach ( $terms as $term ) 
							{
								$links[] = $term->name;
							}
							$links = str_replace(' ', '-', $links);	
							$tax = join( " ", $links );		
						else :	
							$tax = '';	
						endif;
						?>
						
						<?php $infos = get_post_custom_values('_url'); ?>
						
						<li class="portfolio-item <?php echo strtolower($tax); ?> all">
							<div class="thumb"><a href="<?php the_permalink() ?>"><?php the_post_thumbnail( array(400, 160) ); ?></a></div>
							<h3><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h3>
							<p class="excerpt"><a href="<?php the_permalink() ?>"><?php echo get_the_excerpt(); ?></a></p>
							<p class="links"><a href="<?php echo $infos[0]; ?>" target="_blank">Live Preview →</a> <a href="<?php the_permalink() ?>">More Details →</a></p>
						</li>
						
					<?php endwhile; else: ?>
					 
					<li class="error-not-found">Sorry, no portfolio entries for while.</li>
						
				<?php endif; ?>
			

				</ul>

				<div class="clearboth"></div>
			
			</div> <!-- end #portfolio-wrapper-->
				
			<script>
				jQuery(document).ready(function() {	
					jQuery("#portfolio-list").filterable();
				});
			</script>
			
			</div><!-- #content -->
		</div><!-- #primary -->

<?php get_footer(); ?>

Step 5: Some style

Now that we’ve coded everything that we need, let’s add some CSS to our style.css file, if you have other files just add the code there.

/* CLEARFIX
----------------------------------------------- */

.clearboth {
	display: block;
	margin: 0;
	padding: 0;
	clear: both;
}

/* PORTFOLIO FILTER STYLE
----------------------------------------------- */

#portfolio-filter {
	list-style-type: none;
}

#portfolio-filter li {
	display: inline;
	padding-right: 10px;
}

#portfolio-filter li a {
	color: #777;
	text-decoration: none;
}

#portfolio-filter li .current,
#portfolio-filter li:hover {
	color: #084a9a;
}

/* PORTFOLIO LIST STYLE
----------------------------------------------- */

#portfolio-wrapper {
	padding-bottom: 25px;
}

#portfolio-list {
	list-style-type: none;

}

#portfolio-list .portfolio-item {
	width: 400px;
	float: left;
	margin-right: 5px;
}

#portfolio-list .portfolio-item h3 a {
	color: #084a9a;
	text-transform: uppercase;
	font-weight: bold;
}

#portfolio-list .portfolio-item .excerpt
{
	text-align: justify;
	font-size: 14px;
	line-height: 18px;
	padding-right: 15px;
	margin-bottom: 5px;
}

#portfolio-list .portfolio-item .excerpt a {
	color: #555;
}

#portfolio-list .portfolio-item .excerpt a:hover {
	text-decoration: none;
}

Now, if you test again you’ll get a nice filterable portfolio! Wow, all the work is done!


Conclusion

And it’s done! Now you know how to create an amazing filterable portfolio with a free jQuery plugin that you can use in any work that you do.

I hope that you enjoy the content, thank you very much for reading!

Note: Want to add some source code? Type <pre><code> before it and </code></pre> after it. Find out more
  • http://www.gleenk.com/portfolio/ Davide De Maestri

    Great tutorial about filtering post. Useful even fos some technical wordpress aspects, thanks you!

  • http://www.paulund.co.uk Paul

    Nice tutorial exactly what I was looking for.

    Thanks.

  • http://www.aminul.info Aminul

    Owao Nice Tutorial! Now i set up it for my site.

    Thanks!

  • http://www.wpfix.org wordpress management service

    Nice tutorial on creating a filterable portfolio with wordpress and jquery.

    Thanks for sharing this with us.

  • http://pixel2pixeldesign.com Suresh Patel

    very good tutorial & very nicely explain

  • http://webdesignergeeks.com/ Ajay Patel

    Really nice use of jQuery Sanadbox in wordpress.I wold like to include fancybox popup for image.

    Thanks for this grate stuff

    • http://twitter.com/a_w_young Adam

      @Luke S – that would be wonderful.

    • http://wpnimitz.com Nimitz

      I would play some of the codes and we will see if it will work :) Then I’ll let you know.

  • http://www.deportesdeaventura.es Daniel

    Nice tut!!! It has been difficult to find a tutorial about filterable post. It works!!!

  • http://www.aventurity.com Aventurity

    Hello I’ve just try the tutorial with my custom post field and it works perfect!! Thanks a lot for the example. I have one question, is it possible to do it with checkboxes instead of links? How the value would be passed?

  • http://thebettertwin.co.uk thebettertwin

    Nice, im updating my portfolio and was wanting something just like this.

    I ran into a problem tho. You have to be careful with permalinks, my structure was /%category%/%postname%/ and it messed up the link to each project. They return 404s.

    Had to change this to /%postname%/

    Also is there an easy way to display “no link available” if one isnt entered as a custom field?

    • http://twitter.com/a_w_young adam

      I also ran into these issues. How can they be fixed?

      • http://www.jazzcake.com Lionel Douglas

        Had the same issue. Just do what “thebettertwin” did: Go to Settings > Permalinks, and select the Custom Structure, and fill /%postname%/ in there :)

  • http://www.kreativtheme.com Kreativ Theme

    Thanks for the extensive tutorial! There are many themes that makes this feature a selling point, so this filter it’s great if you want to create your own.

    I’ve already setup something similar on my own website, but now I’m looking for an ajaxified version of the filter, where the elements are pulled directly from DB … do you know any?

  • http://lukespoor.com Luke S

    Do you think you could do another one but using Quicksand?

    • Japh Thomson
      Staff

      Thanks for the suggestion, Luke. We’ll look into it :)

    • http://webdesignergeeks.com/ Ajay Patel

      Yes,

      Have look at Quicksand jsfiddle example.

      http://jsfiddle.net/ajaypatel_aj/EHRRW/

  • Alice

    Great tutorial! Just one question. Why not use the template hierarchy and call your template “archive-projects.php”, instead of creating a custom template, and then assigning to a page?

  • http://www.syntaxforest.com Malang

    Very nice tutorial to arrange portfolio. Some wordpress technical aspects are also mentioned here,
    Thanks you!

  • http://www.kongcreate.com Trimo Leksono

    Great tutorial Rafa, finally I know how to create custom pages and publish it. Thank you Rafa :)

  • http://www.windkr89.nl Erik

    Thanks, just at the right time! Have been redesigning my website and was looking for something to filter my portfolio (maybe also useful for my blog).

  • http://twitter.com/a_w_young Adam

    I’ve been looking for some hand-holding on this sort of functionality and this has been very helpful. I killed two birds with one stone with this tutorial, thank you very much!

  • Sébastien | French WordpressDesigner

    Good tutot !
    I think there is yet one problem with this kind of portfolio : it’s not possible to have a pagination.

    • Joshua Richards

      Agreed, how would we make this have pagination?

  • http://www.integrityinvoice.com Adeniyi Moses Adetola

    Pls keep up your excellent tutorials … thanks

  • xJastus

    No job this tutor (

    Notice: Trying to get property of non-object in … line

    $termname = strtolower($term->name);

    Notice: Trying to get property of non-object in … line

    echo ‘‘.$term->name.’‘;

  • http://amayamedia.com Rene Merino

    Thanks for the tutorial, I always wondered how to to this with wordpress, question, can we use what we learn in this tutorial to make a premium theme for ThemeForrest?

    • Japh Thomson
      Staff

      Hi Rene, I’d recommend you have a read of the Author Tutorial for ThemeForest for clarification about this, specifically the “What is a Copyright Infringement” section.

      • http://www.seopatch.com viv .p

        In this tutorial you have not selected ‘Page-Attribute’ alias in the support with hierarchical set to ‘true’ . I tried this in my code, but after all I am just getting box without layout drop-down option and box heading “Attribute ” instead of Page-Attribute only . Now its completely block my way to move further as I am not able to select any page -layout.I have commented the same question in all three post which are related to custom portfolio page creation in wp.nettut+ . But still I am waiting for the solution.

  • http://jd-design.dk Joachim

    Is there an easy way to put it all into a new theme? tried to copy the files into a new theme, but then an error comes up.

    do i have to do this tut for every new theme?

    Thank you;)

  • http://arlodesign.com Arlo

    I agree with Alice above. Instead of going to all the trouble of making a portfolio page and a custom template with a custom loop, simply create an archive-projects.php file in your theme. Then, when declaring the custom post type:

    ‘has_archive’ => ‘portfolio’

    A lot less fuss.

    Also, I think this tutorial encourages two bad practices:

    1) Placing a data-gathering function in the template file. It’s a view, not a model.
    2) Recreating a function WordPress already has.

    Keep your development DRY and put this stuff in your functions.php file:

    Adding the tags to each project can be achieved more cleanly by filtering the post_class() function. Add something like this code shown in the codex to your functions.php file. Load up the tags as an array in the filter. You could even use get_post_type() to make sure the code only runs if the post is a project.

    Then, in the theme:

    <li class=”<?php post_class(‘portfolio-item all’) ?>”>

    This method takes all of that taxonomy-looping code out of the template and doesn’t recreate functionality that WordPress already has.

  • http://niallm1.com Niall M

    Hi Rafael. Thanks for the tutorial. I’ve seen a couple of different ways to create filterable portfolios but it’s always nice to see it done in different ways to what I’ve seen before.

  • Joachim

    Is it possible to copy portfolio tags?

    If so, where are they listed?:)

  • http://wplovr.com wp lovr

    Wohaa… I just found a WordPress treasure.. Very nice complete tut. I want implement it for creating a tabbed homepage on my latest project. Million thanks

  • http://enlillebid.dk Jay

    Hey! Really awsome tut!

    I ran into a problem:
    my page http://www.enlillebid.dk does not list the items side by side.. do you know how i can change this?

    And also, is there a way to crop and slice the thumbs so they would be the same size but without loosing properations?:)

    Like this site:http://www.wearepixel8.com/work/#all..

    I am really not so good at this, but please help me – im so close to the end, but i am stuck..:/

    Thanks;)

    • Dan

      Did you figure this out? I’m having the same problem. I also can’t get the images to display in the portfolio section…

      • http://enlillebid.dk Jay

        No, i’m doing it the stupid way:

        Cropping in photoshop, adding the thumbnails to the “projects” and and linking to the right photo ind the post with fancy-box…

  • http://www.welancers.com Aslam Doctor

    This is perfect. I was just looking for this tutorial. Thank you wptuts.

  • http://enlillebid.dk Joachim

    Great Tut!

    How is it possible to crop the images to be the same size? fx 100*100 but without streching..?

    I really find this tut where helpful! :)

  • Pingback: Found Friday Vol 82 - Paper Leaf Design | Edmonton Graphic Design, Edmonton Web Design

  • http://www.andersonnarciso.com Anderson

    Great tut man, thanks!

  • Pingback: Tweet-Parade (No.6 FEB 2012) | gonzoblog.nl

  • Pingback: Creating a Filterable Portfolio with WordPress and jQuery | 備忘録

  • Pingback: WordPress Community Roundup for the Week Ending February 11 - Charleston WordPress User Group

  • Pingback: Creating a Filterable Portfolio with WordPress and jQuery WordPressと統合されたjQueryを使ってフィルタリングポートフォリオ… | 備忘録

  • http://suazo.co.uk Donnie

    Thank you! :D

  • Pingback: Best of Tuts+ in February 2012 - The online portfolio and blog of freelance graphic and web designer Ben Bradshaw

  • Pingback: Best of Tuts+ in February 2012 | clickshots

  • Pingback: Best of Tuts+ in February 2012 | CS5 Design

  • Pingback: Best of Tuts+ in February 2012 | DigitalMofo

  • Pingback: Best of Tuts+ in February 2012 | Shadowtek | Hosting and Design Solutions

  • Pingback: Best of Tuts+ in February 2012 | Wptuts+

  • Pingback: Best of Tuts+ in February 2012 | Wordpress Webdesigner

  • Pingback: Best of Tuts+ in February 2012 | Omega Pixels

  • Pingback: Best of Tuts+ in February 2012 |

  • Pingback: Best of Tuts+ in February 2012 | HowDoDesign

  • Pingback: Best of Tuts+ in February 2012 | How to Web

  • Pingback: Best of Tuts+ in February 2012 | linuxin.ro

  • Pingback: Best of Tuts+ in February 2012 « Webby Treats

  • Pingback: Best of Tuts+ in February 2012 - InterlaceLab

  • Pingback: Wordpress Leaks » Best of Tuts+ in February 2012

  • Pingback: IOS world of development » Best of Tuts+ in February 2012

  • Pingback: Best of Tuts+ in February 2012 | Brooklyn NYC photography blog

  • Pingback: Best of Tuts+ in February 2012 | Cyber Web Designs

  • Pedro

    Thanks for this tut.

    I follow everystep, and everythings works except one thing. When I click on “More details” the link take me to a 404 error.

    How can I fix it?

    Thank you anyways! :D

  • Pingback: Best of Tuts+ in February 2012 | Flash Video Traning Source

  • Pingback: Best of Tuts+ in February 2012 » Ezee2Know

  • Pingback: Eget Wordpress theme | Michelle Halland

  • Blake

    I’ve got this working when I use the 2011 theme but when I apply it using my own custom theme the tabs don’t do anything, they create the appropriate hash tag but it’s not filtering it. Is there something I’m missing that I need to add that the 2011 theme has? I’ve copied the code the exact same from above and I’m so close!

  • http://ayoungh.co.uk/ Anthony Young

    I am having some issues implimenting this just getting the projects on the page, I havent used the jquery filter code im just using the loop. But am getting “Sorry, no portfolio entries found.” Its a custom theme I am creating for myself using the 2012 theme.

  • http://www.der-prinz.com Michael Oeser

    This is great stuff but is there any chance to change the animation effect?

  • http://aghdesigns.net Andy

    This is a pretty nice tutorial.

    There is one issue that is intriguing me. I can query everything without any problems but for reason filterable doesn’t work when the filter link is clicked. The only time it works is when you reload the page once it has the hash (ID on the URL).

    This is the link to my portfolio where I am trying to use it.
    http://aghdesigns.net/#all

    This is the code I’m using

    filter list
    <ul class=”filter”>
    <li><a href=”#all”>All</a></li>
    <li><a rel=”development” href=”#development”>Web Development</a></li>
    <li><a rel=”webdesign” href=”#webdesign”>Web Design</a></li>
    </ul>

    The is in
    <ul class=”filter”>
    Content here
    </ul>

    init
    $(“#portfolio”).filterable();

    filterable tagSelector
    ‘.filter a’

    All seems to be correct especially since it filters after a refresh and not when the link is clicked.

    • http://hekate-design.pl bastetmilo

      How did you fix it? I have the same problem :(

  • http://www.emymorais.com Emy Morais

    great tutorial!

    I have a problem. When I click on “More details” it opens the pg single.php however, does not open the contents of my post, but shows only the category you enter! How do I fix this?

    Emy Morais – Brazil

  • http://www.wopao.org thunur

    I very much this article ^ _ ^

  • david

    I followed all the steps above and could show my project posts under “All” filter. But there is no other tag(filter) which I saved in each post.

    I checked the tag taxonomy in project menu and found no tag has posts. Every tag shows 0 post.

    I really want to use this template. Please help.

    Thanks for the great tutorial!

    • david

      Solved.

      It was because I set the post as a private. After publishing posts as public, everything is fine. :)

      Thanks!

  • kitkat

    THANK YOU SO MUCH! This is exactly what I was looking for and the tutorial was so clear. Awesome job.

    I do have a question. Is there a way to make the transition between filters smoother? Here is where I am implementing the plugin:
    http://www.grumpyshamrock.com/portfolio/#all

    As you can see, the transition is a little “bumpy” and doesn’t look quite right. Is it possible to have something more similar to the one found here?:
    http://www.wearepixel8.com/work/#all

    The jsfiddle (http://jsfiddle.net/ajaypatel_aj/EHRRW/) from Ajay Patel is a great example of a quicksand feature, but I am having a hard time figuring out where exactly to put the new code.

    Any help is GREATLY appreciated. Thanks!

  • Alex

    Why does the demo scroll to the top of the page after filtering?

  • http://www.kathyisawesome.com kathy

    wouldn’t it make more sense to use the cpt archive template? so archive-project.php ? and pre_get_posts() to modify the query instead of doing the query again?

  • Sab

    Hello !

    First thanks for this great tuto. I just have a question. When I select a project, it displays it like a blog post. How can I remove the sidebar and the comments on this page please ?

    Thanks !

  • Rasha Nour ELDin

    Hi , Thanks for the tutorial
    I tried it on Thematic child theme , but it didn’t work , the filterable doesn’t work when the filter link is clicked , as Andy said
    Thanks

  • egno

    What about inserting a lightbox?
    I ‘ve add rel=”lightbox” into the image link. But it doesn’t work.
    I need some help.

  • http://www.code-pal.com Sumeet Chawla

    Your teaching style is pretty good.. You tend to describe each line of code with utmost details. Keep it up :) The tutorial was awesome and helped me a lot to give that extra ‘wow’ effect in a project :)

  • ALP

    Too many inconsistency for example… fliterable.js become sluggish less liquid or easeout when there are 20+ images. The Admin page appears to have bugs prior to registered custom post called ‘project’ and so on.

    But thanks for sharing anyway… I ll probably go with Quicksand or hopefully Isotope.

  • http://bradvdesign.com Brad

    Something is wrong here in the code for download, it broke my local MAMMP WordPress installation! Don’t know if anyone else had this problem but watch out!!!

    • http://wp.envato.com/ Japh Thomson
      Staff

      Hi Brad, do you have any more information on how it broke your MAMP WordPress installation? If you can tell us what errors etc. you see, then we can see what needs fixing.

      • Brad

        Thanks for the reply, i actually wound up back here by accident on a google search. I’m not used to people following up on posts/comments.

        There wasn’t an error message or any thing at all, nothing displayed. I uploaded the theme files, they wern’t broken or missing anything when I activated the theme the screen went blank white. Admin/login/Dashboard everything were blank. No way to switch to another theme. So I had to reinstall everything again.

        • http://wp.envato.com/ Japh Thomson
          Staff

          Hi again Brad, that certainly is strange. I’m not seeing this on my own setup.

          One thing for your future reference though: if you have a fatal error like that happening and can’t log int, you can always deactivate a theme by going into your wp-content/themes folder and renaming the folder for your current theme.

          Next time you go to the site, WordPress won’t be able to find the theme, and will revert to the default, so you can log back in fine.

  • http://wpnimitz.com Nimitz

    Hi, I am very please to found this code and I have actually looking for this one that will automate the process each time I add new projects.

    But I have a problem, each time I add new project it will be saved and can be seen on the projects page, I can also edit it. But when I go to the permalink of the project it will show 404 error.

    Can you help me with this one?

    • orange cubique

      Hey I’m having this problem too! Did you solved it? Thanks

      • Marulo Marulo

        me too

      • Marulo Marulo

        Hi, re-submit the permalinks structure and ok

  • brad

    We must be running different set ups or not understanding each other. Apologies if I’m just doing something stupid. I downloaded the source files again, extracted them from the zip and uploaded the “Only modified files’ folder. This time I got an error saying the theme was broken and missing a template file. When i activated the theme again, same problem. I had a blank white screen. I tried renaming the folder in the theme directory and that did not work. I could not reload or revisit wordpress without a blank white screen.

    Hopefully this is just some weird problem on my end and won’t waste anyone else’s time as it has mine. I’m off to re-install MAMP again for the 3rd time.

  • http://wpnimitz.com Nimitz

    Okey my code is now working but I have a problem, how to add filterable categories? and how to link each portfolio to the categories.. Here’s my success page base on your code http://www.wpnimitz.com/projects/#all

    Hope you can help me.

  • CF

    Hello,
    I have a problem, I have this error:

    TypeError: jQuery(“#portfolio-list”).filterable is not a function
    jQuery(“#portfolio-list”).filterable();

    Does someone had the same error?

    Thanks for your help!

  • Korab Rudi

    Hi Rafael,
    First of all thanks for this great tutorial. I am trying to implement some filtering in a wordpress website and I have a situation where I wont all the taxonomy’s to be checkboxes and by default I wont all the taxonomy’s to be checkbox and the possibility to uncheck each taxonomy separately. Something like http://hub.tutsplus.com
    Can you suggest something?

  • http://kiannachauntis.com Kianna

    This tutorial is amazing! I do have one question though- is there a way to restrict the number of projects per page and put any overflow into some sort of archives? Much like the blog feature, where you can designate the number of posts per page and then you use a sort of post navigation to visit older posts. Can this be achieved with this?

  • Pingback: Formation Wordpress

  • Pingback: Formation Wordpress

  • Pingback: Formation Wordpress

  • http://danielflynndesign.com Dan

    This works like a charm, thank you!

    I have a question I hope someone can help me with. (Complete novice by the way).
    I’m using the project titles as navigation items also, and was wondering does anyone know how to go about
    highlighting the current page item when viewing a project.

    Here’s the bit that generates the project titles in my nav.

    <?php
    $loop = new WP_Query(array(‘post_type’ => ‘project’, ‘posts_per_page’ => -1));
    $count =0;
    ?>
    <div id=”project_names”>
    <ul id=”project-list”>
    <li class=”project-item”>
    <a href=”<?php echo home_url( ‘/’ ) ?>”>
    Selected work</br></a>
    &#8212
    </li>

    <?php if ( $loop ) :
    while ( $loop->have_posts() ) : $loop->the_post(); ?>
    <?php
    $terms = get_the_terms( $post->ID, ‘tagportfolio’ );
    if ( $terms && ! is_wp_error( $terms ) ) :
    $links = array();
    foreach ( $terms as $term )
    {
    $links[] = $term->name;
    }
    $links = str_replace(‘ ‘, ‘-’, $links);
    $tax = join( ” “, $links );
    else :
    $tax = ”;
    endif;
    ?>
    <?php $infos = get_post_custom_values(‘_url’); ?>
    <a href=”<?php the_permalink() ?>”>
    <li class=”project-item <?php echo strtolower($tax); ?> all”>
    <h3><?php the_title(); ?></h3>
    </a>
    </li>
    <?php endwhile; else: ?>
    <li class=”error-not-found”>Sorry, no portfolio entries for while.</li>
    <?php endif; ?>

    The dev site is at http://danielflynndesign.com/portfolio

    I’m pretty sure I need to add something in there that adds a “current_page” class to a link, then I can style her up, but no real idea how to go about that.

    Really appreciate any advice at all!

    Cheers,
    D

  • http://codigoadicto.com/ Anthuan Vasquez

    Thanks man needed that.

  • danko

    Hello,

    Love the plugin :)

    just one thing is there a way to remove project from the link

    like this

    http://localhost:8888/project/newproject/

    to

    http://localhost:8888/newproject/

    hope some one can help me :)

    Greetings

  • Cat

    love, love, LOVE! i was able to use this for a site that wanted an online catalog – thanks for this!!! (=^_^=)

  • Pingback: i just want to add a filterable portfolio with wordpress and jquery in my wordpress site made in bootstrap but have no idea how to start | question code

  • Pingback: i just want to add a filterable portfolio with wordpress and jquery in my wordpress site made in bootstrap but have no idea how to start [closed] | question code

  • Benson

    Hi, I was to able to to use this wonderfull tutorial for my portfolio very well except that my single.php page isn’t working properly for this template. When I click on a portfolio item its redirecting me to the single page with full details of that particular project, (Without proper styles). My single.php template is working fine for all other posts except for the portfolio’s individual page. Should I create one more template for single portfolio item to be displayed properly. Please help me….. I have attached the snapshots for your referece.

  • ntarantino

    This was amazing, it was nicely laid out and it´s working on my site : globalicn.com/preview/regions/europe/

    I been racking my head all week trying to figure how to display the post by the category listing (alphabetically). I added this to help define each post. Is it possible to organize the post listings by Country name instead of Post Title?

  • Dirk

    hi, thank you for the great tutorial. i wonder how to have the title of the post as a mouse-over overlay over the image. can you give me a hint? i´m quite new to css and jquery. thank you

  • Binaki

    This is amazing plug-in, but I’ve got some problems, the Tags don’t work properly :(, all posts that I did in WordPress can see in page, even though each post I set different tag :(, can anyone help me?!.

    • SignedDAM

      Do you still have the problem? If not, how did you solve the problem?

  • http://www.facebook.com/tylerhopper Tyler Hopper

    This is an awesome tutorial and I almost have exactly what I’m looking for. I am having a problem getting my thumbnails to line up on my portfolio page. Every time I add a new item they change, when I had 8 items they all lined up in rows fine, but now that I have 11 items they aren’t lined up in rows of four. Any help is appreciated. Thank you

  • Carlos

    Nice tutorial! How display the categories?

  • orange cubique

    Hi! This is a great tutorial but I would like to ask, how do I line the portfolio excerpts on one line rather than having only one on a line. For example, this tutorial shows:
    1.
    2.
    3.

    But i would like it to be:
    1. 2. 3.

    I tried using a table, but this causes an issue with the filtering..
    Thanks!

  • amanda stock

    If you are having alignment issues, then add display: inline-block; to #portfolio-list .portfolio-item in CSS.

  • James Sutherland

    Hello,

    Great tutorial but there’s a few things I’m not clear with. Please can you help. To get the portfolio to work a page has to be setup say for example named Portfolio. The link to the portfolio page is then wwww.sitename.com/portfolio. However, the individual projects have a url that named http://www.sitename.com/projects/projectname

    Why does the project have a parent page named project? Would it not make more sense for this to be the page of the portfolio? Please can you help sort this out, it just doesn’t look as tidy as I would have expected of a tutorial on here.

    Thanks! I look forward to hearing back from you shortly.

    • Amy CQ

      I’m having the same issue. Did you find a way to fix this?

    • Lahiru Nanayakkara

      the reason for this is custom post type name. you can see this tutorial created custom post type called “project” so all single page paths are created using that custom post type name. If you want to make it as portfolio just replace all word “projects” by “portfolio” in the code. that will simply sort this. cheers http://www.cybernetsolutions.com.au

  • SignedDAM

    The Tags filtering doesn’t work properly.
    When selecting a tag, every posts get hidden, even the ones tagged properly.

    Does anyone have any clue to why the filtering doesn’t work?

  • con322

    I have everything setup the only problem is when I click the tags the items dont dont hide or anything i get the #wordpress but it stays the same nothing happens even using the exact code as tutorial it doesnt work

  • con322

    i get this error jQuery(…).filterable is not a function

  • Amy CQ

    Just in case anyone else had this issue too, it may save you some time:

I couldn’t get the filterable js to work on my WP site. Each item showed up as well as the tags but when I clicked on a tag, nothing happened. So, I did some digging.



    First of all: 


    I am using a different theme than the example.
    
I am using a child theme.

    My theme has a separate ‘header.php’ which includes the tag.



    Because of these three things, when I added the wp_enqueue_script code, I had to:

    

1) Add it to my header.php inside the tag — not the functions.php



    2) Change get_template_directory_uri() to get_stylesheet_directory_uri() — My js folder is under my child theme, not main theme folder



    Hope this helps someone else out there!

  • http://twitter.com/itsonlyrach Rachel

    Thank you for such a thorough and useful tutorial. I followed every step but haven’t been successful in getting the thumbnail images to display in the portfolio-list (i.e. localhost:8888/project/portfolio#all). I have added an image in every project-post and I can see the full project contents when in post view (i.e. localhost:8888/project/projectname).

    Looking at the comments below it seems as though I am alone with this issue (?). Any advice will be greatly appreciated. Thank you in advance.

    I’m a wp beginner.
    Theme: Twenty Twelve
    Wordpress version: 3.5.1

  • http://www.facebook.com/julian.kingman Julian Kingman

    If anyone has a “not found” error on their page, just re-save permalink settings (settings>permalinks)

  • http://twitter.com/adamsteinhauser adam steinhauser

    anyone know of a way to disable the animation of the actual posts so they dont shrink during the transition …

  • http://twitter.com/adamsteinhauser adam steinhauser

    any idea how I would paginate this so all the posts dont show on one page also
    I would like to have a next and prev button on the single post pages that stay with in the tag selected

  • Pingback: Cómo crear un portfolio en WordPress - WordPress Random Themes