true, '_builtin' => false )); // If current page is archive page for a particular post type if ( is_post_type_archive() ) { // Remove post type from the post types list unset( $post_types[ get_post_type() ] ); } // Filter which post types to use // False: none // True: all // Array: particular post types // String: Single post type $post_type_feeds = apply_filters( 'wprss_cpt_feeds', FALSE ); switch( gettype( $post_type_feeds ) ) { // If it's a boolean ... case 'boolean': // If it is FALSE, exit function. Do nothing. Simply. if ( $post_type_feeds === FALSE ) return; // Otherwise, if TRUE, no further action is needed. break; // If it's a string ... case 'string': // If the post type does not exist, stop if ( !isset( $post_types[ $post_type_feeds ] ) ) return; // Otherwise, only use this post type $single = $post_types[ $post_type_feeds ]; $post_types = array( $single => $single ); break; // If it's an array ... case 'array': $post_types = array_intersect($post_types, $post_type_feeds); break; // If any other type, stop. default: return; } // Get only the values of the post types $post_types = array_values( $post_types ); // Get the site name and RSS feed URL, parsed as an array $siteName = get_bloginfo("name"); $feedURL = parse_url( get_bloginfo( 'rss2_url' ) ); // Foreach post type foreach ( $post_types as $i => $post_type ) { // Get its RSS feed URL $feed = get_post_type_archive_feed_link( $post_type ); // If it doesnt have one, use the interal WP feed URL using the post_type query arg if ( $feed === '' || !is_string( $feed ) ) { // Start with the feed URL of the site $feed = $feedURL; // If there are no query args, set to an emprty string if ( !isset( $feed['query'] ) ) $feed['query'] = ''; // If the query is not empty, we need to add an ampersand if ( strlen( $feed['query'] ) > 0 ) $feed['query'] .= '&'; // Add the post_type query arg $feed['query'] .= "post_type=$post_type"; // Unparse the URL array into a string $feed = wprss_unparse_url( $feed ); } // Get the Post Type Pretty Name $obj = get_post_type_object( $post_type ); $name = $obj->labels->name; // Print the tag $feedname = sprintf( __( '%1$s » %2$s Feed', WPRSS_TEXT_DOMAIN ), $siteName, $name ); printf( __( ''."\n", WPRSS_TEXT_DOMAIN ),"alternate","application/rss+xml", $feedname, $feed ); } } if ( !function_exists('wprss_unparse_url') ) { function wprss_unparse_url( $parsed_url ) { $scheme = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : ''; $host = isset($parsed_url['host']) ? $parsed_url['host'] : ''; $port = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : ''; $user = isset($parsed_url['user']) ? $parsed_url['user'] : ''; $pass = isset($parsed_url['pass']) ? ':' . $parsed_url['pass'] : ''; $pass = ($user || $pass) ? "$pass@" : ''; $path = isset($parsed_url['path']) ? $parsed_url['path'] : ''; $query = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : ''; $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : ''; return "$scheme$user$pass$host$port$path$query$fragment"; } }