get_results("SELECT term_id, taxonomy FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = {$ttid} LIMIT 1", ARRAY_A); if( empty( $term_info[0]['term_id']) ) return false; $term_ID = $term_info[0]['term_id']; $taxonomy_type = $term_info[0]['taxonomy']; return get_term_by('id', $term_ID, $taxonomy_type); } function powepress_get_program_title_by_term_taxonomy_id($ttid) { $FeedSettings = powerpress_get_settings('powerpress_taxonomy_'.$ttid); if( !empty($FeedSettings['title']) ) return $FeedSettings['title']; return; } function powerpress_get_program_title_by_taxonomy($term_id, $taxonomy = 'category') { $General = get_option('powerpress_general'); // Efficiently get the taxonomy program titles from WordPress if( !isset($GLOBALS['powerpress'][$taxonomy]) ) { $GLOBALS['powerpress'][$taxonomy] = array(); // SELECT all the caegory podcasting / taxonomy podasting feeds... if( $taxonomy == 'category' && isset($General['custom_cat_feeds']) ) { $Feeds = $General['custom_cat_feeds']; // Walk through the categories... foreach( $Feeds as $null=> $cat_id ) { $FeedSettings = get_option('powerpress_cat_feed_'.$cat_id); if( !empty($FeedSettings['title']) ) $GLOBALS['powerpress'][$taxonomy][ $cat_id ] = $FeedSettings['title']; } } else { $PowerPressTaxonomies = get_option('powerpress_taxonomy_podcasting'); if( !empty($PowerPressTaxonomies) ) { $query_in = ''; foreach( $PowerPressTaxonomies as $tt_id=> $null ) { if( !empty($query_in) ) $query_in .= ','; $query_in .= $tt_id; } if( !empty($query_in) ) { $terms = $wpdb->get_results("SELECT term_taxonomy_id, term_id, taxonomy FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id IN ($query_in)", ARRAY_A); foreach( $terms as $index=> $term_info ) { // TODO: We need to get term by the term_id and taxonomy $FeedSettings = powerpress_get_settings('powerpress_taxonomy_'.$term_info['term_taxonomy_id']); if( !empty($FeedSettings['title']) ) $GLOBALS['powerpress'][ $term_info['taxonomy'] ][ $term_info['term_id'] ] = $FeedSettings['title']; } } } } } if( !empty($GLOBALS['powerpress'][$taxonomy][$term_id]) ) return $GLOBALS['powerpress'][$taxonomy][$term_id]; if( !empty($General['program_title']) ) return $General['program_title']; // Get the default podcast title return ''; // REturn the blog title last resort } function powerpress_get_title_by_post_type($post_type, $slug='podcast') { } function powerpress_playlist_episodes($args) { global $wpdb; $return = array(); $defaults = array( 'limit' => 10, 'slug' => 'podcast', 'post_type'=>'post', 'category'=>'', 'taxonomy'=>'', 'tax_term'=>'', 'term_taxonomy_id'=>'', 'ids'=>'', 'order'=>'' ); $args = wp_parse_args( $args, $defaults ); /* handle taxonomy and post id's*/ if( empty($args['taxonomy']) && empty($args['tax_term']) && !empty($args['category']) ) { $args['taxonomy'] = 'category'; $args['tax_term'] = $args['category']; } $TaxonomyObj = false; if( !empty($args['term_taxonomy_id']) ) { $TaxonomyObj = powerpress_get_term_by_ttid( $args['term_taxonomy_id'] ); } if( empty($TaxonomyObj) && !empty($args['taxonomy']) && !empty($args['tax_term']) ) { if( preg_match('/^[0-9]*$/', $args['tax_term']) ) // If it is a numeric ID, lets try finding it by ID first... $TaxonomyObj = get_term_by('id', $args['tax_term'], $args['taxonomy']); if( empty($TaxonomyObj) ) $TaxonomyObj = get_term_by('name', $args['tax_term'], $args['taxonomy']); if( empty($TaxonomyObj) ) $TaxonomyObj = get_term_by('slug', $args['tax_term'], $args['taxonomy']); } // Start the SQL query $query = "SELECT p.ID, p.post_title, p.post_date, pm.meta_value "; $query .= "FROM {$wpdb->posts} AS p "; $query .= apply_filters( 'powerpress_join', "INNER JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id " ); if( !empty($TaxonomyObj->term_taxonomy_id) ) $query .= "INNER JOIN {$wpdb->term_relationships} AS tr ON p.ID = tr.object_id "; $query .= apply_filters( 'powerpress_where', "WHERE (pm.meta_key = %s) " ); $query .= "AND p.post_type = %s "; $query .= "AND p.post_status = 'publish' "; if( !empty($TaxonomyObj->term_taxonomy_id) ) { $query .= "AND tr.term_taxonomy_id = '". $TaxonomyObj->term_taxonomy_id ."' "; } if ( apply_filters( 'wpml_setting', false, 'setup_complete' ) ) { add_filter( 'powerpress_join', function( $join ) { global $wpdb; $join .= "JOIN {$wpdb->prefix}icl_translations ON element_type = CONCAT('post_', p.post_type) AND element_id = p.ID "; return $join; } ); add_filter( 'powerpress_where', function( $where ) { $lang = apply_filters( 'wpml_current_language', false ); $where .= "AND language_code = '$lang' "; return $where; } ); } $for_query = ''; if( !empty( $args['ids'] ) ) { // First santity check make sure we are only working with numbers.... if( preg_match('/^[0-9,\s]*$/', $args['ids']) ) { $ids = explode(',', preg_replace('/(\s)/', '', $args['ids']) ); foreach( $ids as $index=> $id ) { if( empty($id) ) continue; if( !empty($for_query) ) $for_query .= ', '; $for_query .= $id; } if( !empty($for_query) ) { $query .= "AND p.ID IN ($for_query) "; } } } $query .= "GROUP BY p.ID "; if( !empty($for_query) ) { $query .= "ORDER BY FIELD('id', $for_query) "; } else if ( !empty($args['order']) && strtolower($args['order']) == 'asc' ) { $query .= "ORDER BY p.post_date ASC "; } else { $query .= "ORDER BY p.post_date DESC "; } $query .= "LIMIT 0, %d"; $query = $wpdb->prepare($query, ($args['slug'] == 'podcast'?'enclosure': '_'.$args['slug'].':enclosure'), $args['post_type'], $args['limit'] ); $results_data = $wpdb->get_results($query, ARRAY_A); if( $results_data ) { foreach( $results_data as $null=> $row ) { if( empty($row['meta_value']) ) continue; $EnclosureData = powerpress_get_enclosure_data($row['ID'], $args['slug'], $row['meta_value']); $return[ $row['ID'] ] = array(); $return[ $row['ID'] ]['ID'] = $row['ID']; $return[ $row['ID'] ]['post_title'] = $row['post_title']; $return[ $row['ID'] ]['post_date'] = $row['post_date']; $return[ $row['ID'] ]['enclosure'] = $EnclosureData; } } return $return; } /** * Output the templates used by playlists. * */ function powerpress_underscore_playlist_templates() { ?> 'audio', // Already defined by the first episode type 'style' => 'light', /* */ 'tracklist' => true, /* always true */ 'tracknumbers' => true, /* always false for podcasting */ 'images' => true, // Used for PowerPress Playlist 'image' => '', // Used for PowerPress Playlist (specific image URL for default poster artwork 'artists' => true, // display the artist / author / talent name (Future use) 'itunes_subtitle'=>false, 'category'=>'', // Used for PowerPress Playlist (specify category ID, name or slug) 'term_id'=>'', // Used for PowerPress Playlist (specify term ID, name or slug) 'taxonomy'=>'', // Used for PowerPress Playlist (specify taxonomy name) 'term_taxonomy_id'=>'', // Used for PowerPress Playlist (specify term_taxonomy_id) 'program_titles_by_taxonomy'=>'', // e.g. category 'date' => true, // Display the date 'title' => true, // Dislay the title of episode 'links'=>true, // Link to episode page 'slug' => '', // Used for PowerPress Playlist 'feed' => '', // Used for PowerPress Playlist 'channel'=>'', // Used for PowerPress Playlist 'post_type' => 'post', // Used for PowerPress Playlist 'limit'=>10, // Used for PowerPress Playlist 'ids'=>'', // Used to specify specific post ids to assemble a player with specific episodes 'order'=>'' // Order of episodes, descending by default ), $attr, 'powerpressplaylist' ) ); if ( $type !== 'audio' ) { $type = 'video'; } $tracknumbers = false; //$images = true; $artists = true; // Program title $images = filter_var( $images, FILTER_VALIDATE_BOOLEAN ); $links = filter_var( $links, FILTER_VALIDATE_BOOLEAN ); $itunes_subtitle = filter_var( $itunes_subtitle, FILTER_VALIDATE_BOOLEAN ); $episode_title = filter_var( $title, FILTER_VALIDATE_BOOLEAN ); $date = filter_var( $date, FILTER_VALIDATE_BOOLEAN ); if( empty($slug) && !empty($feed) ) $slug = $feed; if( empty($slug) && !empty($channel) ) $slug = $channel; if( empty($slug) ) $slug = 'podcast'; $args = array( 'limit' => $limit, 'slug' => $slug, 'post_type'=>$post_type, 'category'=>$category, 'term_id'=>'', 'taxonomy'=>'', 'term_taxonomy_id'=>$term_taxonomy_id, 'ids'=>$ids, 'order'=>$order ); $episodes = powerpress_playlist_episodes( $args ); if ( empty( $episodes ) ) { return ''; } $ProgramSettings = false; // Get Podcast Settings...ssss if( !empty($post_type) ) { $PostTypeSettingsArray = get_option('powerpress_posttype_'.$post_type); if( isset($PostTypeSettingsArray[ $slug ]) && is_array($PostTypeSettingsArray[ $slug ] ) ) { $ProgramSettings = $PostTypeSettingsArray[ $slug ]; } } if( !empty($slug) && !$ProgramSettings ) $ProgramSettings = get_option('powerpress_feed_'.$slug); if( !empty($term_taxonomy_id) && !$ProgramSettings ) $ProgramSettings = get_option('powerpress_taxonomy_'.$term_taxonomy_id); if( empty($ProgramSettings) ) $ProgramSettings = get_option('powerpress_general'); $outer = 22; // default padding and border of wrapper $default_width = 640; $default_height = 360; $theme_width = empty( $content_width ) ? $default_width : ( $content_width - $outer ); $theme_height = empty( $content_width ) ? $default_height : round( ( $default_height * $theme_width ) / $default_width ); $data = compact( 'type' ); if( !empty($images) && empty($image) ) // If they specified images but did not specify a specific image in the shortcode... { if( !empty($ProgramSettings['rss2_image']) ) $image = $ProgramSettings['rss2_image']; else if( !empty($ProgramSettings['itunes_image']) ) $image = $ProgramSettings['itunes_image']; } // don't pass strings to JSON, will be truthy in JS // foreach ( array( 'tracklist', 'tracknumbers', 'images', 'artists' ) as $key ) { foreach ( array( 'tracklist', 'tracknumbers', 'images', 'artists', 'date', 'itunes_subtitle' ) as $key ) { $data[$key] = filter_var( $$key, FILTER_VALIDATE_BOOLEAN ); } // Set a global poster image if( !empty($image) ) { $data['poster'] = array( 'src'=>$image, 'width'=>'144', 'height'=>'144' ); } $tracks = array(); foreach ( $episodes as $episode ) { //$url = wp_get_attachment_url( $attachment->ID ); $url = $episode['enclosure']['url']; //$ftype = wp_check_filetype( $url, wp_get_mime_types() ); $track = array( 'src' => $url, 'type' => $episode['enclosure']['type'], 'title' => $episode['post_title'], 'caption' => $episode['post_title'], 'description' => $episode['post_title'] ); if( empty($episode_title) ) { $track['title'] = ''; } //$image = false; $episode_image = $image; if( $images && !empty($episode['enclosure']['image']) ) { $episode_image = $episode['enclosure']['image']; } else if( $images && !empty($episode['enclosure']['itunes_image']) ) { $episode_image = $episode['enclosure']['itunes_image']; } // enclosure $track['meta'] = array(); $track['meta']['artist'] = ('Talent Name'); // TODO $track['meta']['album'] = ('Podcast Title here'); // TODO if( $program_titles_by_taxonomy ) { $ObjectTerms = wp_get_object_terms( $episode['ID'], $program_titles_by_taxonomy); if(!empty($ObjectTerms) && !is_wp_error( $ObjectTerms ) && count($ObjectTerms) == 1 ) { $track['meta']['program_title'] = powerpress_get_program_title_by_taxonomy($ObjectTerms[0]->term_id, $program_titles_by_taxonomy); } } if( !empty($episode_title) ) $track['meta']['title'] = $episode['post_title']; if( !empty($itunes_subtitle) && !empty($episode['enclosure']['subtitle']) ) $track['meta']['itunes_subtitle'] = $episode['enclosure']['subtitle']; $track['meta']['genre'] = 'Podcast'; $track['meta']['year'] = mysql2date( 'Y', $episode['post_date'] ); // Episode year if( !empty($date) ) $track['meta']['date'] = mysql2date( get_option( 'date_format' ), $episode['post_date'] );// Get episode date $track['meta']['length_formatted'] = powerpress_readable_duration($episode['enclosure']['duration']); // $episode['enclosure']['duration']; if( $track['meta']['length_formatted'] == '0:00' ) $track['meta']['length_formatted'] = ''; // Make it empty if( !empty($links) ) $track['meta']['link'] = get_permalink( $episode['ID'] ); // 'http://www.google.com/'; if( $type == 'video' ) { $track['dimensions'] = array( 'original' => array('width'=>'100%', 'height'=>'100%' ), 'resized' => array('width'=>'100%', 'height'=>'100%' ) ); } /* //$meta = wp_get_attachment_metadata( $attachment->ID ); $meta = false; if ( ! empty( $meta ) ) { foreach ( wp_get_attachment_id3_keys( $attachment ) as $key => $label ) { if ( ! empty( $meta[ $key ] ) ) { $track['meta'][ $key ] = $meta[ $key ]; } } if ( 'video' === $type ) { if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) { $width = $meta['width']; $height = $meta['height']; $theme_height = round( ( $height * $theme_width ) / $width ); } else { $width = $default_width; $height = $default_height; } $track['dimensions'] = array( 'original' => compact( 'width', 'height' ), 'resized' => array( 'width' => $theme_width, 'height' => $theme_height ) ); } } */ if( !empty($episode_image) ) // !empty($image) ) { $src = $episode_image; $width = 144; $height = 144; if( $type == 'video' ) // image onlyl used for video $track['image'] = array('src'=>$src, 'width'=>'100%', 'height'=>'100%'); //$track['thumb'] = compact( 'src', 'width', 'height' ); $track['poster'] = compact( 'src', 'width', 'height' ); } $tracks[] = $track; } $data['tracks'] = $tracks; $safe_type = esc_attr( $type ); $safe_style = esc_attr( $style ); ob_start(); if ( 1 === $instance ) { do_action( 'powerpress_playlist_scripts', $type, $style ); } ?>
< controls="controls" preload="none" width="">>