Current Path : /var/test/www/ljmti/wp-content/plugins/masterslider/admin/includes/classes/ |
Current File : /var/test/www/ljmti/wp-content/plugins/masterslider/admin/includes/classes/class-msp-wp-post.php |
<?php /** * @package MasterSlider * @author averta [averta.net] * @license LICENSE.txt * @link http://masterslider.com * @copyright Copyright © 2014 averta */ // no direct access allowed if ( ! defined('ABSPATH') ) { die(); } if( ! class_exists( 'MSP_WP_Post' ) ) : /** * */ class MSP_WP_Post { var $dictionary = array(); var $recent_query = array(); function __construct() {} public function get_tax_term_dictionary(){ } public function get_taxonomy_name_label( $post_type, $hierarchical = true ){ $the_taxs = $this->get_taxonomies( $post_type ); $tax_list = array(); foreach ( $the_taxs as $tax_name => $tax ) { if( ( $hierarchical && $tax->hierarchical ) || ( ! $hierarchical && ! $tax->hierarchical ) ) $tax_list[ $tax_name ] = $tax->label; } return $tax_list; } public function get_custom_post_types(){ $custom_post_types = get_post_types( array( '_builtin' => false ), 'objects' ); return apply_filters( 'masterslider_get_custom_post_types', $custom_post_types ); } public function get_default_post_types(){ return get_post_types( array( '_builtin' => true ), 'objects' ); } public function get_taxonomies( $post ){ $custom_post_type_taxonomies = get_object_taxonomies( $post, 'objects' ); return apply_filters( 'masterslider_get_custom_post_type_taxonomies', $custom_post_type_taxonomies, $post ); } public function get_terms( $taxonomies ){ $terms = get_terms( $taxonomies ); return apply_filters( 'masterslider_get_custom_post_type_terms', $terms, $taxonomies ); } public function get_tax_terms( $taxonomies ) { $taxs_terms_list = array(); foreach ( $taxonomies as $tax_name => $tax_label ) { $tax_terms = $this->get_terms( $tax_name ); foreach ( $tax_terms as $tax_term ) { if ( is_object( $tax_term ) ) $tax_term = get_object_vars( $tax_term ); $taxs_terms_list[] = $tax_term; } } return $taxs_terms_list; } public function get_posts_query(){ $query = array(); $query['image_from'] = isset( $_REQUEST['slideImage'] ) ? $_REQUEST['slideImage'] : 'auto'; $query['excerpt_length'] = isset( $_REQUEST['excerpt_length'] ) ? $_REQUEST['excerpt_length'] : 100; $query['exclude_post_no_image'] = isset( $_REQUEST['exclude_post_no_image'] ) ? $_REQUEST['exclude_post_no_image'] : false; if( isset( $_REQUEST['post_type'] ) && ! empty( $_REQUEST['post_type'] ) ) $query['post_type'] = $_REQUEST['post_type']; if( isset( $_REQUEST['orderby'] ) ) $query['orderby'] = $_REQUEST['orderby']; if( isset( $_REQUEST['order'] ) ) $query['order'] = $_REQUEST['order']; $query['posts_per_page'] = isset( $_REQUEST['limit'] ) && ! empty( $_REQUEST['limit'] ) ? (int)$_REQUEST['limit'] : 10; if( isset( $_REQUEST['post__not_in'] ) && ! empty( $_REQUEST['post__not_in'] ) ) { $posts_not_in = explode( ',', $_REQUEST['post__not_in'] ); $query['post__not_in'] = array_filter( $posts_not_in ); } if( isset( $_REQUEST['post__in'] ) && ! empty( $_REQUEST['post__in'] ) ) { $posts_in = explode( ',', $_REQUEST['post__in'] ); $query['post__in'] = array_filter( $posts_in ); } if( isset( $_REQUEST['offset'] ) && ! empty( $_REQUEST['offset'] ) ) $query['offset'] = (int)$_REQUEST['offset']; $taxs_data = array(); if( isset( $_REQUEST['cats'] ) && ! empty( $_REQUEST['cats'] ) ) { $cats = explode( ',', $_REQUEST['cats'] ); $taxs_data = array_merge( $taxs_data, $cats ); } if( isset( $_REQUEST['tags'] ) && ! empty( $_REQUEST['tags'] ) ) { $tags = explode( ',', $_REQUEST['tags'] ); $taxs_data = array_merge( $taxs_data, $tags ); } $query['tax_query'] = $this->get_tax_query( $taxs_data ); $this->recent_query = $query; return $query; } // this method will be called by ajax handler public function parse_and_get_posts_result(){ $query = $this->get_posts_query(); return $this->get_posts_result( $query ); } // this method will be called by ajax handler public function parse_and_get_first_post_object(){ $query = $this->get_posts_query(); $objects = $this->get_post_object( $query, 1 ); return isset( $objects[0] ) ? $objects[0] : null; } public function get_first_post_template_tags_value(){ $post = $this->parse_and_get_first_post_object(); $args = array(); $args['image_from'] = isset( $_REQUEST['slideImage'] ) ? $_REQUEST['slideImage'] : 'auto'; return get_post_template_tags_value( $post, $args ); } protected function get_post_object( $args, $count = -1 ){ $th_wp_query = $this->get_query_results( $args ); $object_list = array(); if( $th_wp_query->have_posts() ) : while ( $th_wp_query->have_posts() ) : $th_wp_query->the_post(); if( 0 === $count ) break; $object_list[] = $th_wp_query->post; --$count; endwhile; endif; return $object_list; } /** * Generate a tax_query for using in WP_Query by tax_terms_ids * @param array $taxs_term_ids The taxonomy_term id * @return array The tax query */ public function get_tax_query( $taxs_term_ids ){ $tax_query = array(); $taxs_term_ids = array_filter( $taxs_term_ids ); // collect terms ids for each taxonomy $tax_term_archive = array(); foreach ( $taxs_term_ids as $tax_id ) { if( $the_tax_term_obj = $this->get_taxonomy_by_id( $tax_id ) ) $tax_term_archive[ $the_tax_term_obj->taxonomy ][] = $the_tax_term_obj->term_id; } // generate tax_query foreach ( $tax_term_archive as $taxonomy => $terms) { $tax_query[] = array( 'taxonomy' => $taxonomy, 'field' => 'id', 'terms' => $terms ); } // add relationship between each inner taxonomy array when there is more than one if( count( $tax_query ) > 1 ) $tax_query['relation'] = 'AND'; return $tax_query; } public function get_taxonomy_by_id( $term_taxonomy_id ) { global $wpdb; $taxonomy = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->term_taxonomy wta INNER JOIN $wpdb->terms wt ON (wta.term_id = wt.term_id) WHERE wta.term_taxonomy_id = %d", $term_taxonomy_id ) ); return $taxonomy; } public function get_posts_result( $args ){ $slide_image_target = isset( $args['image_from'] ) ? $args['image_from'] : 'auto'; $th_wp_query = $this->get_query_results( $args ); ob_start(); if( $th_wp_query->have_posts() ): while ( $th_wp_query->have_posts() ) : $th_wp_query->the_post(); $the_excerpt = get_the_excerpt(); $excerpt_length = isset( $args['excerpt_length'] ) ? $args['excerpt_length'] : ''; if( ! empty( $excerpt_length ) ) $the_excerpt = msp_get_trimmed_string( get_the_excerpt(), (int)$excerpt_length ); $the_media = ''; $the_media_src = msp_get_auto_post_thumbnail_url( $th_wp_query->post->ID, $slide_image_target ); if( ! empty( $the_media_src ) ) { $the_media_tag = msp_get_the_resized_image( $the_media_src, 80, 80, true, 100 ); $the_media = sprintf( '<div class="msp-entry-media" ><a href="%s" target="_blank">%s</a></div>', get_the_permalink(), $the_media_tag ); } ?> <article class="msp-post msp-post-<?php echo $th_wp_query->post->ID; ?> msp-post-<?php echo $th_wp_query->post->post_type; ?>"> <figure> <?php echo $the_media; ?> <figcaption> <div class="msp-entry-header"> <h4 class="msp-entry-title"><a href="<?php the_permalink(); ?>" target="_blank"><?php the_title(); ?></a></h4> </div> <div class="msp-entry-content"> <time datetime="<?php the_time('Y-m-d')?>" title="<?php the_time('Y-m-d')?>" ><?php the_time('F j, Y'); ?></time> ( <span class="ps-post-id">Post ID: <?php the_ID(); ?></span> ) <p><?php echo $the_excerpt; ?></p> </div> </figcaption> </figure> </article> <?php endwhile; endif; return ob_get_clean(); } public function get_query_results( $args ){ // default query args $defaults = array( 'orderby' => 'menu_order date', 'order' => 'DESC', 'post_status' => 'publish', 'posts_per_page'=> -1, 'offset' => 0 ); $args = wp_parse_args( $args, $defaults ); $th_wp_query = null; return new WP_Query( $args ); } } endif;