ID || stristr( $post->post_content, '[portfoliopage') !== false ) ) ) {
return false;
}
return $run_filter;
}
public function filter_query_request( $args ) {
global $portfolio_page_name;
if ( is_admin() )
return $args;
// Make sure no 404 error is thrown for any sub pages of products-page
if ( ! empty( $args['portfolio_cat'] ) && 'page' != $args['portfolio_cat'] && ! term_exists($args['portfolio_cat'], 'portfolio_cat') ) {
// Probably requesting a page that is a sub page of products page
$pagename = $portfolio_page_name."/{$args['portfolio_cat']}";
if ( isset($args['name']) ) {
$pagename .= "/{$args['name']}";
}
$args = array();
$args['pagename'] = $pagename;
}
// When product page is set to display all products or a category, and pagination is enabled, $wp_query is messed up
// and is_home() is true. This fixes that.
if ( isset( $args['post_type'] ) && 'a3-portfolio' == $args['post_type'] && ! empty( $args['a3-portfolio'] ) && isset($args['portfolio_cat']) && 'page' == $args['portfolio_cat'] ) {
$page = $args['a3-portfolio'];
$args = array();
$args['pagename'] = $portfolio_page_name;
$args['page'] = $page;
}
return $args;
}
public function mark_portfolio_query( $query ) {
if ( isset( $query->query_vars['post_type'] ) && ($query->query_vars['post_type'] == 'a3-portfolio') )
$query->is_a3_portfolio = true;
return $query;
}
/**
* start_the_query
*/
public function start_the_query() {
global $wp_query, $portfolio_page_id, $portfolio_query, $portfolio_query_vars, $portfolio_page_name,$portfolio_term_ids;
$number_portfolios = a3_portfolio_get_per_page();
$is_404 = false;
if ( null == $portfolio_query ) {
if( ( $wp_query->is_404 && !empty($wp_query->query_vars['paged']) ) || (isset( $wp_query->query['pagename']) && strpos( $wp_query->query['pagename'] , $portfolio_page_name ) !== false ) && !isset($wp_query->post)){
global $post;
$is_404 = true;
if ( !isset( $wp_query->query_vars['portfolio_cat'] ) )
$wp_query = new WP_Query('post_type=a3-portfolio&name='.$wp_query->query_vars['name']);
if ( isset( $wp_query->post->ID ) ) {
$post = $wp_query->post;
} else {
if ( ! is_array( $portfolio_query_vars ) ) {
$portfolio_query_vars = array();
}
$portfolio_query_vars['portfolio_cat'] = $wp_query->query_vars['name'];
}
}
if ( empty( $portfolio_query_vars ) ) {
$portfolio_query_vars = array(
'post_status' => 'publish, locked, private',
'post_parent' => 0,
'order' => apply_filters('portfolio_order','DESC')
);
if($wp_query->query_vars['preview'])
$portfolio_query_vars['post_status'] = 'any';
$portfolio_query_vars['orderby'] = 'post_date';
if ( isset( $wp_query->query_vars['portfolio_cat'] ) ) {
$portfolio_query_vars['portfolio_cat'] = $wp_query->query_vars['portfolio_cat'];
$portfolio_query_vars['taxonomy'] = get_query_var( 'taxonomy' );
$portfolio_query_vars['term'] = get_query_var( 'term' );
} else {
$portfolio_query_vars['post_type'] = 'a3-portfolio';
$portfolio_query_vars['pagename'] = $portfolio_page_name;
}
$portfolio_query_vars['nopaging'] = false;
$portfolio_query_vars['posts_per_page'] = $number_portfolios;
$portfolio_query_vars['paged'] = get_query_var('paged');
if ( isset( $portfolio_query_vars['paged'] ) && empty( $portfolio_query_vars['paged'] ) ) {
$portfolio_query_vars['paged'] = get_query_var('page');
}
add_filter( 'pre_get_posts', array( $this, 'generate_portfolio_query' ), 11 );
$portfolio_query = new WP_Query( $portfolio_query_vars );
}
}
if ( $is_404 || ( ( isset($portfolio_query->post_count) && $portfolio_query->post_count == 0 ) && isset($portfolio_query_vars['portfolio_cat'] ) ) ) {
$args = array_merge($portfolio_query->query, array('posts_per_page' => $number_portfolios, 'orderby' => 'post_date' ) );
$wp_query = new WP_Query($args);
if ( empty( $portfolio_query->posts ) ) {
$wp_query = new WP_Query( 'page_id='.$portfolio_page_id);
}
}
if ( isset( $wp_query->post->ID ) )
$post_id = $wp_query->post->ID;
else
$post_id = 0;
wp_reset_query();
}
public function portfolio_the_title( $title = '', $id = '' ) {
global $wp_query, $portfolio_page_id, $portfolio_cat_id, $portfolio_tag_id;
$post = get_post($id);
// If its the category page
if ( is_viewing_portfolio_taxonomy() && isset( $wp_query->posts[0] ) && $wp_query->posts[0]->post_title == $post->post_title && $wp_query->is_archive && !is_admin() && (isset($wp_query->query_vars['portfolio_cat']) || isset($wp_query->query_vars['portfolio_tag']))) {
if ( isset( $wp_query->query_vars['portfolio_cat'] ) ) {
$category = get_term_by('slug',$wp_query->query_vars['portfolio_cat'],'portfolio_cat');
$portfolio_cat_id = $category->term_id;
}
if ( isset( $wp_query->query_vars['portfolio_tag'] ) ) {
$category = get_term_by('slug',$wp_query->query_vars['portfolio_tag'],'portfolio_tag');
$portfolio_tag_id = $category->term_id;
}
remove_filter('the_title', array( $this, 'portfolio_the_title') );
}
//if this is paginated products_page
if ( $wp_query->in_the_loop && empty($category->name) && isset( $wp_query->query_vars['paged'] ) && $wp_query->query_vars['paged'] && isset( $wp_query->query_vars['page'] ) && $wp_query->query_vars['page'] && 'a3-portfolio' == $wp_query->query_vars['post_type']) {
$post = get_post( $portfolio_page_id );
$title = $post->post_title;
remove_filter( 'the_title', array( $this, 'portfolio_the_title') );
}
if ( ! empty( $category->name ) )
return '
'.$category->name.'
';
else
return $title;
}
public function portfolio_remove_page_from_query_string( $query_string ) {
global $portfolio_page_id;
$number_portfolios = a3_portfolio_get_per_page();
$portfolio_page = get_page( $portfolio_page_id );
if ( ! isset( $query_string['portfolio_cat'] ) && ! isset( $query_string['portfolio_tag'] ) && false === strpos( implode( ' ', $query_string ), $portfolio_page->post_name ) ) { return $query_string; }
if ( isset( $query_string['name'] ) && $query_string['name'] == 'page' && isset( $query_string['page'] ) ) {
unset( $query_string['name'] );
list( $delim, $page_index ) = explode( '/', $query_string['page'] );
$query_string['paged'] = $page_index;
}
if ( isset( $query_string['a3-portfolio'] ) && 'page' == $query_string['a3-portfolio'] ) {
$query_string['a3-portfolio'] = '';
}
if ( isset( $query_string['name'] ) && is_numeric( $query_string['name'] ) ) {
$query_string['paged'] = $query_string['name'];
$query_string['page'] = '/'.$query_string['name'];
$query_string['posts_per_page'] = $number_portfolios;
}
if ( isset( $query_string['a3-portfolio'] ) && is_numeric( $query_string['a3-portfolio'] ) ) {
unset( $query_string['a3-portfolio'] );
}
if ( isset( $query_string['portfolio_cat'] ) && 'page' == $query_string['portfolio_cat'] ) {
unset( $query_string['portfolio_cat'] );
}
if ( isset( $query_string['portfolio_tag'] ) && 'page' == $query_string['portfolio_tag'] ) {
unset( $query_string['portfolio_tag'] );
}
if ( isset( $query_string['name'] ) && is_numeric( $query_string['name'] ) ) {
unset( $query_string['name'] );
}
if ( isset( $query_string['term'] ) && 'page' == $query_string['term'] ) {
unset( $query_string['term'] );
unset( $query_string['taxonomy'] );
}
return $query_string;
}
public function generate_portfolio_query( $query ) {
global $wp_query;
remove_filter( 'pre_get_posts', array( $this, 'generate_portfolio_query' ), 11 );
$number_portfolios = a3_portfolio_get_per_page();
$query->query_vars['taxonomy'] = null;
$query->query_vars['term'] = null;
// default product selection
if ( $query->query_vars['pagename'] != '' ) {
$query->query_vars['post_type'] = 'a3-portfolio';
$query->query_vars['pagename'] = '';
$query->is_page = false;
$query->is_tax = false;
$query->is_archive = true;
$query->is_singular = false;
$query->is_single = false;
}
if ( isset( $query->query_vars['a3-portfolio'] ) && $query->query_vars['a3-portfolio'] != null && $query->query_vars['name'] != null ) {
unset( $query->query_vars['taxonomy'] );
unset( $query->query_vars['term'] );
$query->query_vars['post_type'] = 'a3-portfolio';
$query->is_tax = false;
$query->is_archive = true;
$query->is_singular = false;
$query->is_single = false;
}
if ( isset( $wp_query->query_vars['portfolio_cat'] ) && ! isset( $wp_query->query_vars['a3-portfolio'] ) ) {
$query->query_vars['portfolio_cat'] = $wp_query->query_vars['portfolio_cat'];
$query->query_vars['taxonomy'] = $wp_query->query_vars['taxonomy'];
$query->query_vars['term'] = $wp_query->query_vars['term'];
}
if ( isset( $wp_query->query_vars['portfolio_tag'] ) && ! isset( $wp_query->query_vars['a3-portfolio'] ) ) {
$query->query_vars['portfolio_tag'] = $wp_query->query_vars['portfolio_tag'];
$query->query_vars['taxonomy'] = $wp_query->query_vars['taxonomy'];
$query->query_vars['term'] = $wp_query->query_vars['term'];
}
$query->query_vars['posts_per_page'] = $number_portfolios;
if ( $number_portfolios < 0 ) {
$query->query_vars['nopaging'] = 1;
}
if ( isset( $_GET['items_per_page'] ) ) {
if ( is_numeric( $_GET['items_per_page'] ) ) {
$query->query_vars['posts_per_page'] = (int) $_GET['items_per_page'];
} elseif ( $_GET['items_per_page'] == 'all' ) {
$query->query_vars['posts_per_page'] = 1000000;
$query->query_vars['nopaging'] = 1;
}
}
return $query;
}
/**
* portfolio_the_category_template swaps the template used for product categories with pageif archive template is being used use
* @access public
*
* @since 3.8
* @param $template (string) template path
* @return $template (string)
*/
public function portfolio_the_category_template( $template ) {
global $wp_query;
//this bit of code makes sure we use a nice standard page template for our products
if ( is_viewing_portfolio_taxonomy() && false !== strpos( $template, 'archive' ) ) {
$template = str_ireplace( 'archive', 'page', $template );
}
return $template;
}
public function single_template( $content ) {
global $wpdb, $post, $wp_query, $is_IE;
//if we dont belong here exit out straight away
if ( ! isset( $wp_query->is_a3_portfolio ) && ! isset( $wp_query->query_vars['a3-portfolio'] ) ) return $content;
// If we are a single products page
if ( $wp_query->post->post_type == 'a3-portfolio' && ! is_archive() && $wp_query->post_count <= 1 ) {
remove_filter( 'the_content', array( $this, 'single_template'), 9 );
if ( isset( $wp_query->query_vars['preview'] ) && $wp_query->query_vars['preview'] )
$is_preview = 'true';
else
$is_preview = 'false';
$portfolio_temp_query = new WP_Query( array(
'p' => $wp_query->post->ID ,
'post_type' => 'a3-portfolio',
'posts_per_page' => 1,
'preview' => $is_preview
) );
list( $wp_query, $portfolio_temp_query ) = array( $portfolio_temp_query, $wp_query ); // swap the portfolio_temp_query object
ob_start();
a3_portfolio_get_template( 'single-portfolio.php' );
$content = ob_get_clean();
list( $wp_query, $portfolio_temp_query ) = array( $portfolio_temp_query, $wp_query ); // swap the portfolio_temp_query objects back
}
return $content;
}
// handles replacing the tags in the pages
public function portfolio_category_template( $content = '' ) {
global $wpdb, $wp_query, $portfolio_query, $portfolio_query_vars;
$output = '';
if ( preg_match( "/\[portfoliopage\]/", $content ) ) {
global $more, $is_IE ;
$more = 0;
remove_filter( 'the_content', 'wpautop' );
list($wp_query, $portfolio_query) = array( $portfolio_query, $wp_query ); // swap the wpsc_query object
$display_type = '';
$number_columns = a3_portfolio_get_col_per_row();
ob_start();
remove_action( 'a3rev_loop_after', 'responsi_pagination', 10, 0 );
if ( isset( $wp_query->query_vars['taxonomy'] ) && 'portfolio_cat' == $wp_query->query_vars['taxonomy'] ) {
a3_portfolio_get_template( 'taxonomy-portfolio_cat.php', array( 'number_columns' => $number_columns ) ) ;
} elseif ( isset( $wp_query->query_vars['taxonomy'] ) && 'portfolio_tag' == $wp_query->query_vars['taxonomy'] ) {
a3_portfolio_get_template( 'taxonomy-portfolio_tag.php', array( 'number_columns' => $number_columns ) ) ;
} else {
a3_portfolio_get_template( 'archive-portfolio.php', array( 'number_columns' => $number_columns ) ) ;
}
$is_single = false;
$output .= ob_get_clean();
list($wp_query, $portfolio_query) = array( $portfolio_query, $wp_query ); // swap the wpsc_query objects back
if ( $is_single == false ) {
$GLOBALS['post'] = $wp_query->post;
}
$wp_query->current_post = $wp_query->post_count;
return str_replace( '[portfoliopage]', $output, $content );
} elseif ( is_archive() && is_viewing_portfolio_taxonomy() ) {
remove_filter( 'the_content', 'wpautop' );
return $this->portfolio_category_template('[portfoliopage]');
} else {
return $content;
}
}
public function a3_portfolio_filter_template() {
add_filter( 'the_title', array( $this, 'a3_portfolio_filter_content_template' ), 1000 );
}
public function a3_portfolio_filter_content_template( $title ) {
add_filter( 'the_content', array( $this, 'portfolio_category_template' ), 1 );
add_filter( 'the_content', array( $this, 'single_template' ), 9 );
return $title;
}
}
global $a3_portfolio_template_loader;
$a3_portfolio_template_loader = new A3_Portfolio_Template_Loader();
?>