Sample WordPress portfolio page utilizing, Isotope jQuery plugin and it’s filtering system, and Colorbox to show inline content that features a gallery.
<?php
/**
* Template Name: Portfolio
*/
get_header(); ?>
<div id="primary" class="">
<div id="content" role="main">
<?php
$customPostType = 'portfolio';
if( is_page(16) ) { // portfolio
$customTax = 'room_type';
} else {
$customTax = 'project';
}
$wp_query = new WP_Query();
$wp_query->query(array(
'post_type'=> $customPostType,
'posts_per_page' => -1,
'paged' => $paged,
));
if ($wp_query->have_posts()) : ?>
<div class="wrapper">
<div id="the-filters">
<div class="filter">
Filter By:
<?php if( is_page(16) ) { // portfolio
$current = 'current';
} else {
$current = '';
} ?>
<li><a href="<?php bloginfo('url'); ?>/portfolio/">Room</a></li>
<li><a href="<?php bloginfo('url'); ?>/portfolio/projects/">Project</a></li>
</div><!-- flilter -->
<div class="clear"></div>
<?php
// Create Filter buttons from all Categories that have posts
// create an array
$filterLinks = array();
// an empty array to add to our previous array
$newarray = array();
// Starter "Show All' Array
$starter = array('name'=>'All','slug'=>'*', 'class'=> 'is-checked');
// put it into our array
$filterLinks[] = $starter;
$taxterms = get_terms( $customTax );
// loop through terms if not empty
if ( ! empty( $taxterms ) && ! is_wp_error( $taxterms ) ){
foreach ( $taxterms as $taxterm ) {
// show all is a little different, so we add a "." to the others
$datafilter = '.' . $taxterm->slug;
// create some
$newarray = array(
'name' => $taxterm->name,
'slug' => $datafilter,
'class' => ''
);
// load it up
$filterLinks[] = $newarray;
} // endforeach
} // if not empty
// Filter Buttons output
echo '<div id="filters" class="button-group">' ."\n";
// Create filter buttons from terms
foreach ($filterLinks as $links) {
echo '<button class="button '.$links['class'].'" data-filter="' . $links['slug'] . '">' . $links['name'] . '</button>'."\n";
}
echo '</div><!-- isotope filters --></div><!-- the filters --></div><!-- wrapper -->';
?>
<div id="container" class="theportfolio">
<?php while ($wp_query->have_posts()) : ?>
<?php $wp_query->the_post();
$portTitle = get_the_title();
$portDesc = get_the_content();
$saniTitle = sanitize_title($portTitle);
$saniTitle = str_replace('-', '_', $saniTitle);
?>
<?php
// Get the terms with each post
$terms = get_the_terms( $post->ID, $customTax );
if ( $terms && ! is_wp_error( $terms ) ) :
$cat_links = array();
foreach ( $terms as $term ) {
$cat_links[] = $term->slug;
}
$mycats = join( " ", $cat_links );
?>
<?php endif; ?>
<?php if ( has_post_thumbnail() ) { ?>
<div class="item portfolio <?php echo $mycats; ?>">
<?php the_post_thumbnail('portfolio-three'); ?>
<div class="portfolio-hover">
<a href="#" id="<?php echo $saniTitle ?>" >
<h2><?php the_title(); ?></h2>
<div class="clear"></div>
<h3>
<?php
$terms = get_the_terms( $post->ID, 'room_type' );
$draught_links = array();
foreach ( $terms as $term ) {
$draught_links[] = $term->name;
}
$on_draught = join( ", ", $draught_links );
echo $on_draught; ?>
</h3>
</a>
</div><!-- portfolio-hover -->
<div style='display:none'>
<?php
/*-----------------------------------------------
Run the Repeater for the Gallery
-----------------------------------------------*/
if( have_rows('gallery') ):
while ( have_rows('gallery') ) : the_row();
// Get field Name
$image = get_sub_field('image');
$url = $image['url'];
$title = $image['title'];
$alt = $image['alt'];
$size = 'portsingle';
$sizeLarge = 'large';
$thumb = $image['sizes'][ $size ];
$large = $image['sizes'][ $sizeLarge ];
?>
<div class="portopen inline_<?php echo $saniTitle ?>">
<div class="portopentitle">
<h2><?php echo $portTitle; ?></h2>
</div><!-- portopentitle -->
<div class="portopen-img-center">
<div class="portopen-img">
<img src="<?php echo $thumb; ?>" alt="<?php echo $alt; ?>" title="<?php echo $title; ?>" />
</div><!-- port open img -->
</div><!-- port open img center -->
<?php if( $portDesc != '' ) : ?>
<div class="galler-description">
<div class="galler-description-pad">
<?php echo $portDesc; ?>
</div><!-- gal desc -->
</div><!-- gal desc -->
<?php endif; ?>
</div><!-- anchored div -->
<?php endwhile; endif; // repeater ?>
</div><!-- display none -->
</div><!-- item -->
<?php } ?>
<script type="text/javascript">
</script>
<?php endwhile; ?>
</div><!-- container -->
<?php //echo do_shortcode('[ajax_load_more post_type="portfolio" pause="true" scroll="false"]'); ?>
<?php endif; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php //get_sidebar('portfolio'); ?>
<script type="text/javascript">
jQuery(document).ready(function ($) {
<?php while ($wp_query->have_posts()) : ?>
<?php $wp_query->the_post();
$portTitle = get_the_title();
$portDesc = get_the_content();
$saniTitle = sanitize_title($portTitle);
$saniTitle = str_replace('-', '_', $saniTitle);
?>
var $<?php echo $saniTitle; ?>group = $('.inline_<?php echo $saniTitle; ?>').colorbox({
inline:true,
width: '100%',
innerWidth:'100%',
innerHeight:'100%' ,
rel:'inline_<?php echo $saniTitle; ?>',
href: function(){
return $(this).children();
}});
$('#<?php echo $saniTitle; ?>').on('click', function(e){
e.preventDefault();
$<?php echo $saniTitle; ?>group.eq(0).click();
});
<?php endwhile; ?>
});// END ##################################### END
</script>
<?php get_footer(); ?>