2005-01-07 23:01:59 +01:00
< ? php
2008-07-03 17:23:22 +02:00
/**
* WordPress Feed API
*
* Many of the functions used in here belong in The Loop , or The Loop for the
* Feeds .
*
* @ package WordPress
* @ subpackage Feed
*/
2005-01-07 23:01:59 +01:00
2008-07-03 17:23:22 +02:00
/**
* RSS container for the bloginfo function .
*
* You can retrieve anything that you can using the get_bloginfo () function .
* Everything will be stripped of tags and characters converted , when the values
* are retrieved for use in the feeds .
*
* @ since 1.5 . 1
* @ see get_bloginfo () For the list of possible values to display .
*
* @ param string $show See get_bloginfo () for possible values .
* @ return string
*/
2005-02-25 16:52:28 +01:00
function get_bloginfo_rss ( $show = '' ) {
$info = strip_tags ( get_bloginfo ( $show ));
2014-01-04 07:22:11 +01:00
/**
* Filter the bloginfo for use in RSS feeds .
*
* @ since 2.2 . 0
*
* @ see convert_chars ()
* @ see get_bloginfo ()
*
* @ param string $info Converted string value of the blog information .
* @ param string $show The type of blog information to retrieve .
*/
return apply_filters ( 'get_bloginfo_rss' , convert_chars ( $info ), $show );
2005-02-25 16:52:28 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display RSS container for the bloginfo function .
*
* You can retrieve anything that you can using the get_bloginfo () function .
* Everything will be stripped of tags and characters converted , when the values
* are retrieved for use in the feeds .
*
* @ since 0.71
* @ see get_bloginfo () For the list of possible values to display .
*
* @ param string $show See get_bloginfo () for possible values .
*/
2005-02-25 16:52:28 +01:00
function bloginfo_rss ( $show = '' ) {
2014-01-04 07:22:11 +01:00
/**
* Filter the bloginfo for display in RSS feeds .
*
* @ since 2.1 . 0
*
* @ see get_bloginfo ()
*
* @ param string $rss_container RSS container for the blog information .
* @ param string $show The type of blog information to retrieve .
*/
echo apply_filters ( 'bloginfo_rss' , get_bloginfo_rss ( $show ), $show );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve the default feed .
*
* The default feed is 'rss2' , unless a plugin changes it through the
* 'default_feed' filter .
*
2013-12-24 19:57:12 +01:00
* @ since 2.5 . 0
2008-07-03 17:23:22 +02:00
*
* @ return string Default feed , or for example 'rss2' , 'atom' , etc .
*/
2007-12-06 20:58:15 +01:00
function get_default_feed () {
2014-01-04 07:22:11 +01:00
/**
* Filter the default feed type .
*
* @ since 2.5 . 0
*
* @ param string $feed_type Type of default feed . Possible values include 'rss2' , 'atom' .
* Default 'rss2' .
*/
$default_feed = apply_filters ( 'default_feed' , 'rss2' );
2011-11-20 19:32:42 +01:00
return 'rss' == $default_feed ? 'rss2' : $default_feed ;
2007-12-06 20:58:15 +01:00
}
2015-06-14 20:37:24 +02:00
/**
* Get the timestamp of the most recently modified post from WP_Query
*
* If viewing a comment feed , the date of the most recently modified
* comment will be returned .
*
* @ since 4.3 . 0
*
* @ return string Date ( 'Y-m-d H:i:s' for use with mysql2date () )
*/
function get_last_build_date_feed () {
global $wp_query , $wpdb ;
if ( $wp_query -> have_posts () ) {
$post_ids = array ();
2015-06-18 20:36:25 +02:00
$post_times = array ();
2015-06-14 20:37:24 +02:00
foreach ( $wp_query -> posts as $post ) {
$post_ids [] = $post -> ID ;
$post_times [] = $post -> post_modified_gmt ;
}
$postids = implode ( " ',' " , $post_ids );
$max_post_time = max ( $post_times );
2015-06-16 22:01:25 +02:00
if ( $wp_query -> is_comment_feed () ) {
2015-06-14 20:37:24 +02:00
$max_comment_time = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT MAX(comment_date_gmt) FROM $wpdb->comments WHERE comment_post_ID IN ('%s') AND comment_approved = '1' " , $postids ) );
return max ( $max_post_time , $max_comment_time );
}
return $max_post_time ;
}
// Fallback to last time any post was modified or published.
return get_lastpostmodified ( 'GMT' );
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve the blog title for the feed title .
*
* @ since 2.2 . 0
*
2014-06-30 12:11:15 +02:00
* @ param string $sep Optional . How to separate the title . See wp_title () for more info .
2008-07-03 17:23:22 +02:00
* @ return string Error message on failure or blog title on success .
*/
2014-06-30 12:11:15 +02:00
function get_wp_title_rss ( $sep = '»' ) {
$title = wp_title ( $sep , false );
if ( is_wp_error ( $title ) ) {
2007-09-18 18:32:22 +02:00
return $title -> get_error_message ();
2014-06-30 12:11:15 +02:00
}
if ( $title && $sep && ' ' !== substr ( $title , 0 , 1 ) ) {
$title = " $sep " . $title ;
}
2014-01-04 07:22:11 +01:00
/**
* Filter the blog title for use as the feed title .
*
* @ since 2.2 . 0
*
* @ param string $title The current blog title .
* @ param string $sep Separator used by wp_title () .
*/
2013-08-06 20:41:10 +02:00
$title = apply_filters ( 'get_wp_title_rss' , $title , $sep );
2007-02-24 08:33:29 +01:00
return $title ;
}
2006-12-07 04:57:23 +01:00
2008-07-03 17:23:22 +02:00
/**
* Display the blog title for display of the feed title .
*
* @ since 2.2 . 0
* @ see wp_title () $sep parameter usage .
*
* @ param string $sep Optional .
*/
2013-08-06 20:41:10 +02:00
function wp_title_rss ( $sep = '»' ) {
2014-01-04 07:22:11 +01:00
/**
* Filter the blog title for display of the feed title .
*
* @ since 2.2 . 0
*
* @ see get_wp_title_rss ()
*
* @ param string $wp_title The current blog title .
* @ param string $sep Separator used by wp_title () .
*/
2013-08-06 20:41:10 +02:00
echo apply_filters ( 'wp_title_rss' , get_wp_title_rss ( $sep ), $sep );
2007-03-29 03:29:09 +02:00
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve the current post title for the feed .
*
* @ since 2.0 . 0
*
* @ return string Current post title .
*/
2005-12-15 23:20:06 +01:00
function get_the_title_rss () {
2005-01-07 23:01:59 +01:00
$title = get_the_title ();
2014-01-04 07:22:11 +01:00
/**
* Filter the post title for use in a feed .
*
2014-01-04 19:09:12 +01:00
* @ since 1.2 . 0
2014-01-04 07:22:11 +01:00
*
* @ param string $title The current post title .
*/
$title = apply_filters ( 'the_title_rss' , $title );
2005-12-15 23:20:06 +01:00
return $title ;
}
2008-07-03 17:23:22 +02:00
/**
* Display the post title in the feed .
*
* @ since 0.71
*/
2005-12-15 23:20:06 +01:00
function the_title_rss () {
echo get_the_title_rss ();
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
2009-09-28 16:36:48 +02:00
* Retrieve the post content for feeds .
2008-07-03 17:23:22 +02:00
*
2009-09-28 16:36:48 +02:00
* @ since 2.9 . 0
* @ see get_the_content ()
*
* @ param string $feed_type The type of feed . rss2 | atom | rss | rdf
2012-07-09 06:51:00 +02:00
* @ return string The filtered content .
2008-07-03 17:23:22 +02:00
*/
2009-09-28 16:36:48 +02:00
function get_the_content_feed ( $feed_type = null ) {
if ( ! $feed_type )
$feed_type = get_default_feed ();
2008-07-03 17:23:22 +02:00
2014-08-12 03:09:17 +02:00
/** This filter is documented in wp-includes/post-template.php */
2014-01-04 07:22:11 +01:00
$content = apply_filters ( 'the_content' , get_the_content () );
2005-01-07 23:01:59 +01:00
$content = str_replace ( ']]>' , ']]>' , $content );
2014-01-04 07:22:11 +01:00
/**
* Filter the post content for use in feeds .
*
* @ since 2.9 . 0
*
* @ param string $content The current post content .
* @ param string $feed_type Type of feed . Possible values include 'rss2' , 'atom' .
* Default 'rss2' .
*/
return apply_filters ( 'the_content_feed' , $content , $feed_type );
2009-09-28 16:36:48 +02:00
}
/**
* Display the post content for feeds .
*
* @ since 2.9 . 0
*
* @ param string $feed_type The type of feed . rss2 | atom | rss | rdf
*/
function the_content_feed ( $feed_type = null ) {
2010-07-06 22:41:07 +02:00
echo get_the_content_feed ( $feed_type );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the post excerpt for the feed .
*
* @ since 0.71
*/
2005-01-07 23:01:59 +01:00
function the_excerpt_rss () {
2007-09-13 23:27:26 +02:00
$output = get_the_excerpt ();
2014-01-04 07:22:11 +01:00
/**
* Filter the post excerpt for a feed .
*
2014-01-04 19:09:12 +01:00
* @ since 1.2 . 0
2014-01-04 07:22:11 +01:00
*
* @ param string $output The current post excerpt .
*/
echo apply_filters ( 'the_excerpt_rss' , $output );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the permalink to the post for use in feeds .
*
* @ since 2.3 . 0
*/
2007-08-21 20:27:45 +02:00
function the_permalink_rss () {
2014-01-04 07:22:11 +01:00
/**
* Filter the permalink to the post for use in feeds .
*
* @ since 2.3 . 0
*
* @ param string $post_permalink The current post permalink .
*/
echo esc_url ( apply_filters ( 'the_permalink_rss' , get_permalink () ) );
2010-05-26 19:47:29 +02:00
}
/**
* Outputs the link to the comments for the current post in an xml safe way
2010-06-02 22:04:07 +02:00
*
2010-05-26 19:47:29 +02:00
* @ since 3.0 . 0
* @ return none
*/
function comments_link_feed () {
2014-01-04 07:22:11 +01:00
/**
* Filter the comments permalink for the current post .
*
* @ since 3.6 . 0
*
* @ param string $comment_permalink The current comment permalink with
* '#comments' appended .
*/
2013-03-06 20:57:31 +01:00
echo esc_url ( apply_filters ( 'comments_link_feed' , get_comments_link () ) );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the feed GUID for the current comment .
*
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 0
2009-01-20 21:55:03 +01:00
*
* @ param int | object $comment_id Optional comment object or id . Defaults to global comment object .
2008-07-03 17:23:22 +02:00
*/
2009-01-20 21:55:03 +01:00
function comment_guid ( $comment_id = null ) {
2010-05-26 20:30:51 +02:00
echo esc_url ( get_comment_guid ( $comment_id ) );
2008-02-06 23:33:21 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve the feed GUID for the current comment .
*
2010-12-01 20:24:38 +01:00
* @ since 2.5 . 0
2008-07-03 17:23:22 +02:00
*
2009-01-20 21:55:03 +01:00
* @ param int | object $comment_id Optional comment object or id . Defaults to global comment object .
2014-12-01 02:34:24 +01:00
* @ return false | string false on failure or guid for comment on success .
2008-07-03 17:23:22 +02:00
*/
2009-01-20 21:55:03 +01:00
function get_comment_guid ( $comment_id = null ) {
$comment = get_comment ( $comment_id );
2008-02-06 23:33:21 +01:00
if ( ! is_object ( $comment ) )
return false ;
return get_the_guid ( $comment -> comment_post_ID ) . '#comment-' . $comment -> comment_ID ;
}
2008-07-03 17:23:22 +02:00
/**
* Display the link to the comments .
*
* @ since 1.5 . 0
*/
2005-01-31 11:06:12 +01:00
function comment_link () {
2014-01-04 07:22:11 +01:00
/**
* Filter the current comment ' s permalink .
*
* @ since 3.6 . 0
*
* @ see get_comment_link ()
*
* @ param string $comment_permalink The current comment permalink .
*/
2013-03-06 20:57:31 +01:00
echo esc_url ( apply_filters ( 'comment_link' , get_comment_link () ) );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve the current comment author for use in the feeds .
*
* @ since 2.0 . 0
*
* @ return string Comment Author
*/
2005-12-15 23:20:06 +01:00
function get_comment_author_rss () {
2014-01-04 07:22:11 +01:00
/**
* Filter the current comment author for use in a feed .
*
* @ since 1.5 . 0
*
* @ see get_comment_author ()
*
* @ param string $comment_author The current comment author .
*/
return apply_filters ( 'comment_author_rss' , get_comment_author () );
2005-12-15 23:20:06 +01:00
}
2006-12-07 04:57:23 +01:00
2008-07-03 17:23:22 +02:00
/**
* Display the current comment author in the feed .
*
* @ since 1.0 . 0
*/
2005-01-07 23:01:59 +01:00
function comment_author_rss () {
2005-12-15 23:20:06 +01:00
echo get_comment_author_rss ();
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the current comment content for use in the feeds .
*
* @ since 1.0 . 0
*/
2005-01-07 23:01:59 +01:00
function comment_text_rss () {
$comment_text = get_comment_text ();
2014-01-04 07:22:11 +01:00
/**
* Filter the current comment content for use in a feed .
*
* @ since 1.5 . 0
*
* @ param string $comment_text The content of the current comment .
*/
$comment_text = apply_filters ( 'comment_text_rss' , $comment_text );
2005-01-07 23:01:59 +01:00
echo $comment_text ;
}
2008-07-03 17:23:22 +02:00
/**
* Retrieve all of the post categories , formatted for use in feeds .
*
* All of the categories for the current post in the feed loop , will be
* retrieved and have feed markup added , so that they can easily be added to the
* RSS2 , Atom , or RSS1 and RSS0 . 91 RDF feeds .
*
* @ since 2.1 . 0
*
2009-11-17 17:27:36 +01:00
* @ param string $type Optional , default is the type returned by get_default_feed () .
2008-07-03 17:23:22 +02:00
* @ return string All of the post categories for displaying in the feed .
*/
2009-11-17 17:27:36 +01:00
function get_the_category_rss ( $type = null ) {
if ( empty ( $type ) )
$type = get_default_feed ();
2010-11-12 22:53:15 +01:00
$categories = get_the_category ();
2007-08-29 23:10:20 +02:00
$tags = get_the_tags ();
2006-10-13 15:49:39 +02:00
$the_list = '' ;
2007-08-29 23:10:20 +02:00
$cat_names = array ();
$filter = 'rss' ;
if ( 'atom' == $type )
$filter = 'raw' ;
if ( ! empty ( $categories ) ) foreach ( ( array ) $categories as $category ) {
2007-09-04 01:32:58 +02:00
$cat_names [] = sanitize_term_field ( 'name' , $category -> name , $category -> term_id , 'category' , $filter );
2007-08-29 23:10:20 +02:00
}
if ( ! empty ( $tags ) ) foreach ( ( array ) $tags as $tag ) {
2007-09-04 01:32:58 +02:00
$cat_names [] = sanitize_term_field ( 'name' , $tag -> name , $tag -> term_id , 'post_tag' , $filter );
2007-08-29 23:10:20 +02:00
}
$cat_names = array_unique ( $cat_names );
foreach ( $cat_names as $cat_name ) {
2006-10-13 15:49:39 +02:00
if ( 'rdf' == $type )
2009-03-10 19:25:04 +01:00
$the_list .= " \t \t <dc:subject><![CDATA[ $cat_name ]]></dc:subject> \n " ;
2007-09-01 10:33:08 +02:00
elseif ( 'atom' == $type )
2014-05-05 21:05:14 +02:00
$the_list .= sprintf ( '<category scheme="%1$s" term="%2$s" />' , esc_attr ( get_bloginfo_rss ( 'url' ) ), esc_attr ( $cat_name ) );
2006-10-13 15:49:39 +02:00
else
2009-04-24 18:57:27 +02:00
$the_list .= " \t \t <category><![CDATA[ " . @ html_entity_decode ( $cat_name , ENT_COMPAT , get_option ( 'blog_charset' ) ) . " ]]></category> \n " ;
2006-10-13 15:49:39 +02:00
}
2007-08-29 23:10:20 +02:00
2014-01-04 07:22:11 +01:00
/**
* Filter all of the post categories for display in a feed .
*
2014-01-04 19:09:12 +01:00
* @ since 1.2 . 0
2014-01-04 07:22:11 +01:00
*
* @ param string $the_list All of the RSS post categories .
* @ param string $type Type of feed . Possible values include 'rss2' , 'atom' .
* Default 'rss2' .
*/
return apply_filters ( 'the_category_rss' , $the_list , $type );
2006-09-26 20:05:06 +02:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the post categories in the feed .
*
* @ since 0.71
* @ see get_the_category_rss () For better explanation .
*
2009-11-17 17:27:36 +01:00
* @ param string $type Optional , default is the type returned by get_default_feed () .
2008-07-03 17:23:22 +02:00
*/
2009-11-17 17:27:36 +01:00
function the_category_rss ( $type = null ) {
2006-09-26 20:05:06 +02:00
echo get_the_category_rss ( $type );
2005-01-07 23:01:59 +01:00
}
2008-07-03 17:23:22 +02:00
/**
* Display the HTML type based on the blog setting .
*
* The two possible values are either 'xhtml' or 'html' .
*
* @ since 2.2 . 0
*/
2007-01-25 09:37:26 +01:00
function html_type_rss () {
2007-01-25 09:48:18 +01:00
$type = get_bloginfo ( 'html_type' );
2007-03-07 06:29:15 +01:00
if ( strpos ( $type , 'xhtml' ) !== false )
2007-01-25 09:37:26 +01:00
$type = 'xhtml' ;
else
$type = 'html' ;
echo $type ;
}
2008-07-03 17:23:22 +02:00
/**
* Display the rss enclosure for the current post .
*
* Uses the global $post to check whether the post requires a password and if
* the user has the password for the post . If not then it will return before
* displaying .
*
* Also uses the function get_post_custom () to get the post 's ' enclosure '
* metadata field and parses the value to display the enclosure ( s ) . The
* enclosure ( s ) consist of enclosure HTML tag ( s ) with a URI and other
* attributes .
*
* @ since 1.5 . 0
*/
2005-01-07 23:01:59 +01:00
function rss_enclosure () {
2008-09-03 21:54:14 +02:00
if ( post_password_required () )
2006-10-13 15:49:39 +02:00
return ;
2005-03-22 18:49:19 +01:00
2008-08-06 22:31:54 +02:00
foreach ( ( array ) get_post_custom () as $key => $val ) {
2007-02-24 00:47:57 +01:00
if ( $key == 'enclosure' ) {
2008-08-06 22:31:54 +02:00
foreach ( ( array ) $val as $enc ) {
2009-02-21 07:14:52 +01:00
$enclosure = explode ( " \n " , $enc );
2008-12-09 19:03:31 +01:00
2013-05-10 03:39:30 +02:00
// only get the first element, e.g. audio/mpeg from 'audio/mpeg mpga mp2 mp3'
2009-02-21 07:14:52 +01:00
$t = preg_split ( '/[ \t]/' , trim ( $enclosure [ 2 ]) );
2008-12-09 19:03:31 +01:00
$type = $t [ 0 ];
2014-01-04 07:22:11 +01:00
/**
* Filter the RSS enclosure HTML link tag for the current post .
*
* @ since 2.2 . 0
*
* @ param string $html_link_tag The HTML link tag with a URI and other attributes .
*/
echo apply_filters ( 'rss_enclosure' , '<enclosure url="' . trim ( htmlspecialchars ( $enclosure [ 0 ] ) ) . '" length="' . trim ( $enclosure [ 1 ] ) . '" type="' . $type . '" />' . " \n " );
2005-01-07 23:01:59 +01:00
}
}
}
}
2008-07-03 17:23:22 +02:00
/**
* Display the atom enclosure for the current post .
*
* Uses the global $post to check whether the post requires a password and if
* the user has the password for the post . If not then it will return before
* displaying .
*
* Also uses the function get_post_custom () to get the post 's ' enclosure '
* metadata field and parses the value to display the enclosure ( s ) . The
* enclosure ( s ) consist of link HTML tag ( s ) with a URI and other attributes .
*
* @ since 2.2 . 0
*/
2007-02-24 00:47:57 +01:00
function atom_enclosure () {
2008-09-03 21:54:14 +02:00
if ( post_password_required () )
2007-02-24 00:47:57 +01:00
return ;
2008-08-06 22:31:54 +02:00
foreach ( ( array ) get_post_custom () as $key => $val ) {
2007-02-24 00:47:57 +01:00
if ( $key == 'enclosure' ) {
2008-08-06 22:31:54 +02:00
foreach ( ( array ) $val as $enc ) {
2012-01-09 22:20:51 +01:00
$enclosure = explode ( " \n " , $enc );
2014-01-04 07:22:11 +01:00
/**
* Filter the atom enclosure HTML link tag for the current post .
*
* @ since 2.2 . 0
*
* @ param string $html_link_tag The HTML link tag with a URI and other attributes .
*/
echo apply_filters ( 'atom_enclosure' , '<link href="' . trim ( htmlspecialchars ( $enclosure [ 0 ] ) ) . '" rel="enclosure" length="' . trim ( $enclosure [ 1 ] ) . '" type="' . trim ( $enclosure [ 2 ] ) . '" />' . " \n " );
2007-02-24 00:47:57 +01:00
}
}
}
}
2007-10-19 17:42:30 +02:00
/**
2008-07-03 17:23:22 +02:00
* Determine the type of a string of data with the data formatted .
2007-12-28 22:21:50 +01:00
*
* Tell whether the type is text , html , or xhtml , per RFC 4287 section 3.1 .
2007-10-19 17:42:30 +02:00
*
* In the case of WordPress , text is defined as containing no markup ,
* xhtml is defined as " well formed " , and html as tag soup ( i . e . , the rest ) .
*
* Container div tags are added to xhtml values , per section 3.1 . 1.3 .
*
2007-12-28 22:21:50 +01:00
* @ link http :// www . atomenabled . org / developers / syndication / atom - format - spec . php #rfc.section.3.1
*
2013-12-24 19:57:12 +01:00
* @ since 2.5 . 0
2007-10-19 17:42:30 +02:00
*
2008-07-03 17:23:22 +02:00
* @ param string $data Input string
* @ return array array ( type , value )
2007-10-19 17:42:30 +02:00
*/
function prep_atom_text_construct ( $data ) {
if ( strpos ( $data , '<' ) === false && strpos ( $data , '&' ) === false ) {
return array ( 'text' , $data );
}
$parser = xml_parser_create ();
xml_parse ( $parser , '<div>' . $data . '</div>' , true );
$code = xml_get_error_code ( $parser );
xml_parser_free ( $parser );
if ( ! $code ) {
2007-12-28 22:21:50 +01:00
if ( strpos ( $data , '<' ) === false ) {
return array ( 'text' , $data );
} else {
$data = " <div xmlns='http://www.w3.org/1999/xhtml'> $data </div> " ;
return array ( 'xhtml' , $data );
}
2007-10-19 17:42:30 +02:00
}
if ( strpos ( $data , ']]>' ) == false ) {
return array ( 'html' , " <![CDATA[ $data ]]> " );
} else {
return array ( 'html' , htmlspecialchars ( $data ));
}
}
2008-03-11 19:18:22 +01:00
/**
2008-07-03 17:23:22 +02:00
* Display the link for the currently displayed feed in a XSS safe way .
2008-03-11 19:18:22 +01:00
*
2008-07-03 17:23:22 +02:00
* Generate a correct link for the atom : self element .
2008-03-11 19:18:22 +01:00
*
2013-12-24 19:57:12 +01:00
* @ since 2.5 . 0
2008-03-11 19:18:22 +01:00
*/
function self_link () {
2010-01-04 18:23:29 +01:00
$host = @ parse_url ( home_url ());
2014-01-04 07:22:11 +01:00
/**
* Filter the current feed URL .
*
* @ since 3.6 . 0
*
* @ see set_url_scheme ()
* @ see wp_unslash ()
*
* @ param string $feed_link The link for the feed with set URL scheme .
*/
2013-03-03 17:30:38 +01:00
echo esc_url ( apply_filters ( 'self_link' , set_url_scheme ( 'http://' . $host [ 'host' ] . wp_unslash ( $_SERVER [ 'REQUEST_URI' ] ) ) ) );
2008-03-11 19:18:22 +01:00
}
2009-01-19 06:04:58 +01:00
/**
* Return the content type for specified feed type .
*
* @ since 2.8 . 0
*/
function feed_content_type ( $type = '' ) {
if ( empty ( $type ) )
$type = get_default_feed ();
$types = array (
2009-05-16 07:15:21 +02:00
'rss' => 'application/rss+xml' ,
'rss2' => 'application/rss+xml' ,
'rss-http' => 'text/xml' ,
2009-01-19 06:04:58 +01:00
'atom' => 'application/atom+xml' ,
2013-12-04 23:24:10 +01:00
'rdf' => 'application/rdf+xml'
2009-01-19 06:04:58 +01:00
);
$content_type = ( ! empty ( $types [ $type ]) ) ? $types [ $type ] : 'application/octet-stream' ;
2014-01-04 07:22:11 +01:00
/**
* Filter the content type for a specific feed type .
*
* @ since 2.8 . 0
*
* @ param string $content_type Content type indicating the type of data that a feed contains .
* @ param string $type Type of feed . Possible values include 'rss2' , 'atom' .
* Default 'rss2' .
*/
2009-01-19 06:04:58 +01:00
return apply_filters ( 'feed_content_type' , $content_type , $type );
}
2009-02-28 02:50:47 +01:00
/**
* Build SimplePie object based on RSS or Atom feed from URL .
*
2013-12-24 19:57:12 +01:00
* @ since 2.8 . 0
2009-02-28 02:50:47 +01:00
*
2013-04-22 22:24:41 +02:00
* @ param mixed $url URL of feed to retrieve . If an array of URLs , the feeds are merged
* using SimplePie ' s multifeed feature .
* See also { @ link http:// simplepie . org / wiki / faq / typical_multifeed_gotchas }
*
2009-02-28 02:50:47 +01:00
* @ return WP_Error | SimplePie WP_Error object on failure or SimplePie object on success
*/
2013-04-22 22:24:41 +02:00
function fetch_feed ( $url ) {
2013-09-25 02:18:11 +02:00
require_once ( ABSPATH . WPINC . '/class-feed.php' );
2009-02-27 20:32:50 +01:00
$feed = new SimplePie ();
2012-08-29 02:25:52 +02:00
2012-11-22 08:23:43 +01:00
$feed -> set_sanitize_class ( 'WP_SimplePie_Sanitize_KSES' );
// We must manually overwrite $feed->sanitize because SimplePie's
// constructor sets it before we have a chance to set the sanitization class
$feed -> sanitize = new WP_SimplePie_Sanitize_KSES ();
2012-11-15 10:51:02 +01:00
$feed -> set_cache_class ( 'WP_Feed_Cache' );
$feed -> set_file_class ( 'WP_SimplePie_File' );
2012-08-29 02:25:52 +02:00
2013-04-22 22:24:41 +02:00
$feed -> set_feed_url ( $url );
2014-01-04 07:22:11 +01:00
/** This filter is documented in wp-includes/class-feed.php */
2012-09-25 07:26:19 +02:00
$feed -> set_cache_duration ( apply_filters ( 'wp_feed_cache_transient_lifetime' , 12 * HOUR_IN_SECONDS , $url ) );
2014-01-04 07:22:11 +01:00
/**
* Fires just before processing the SimplePie feed object .
*
* @ since 3.0 . 0
*
* @ param object & $feed SimplePie feed object , passed by reference .
* @ param mixed $url URL of feed to retrieve . If an array of URLs , the feeds are merged .
*/
2009-12-22 13:48:40 +01:00
do_action_ref_array ( 'wp_feed_options' , array ( & $feed , $url ) );
2009-02-27 20:32:50 +01:00
$feed -> init ();
2015-06-16 22:01:25 +02:00
$feed -> set_output_encoding ( get_option ( 'blog_charset' ) );
2009-02-27 20:32:50 +01:00
$feed -> handle_content_type ();
2009-02-28 02:50:47 +01:00
if ( $feed -> error () )
2013-04-22 22:24:41 +02:00
return new WP_Error ( 'simplepie-error' , $feed -> error () );
2009-02-28 02:50:47 +01:00
2009-02-27 20:32:50 +01:00
return $feed ;
}