Current File : /home/aventura/www/site/wp-content/themes/kleo/lib/portfolio.php |
<?php
/*
*
* Portfolio Items Functions
* KLEO Framework
*
*/
/* Register Custom Post Type
* ==================================================
*/
class Portfolio_Post_Type extends Post_types {
public function __construct() {
$this->labels = array();
$portfolio_name = sq_option( 'portfolio_name', 'Portfolio' );
$this->labels['portfolio'] = array(
'singular' => __( 'Portfolio item', 'kleo_framework' ),
'plural' => __( $portfolio_name, 'kleo_framework' ),
'menu' => __( 'Portfolio', 'kleo_framework' ),
);
add_action( 'init', array( &$this, 'setup_post_type' ), 7 );
}
/**
* Setup Portfolio post type
* @since 1.5
* @return void
*/
public function setup_post_type() {
$has_archive = sq_option( 'portfolio_custom_archive', '0' ) == '1' ? false : true;
/* Default WordPress post archive page */
if ( $has_archive ) {
$slug = sq_option( 'portfolio_slug', 'portfolio' );
$slug = apply_filters( 'kleo_portfolio_slug', $slug );
} /* Custom page for archive */
else {
$page_id = sq_option( 'portfolio_page' );
$page = get_post( $page_id );
$slug = $page->post_name;
}
$args = array(
'labels' => $this->get_labels( 'portfolio', $this->labels['portfolio']['singular'], $this->labels['portfolio']['plural'], $this->labels['portfolio']['menu'] ),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_icon' => 'dashicons-format-image',
'query_var' => true,
'rewrite' => array(
'slug' => esc_attr( $slug ),
'feeds' => true,
'with_front' => false,
),
'has_archive' => $has_archive,
'hierarchical' => false,
'menu_position' => 20, // Below "Pages"
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments', 'custom-fields' ),
);
register_post_type( 'portfolio', $args );
register_taxonomy_for_object_type( 'post_tag', 'portfolio' );
$args = array(
'label' => _x( 'Portfolio Categories', 'category label', 'kleo_framework' ),
'singular_label' => _x( 'Portfolio Category', 'category singular label', 'kleo_framework' ),
'public' => true,
'hierarchical' => true,
'show_ui' => true,
'show_in_nav_menus' => false,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array(
'slug' => apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ),
'with_front' => false,
'hierarchical' => true,
),
'query_var' => true,
);
register_taxonomy( 'portfolio-category', 'portfolio', $args );
} // End setup_portfolio_post_type()
}
$kleo_portfolio = new Portfolio_Post_Type();
Kleo::set_module( 'portfolio', $kleo_portfolio );
add_action( 'wp_ajax_nopriv_portfolio_items', 'sq_portfolio_ajax' );
add_action( 'wp_ajax_portfolio_items', 'sq_portfolio_ajax' );
function sq_portfolio_ajax() {
// Check the nonce, if it fails the function will break
check_ajax_referer( 'kleo-ajax-portfolio-nonce', 'security' );
/* If not our action, bail out */
if ( ! isset( $_POST['action'] ) || 'portfolio_items' != $_POST['action'] ) {
return false;
}
$cat_id = $_POST['pid'];
$count_id = (int) $_POST['pitem'];
$post_id = $_POST['post_id'];
$cat = get_term_by( 'id', $cat_id, apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ) );
$args = get_transient( 'kleo_portfolio_' . $post_id . '_' . $count_id );
if ( $args ) {
$args = maybe_unserialize( $args );
}
if ( ! is_array( $args ) ) {
wp_send_json_error( array( 'message' => __( 'Something went wrong. Please reload page.', 'kleo_framework' ) ) );
exit;
}
$args['filter'] = '';
$args['category'] = $cat->slug;
if ( isset( $_POST['url'] ) ) {
$str_url = $_POST['url'];
$str_arr = explode( '/', $str_url );
$found = 0;
foreach ( $str_arr as $index => $value ) {
if ( 'page' == $value ) {
$found = $index;
}
}
if ( 0 !== $found ) {
$place = $found + 1;
$paged = $str_arr[ $place ];
$args['paged'] = $paged;
}
}
$items = call_user_func_array( 'kleo_portfolio_items', $args );
wp_send_json_success( array( 'message' => $items ) );
exit;
}
/* PORTFOLIO ITEMS
================================================== */
if ( ! function_exists( 'kleo_portfolio_items' ) ) {
function kleo_portfolio_items(
$display_type = 'default',
$title_style = 'normal',
$columns = 4,
$item_count = null,
$pagination = 'no',
$filter = 'yes',
$excerpt = 'yes',
$img_width = '',
$img_height = '',
$category = '',
$exclude_categories = array(),
$ajax = false,
$paged = '' ) {
/* OUTPUT VARIABLE
================================================== */
$portfolio_items_output = '';
$count = 0;
/* CATEGORY SLUG
================================================== */
if ( $category == 'All' || $category == 'all' ) {
$category = '';
}
$category_slug = str_replace( '_', '-', $category );
/* PORTFOLIO QUERY
================================================== */
if ( '' == $paged ) {
if ( get_query_var( 'paged' ) ) {
$paged = get_query_var( 'paged' );
} elseif ( get_query_var( 'page' ) ) {
$paged = get_query_var( 'page' );
} else {
$paged = 1;
}
}
if ( '' == $exclude_categories ) {
$exclude_categories = array();
}
$portfolio_args = array(
'post_type' => 'portfolio',
'post_status' => 'publish',
'paged' => $paged,
apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ) => $category_slug,
'posts_per_page' => $item_count,
'tax_query' => array(
array(
'taxonomy' => apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ),
'field' => 'id',
'terms' => $exclude_categories,
'operator' => 'NOT IN',
),
),
);
$portfolio_args = apply_filters( 'portfolio_args', $portfolio_args );
$portfolio_items = new WP_Query( $portfolio_args );
/* Class config
================================================== */
$classes = '';
$classes .= ' ' . $display_type . '-style';
if ( $display_type == 'overlay' ) {
if ( $title_style == 'hover' ) {
$classes .= ' anim-title';
}
}
if ( $excerpt == 'no' ) {
$classes .= ' hide-excerpt';
}
$classes .= ' per-row-' . $columns;
/* IMAGE SIZE
* Set global variables to be available in the portfolio template part
================================================== */
if ( $img_width != "" && $img_height != '' ) {
global $portfolio_img_width, $portfolio_img_height;
$portfolio_img_width = $img_width;
$portfolio_img_height = $img_height;
}
/* ITEMS OUTPUT
================================================== */
if ( $ajax ) {
global $portfolio_count;
$portfolio_count++;
$all_options = compact(
'display_type',
'title_style',
'columns',
'item_count',
'pagination',
'filter',
'excerpt',
'img_width',
'img_height',
'category',
'exclude_categories',
'ajax'
);
set_transient( 'kleo_portfolio_' . get_the_ID() . '_' . $portfolio_count, serialize( $all_options ) );
} else {
$portfolio_count = 0;
}
if (defined('DOING_AJAX') && DOING_AJAX) {
/* it's an AJAX call */
} else {
$portfolio_items_output .= '<div class="portfolio-data" style="display: none;">';
$portfolio_items_output .= wp_nonce_field( 'kleo-ajax-portfolio-nonce', 'portfolio-security', true, false );
$portfolio_items_output .= '<input type="hidden" name="pitem" value="' . $portfolio_count . '">';
$portfolio_items_output .= '<input type="hidden" name="post_id" value="' . get_the_ID() . '">';
$portfolio_items_output .= '</div>';
}
if ( 'yes' == $filter ) {
$portfolio_items_output .= kleo_portfolio_filter( $category, $exclude_categories, $ajax );
}
$portfolio_items_output .= '<div class="portfolio-wrapper">';
$portfolio_items_output .= '<ul class="portfolio-items responsive-cols kleo-masonry ' . $classes . '">' . "\n";
$cats = array();
while ( $portfolio_items->have_posts() ) : $portfolio_items->the_post();
if ( 'yes' == $filter ) {
$post_categories = wp_get_post_categories( get_the_ID() );
foreach ( $post_categories as $c ) {
$cat = get_category( $c );
$cats[ $cat->slug ] = $cat->slug ;
}
}
ob_start();
get_template_part( 'page-parts/portfolio-masonry' );
$portfolio_items_output .= ob_get_clean();
$count ++;
endwhile;
wp_reset_postdata();
$portfolio_items_output .= '</ul>' . "\n";
/* PAGINATION OUTPUT
================================================== */
if ( 'yes' == $pagination ) {
$class_prefix = '';
if ( $ajax ) {
$class_prefix = 'ajax-';
}
$portfolio_items_output .= '<div class="'. $class_prefix .'pagination-wrap">';
$portfolio_items_output .= kleo_pagination( $portfolio_items->max_num_pages, false, $paged );
$portfolio_items_output .= '</div>';
}
$portfolio_items_output .= '</div>';
/* FUNCTION OUTPUT
================================================== */
return $portfolio_items_output;
}
}
/* PORTFOLIO FILTER
================================================== */
if ( ! function_exists( 'kleo_portfolio_filter' ) ) {
function kleo_portfolio_filter( $parent_category = '', $exclude_categories = array(), $ajax = false ) {
$filter_output = $tax_terms = '';
if ( $parent_category == '' || $parent_category == 'all' ) {
$tax_terms = kleo_get_category_list( apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ), 0 );
} else {
$tax_terms = kleo_get_category_list( apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ), 0, $parent_category );
}
$class_prefix = '';
if ( $ajax ) {
$class_prefix = 'ajax-';
}
$filter_output .= '<div class="' . $class_prefix . 'filter-wrap row clearfix">' . "\n";
$filter_output .= '<ul class="portfolio-filter-tabs bar-styling filtering col-sm-12 clearfix">' . "\n";
$filter_output .= '<li class="all selected"><a data-filter="*" href="#"><span class="item-name">' . __( 'All', 'kleo_framework' ) . '</span></a></li>' . "\n";
foreach ( $tax_terms as $tax_term ) {
$term = get_term_by( 'slug', $tax_term, apply_filters( 'kleo_portfolio_cat_slug', 'portfolio-category' ) );
if ( $term && ! in_array( $term->term_id, $exclude_categories ) ) {
$filter_output .= '<li><a href="#" data-filter=".' . $term->slug . '" data-id="' . $term->term_id . '"><span class="item-name">' . $term->name . '</span></a></li>' . "\n";
}
}
$filter_output .= '</ul></div>' . "\n";
return $filter_output;
}
}
// Add portfolio meta box
add_filter( 'kleo_meta_boxes', 'kleo_portfolio_meta' );
function kleo_portfolio_meta( $meta_boxes ) {
$prefix = '_kleo_';
$meta_boxes[] = array(
'id' => 'theme_portfolio',
'title' => 'Portfolio settings',
'pages' => array( 'portfolio' ), // Post type
'context' => 'normal',
'priority' => 'default',
'show_names' => true, // Show field names on the left
'fields' => array(
array(
'name' => 'Show media on single item page',
'desc' => 'If you want to show image/gallery/video before the content on single portfolio page',
'id' => $prefix . 'portfolio_media_status',
'type' => 'select',
'options' => array(
array( 'value' => '', 'name' => 'Default' ),
array( 'value' => '1', 'name' => 'Yes' ),
array( 'value' => '0', 'name' => 'No' ),
),
'value' => '',
),
array(
'name' => 'Media type',
'desc' => '',
'id' => $prefix . 'media_type',
'type' => 'select',
'options' => array(
array( 'value' => '', 'name' => 'Featured Image' ),
array( 'value' => 'slider', 'name' => 'Image Slider' ),
array( 'value' => 'hosted_video', 'name' => 'Hosted Video' ),
array( 'value' => 'video', 'name' => 'oEmbed Video' ),
),
'value' => '',
),
array(
'name' => 'Slider',
'desc' => 'Used when you select the Gallery format. Upload an image or enter an URL.',
'id' => $prefix . 'slider',
'type' => 'file_repeat',
'allow' => 'url',
),
array(
'name' => 'Video oEmbed URL',
'desc' => 'Used when you select Video format. Enter a Youtube, Vimeo, Soundcloud, etc URL. See supported services at <a target="_blank" href="http://codex.wordpress.org/Embeds">http://codex.wordpress.org/Embeds</a>.',
'id' => $prefix . 'embed',
'type' => 'oembed',
),
array(
'name' => 'Video Self hosted(mp4)',
'desc' => 'Used when you select Video format. Upload your MP4 video file. Setting a self hosted video will ignore Video oEmbed above.',
'id' => $prefix . 'video_mp4',
'type' => 'file',
),
array(
'name' => 'Video Self hosted(ogv)',
'desc' => 'Used when you select Video format. Upload your OGV video file.',
'id' => $prefix . 'video_ogv',
'type' => 'file',
),
array(
'name' => 'Video Self hosted(webm)',
'desc' => 'Used when you select Video format. Upload your WEBM video file.',
'id' => $prefix . 'video_webm',
'type' => 'file',
),
array(
'name' => 'Video Self hosted Poster',
'desc' => 'Used to show before the video loads',
'id' => $prefix . 'video_poster',
'type' => 'file',
),
array(
'name' => 'Top bar status',
'desc' => 'Enable/disable site top bar',
'id' => $prefix . 'topbar_status',
'type' => 'select',
'options' => array(
array( 'value' => '', 'name' => 'Default' ),
array( 'value' => '1', 'name' => 'Visible' ),
array( 'value' => '0', 'name' => 'Hidden' ),
),
'value' => '',
),
array(
'name' => 'Hide Header',
'desc' => 'Check to hide whole header area',
'id' => $prefix . 'hide_header',
'type' => 'checkbox',
'value' => '1',
),
array(
'name' => 'Hide Footer',
'desc' => 'Check to hide whole footer area',
'id' => $prefix . 'hide_footer',
'type' => 'checkbox',
'value' => '1',
),
array(
'name' => 'Hide Socket area',
'desc' => 'Check to hide the area after footer that contains copyright info.',
'id' => $prefix . 'hide_socket',
'type' => 'checkbox',
'value' => '1',
),
array(
'name' => 'Custom Logo',
'desc' => 'Use a custom logo for this page only',
'id' => $prefix . 'logo',
'type' => 'file',
),
array(
'name' => 'Custom Logo Retina',
'desc' => 'Use a custom retina logo for this page only',
'id' => $prefix . 'logo_retina',
'type' => 'file',
),
array(
'name' => 'Transparent Main menu',
'desc' => 'Check to have Main menu background transparent.',
'id' => $prefix . 'transparent_menu',
'type' => 'checkbox',
'value' => '1'
),
array(
'name' => 'Hide the title',
'desc' => 'Check to hide the title when displaying the post/page',
'id' => $prefix . 'title_checkbox',
'type' => 'checkbox',
'value' => '1'
),
array(
'name' => 'Breadcrumb',
'desc' => '',
'id' => $prefix . 'hide_breadcrumb',
'type' => 'select',
'options' => array(
array( 'value' => '', 'name' => 'Default' ),
array( 'value' => '0', 'name' => 'Visible' ),
array( 'value' => '1', 'name' => 'Hidden' )
),
'value' => ''
),
array(
'name' => 'Hide information',
'desc' => 'Check to hide contact info in title section',
'id' => $prefix . 'hide_info',
'type' => 'checkbox',
'value' => '1'
)
),
);
return $meta_boxes;
}
add_filter( 'kleo_localize_app', 'kleo_portfolio_localize' );
function kleo_portfolio_localize( $obj_array ) {
if ( (int) sq_option( 'portfolio_video_height', 160 ) ) {
$obj_array['portfolioVideoHeight'] = (int) sq_option( 'portfolio_video_height', 160 );
}
return $obj_array;
}