function podlove_jetpack_remove_rss_icon()
{
    if (!method_exists('Jetpack_Site_Icon', 'init')) {
        return;
    }
    if (!($feed_slug = get_query_var('feed'))) {
        return;
    }
    if (!($feed = \Podlove\Model\Feed::find_one_by_slug($feed_slug))) {
        return;
    }
    remove_action('rss2_head', [Jetpack_Site_Icon::init(), 'rss2_icon']);
}
示例#2
0
文件: atom.php 项目: rthees/podlove
    public function __construct($feed_slug)
    {
        add_action('atom_ns', function () {
            echo 'xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"';
        });
        add_filter('feed_link', function ($output, $feed) use($feed_slug) {
            return get_bloginfo('url') . '/feed/' . $feed_slug . '/';
        }, 10, 2);
        $podcast = Model\Podcast::get_instance();
        $feed = Model\Feed::find_one_by_slug($feed_slug);
        $episode_asset = $feed->episode_asset();
        $file_type = $episode_asset->file_type();
        add_filter('podlove_feed_enclosure', function ($enclosure, $enclosure_url, $enclosure_file_size, $mime_type) {
            return sprintf('<link rel="enclosure" href="%s" length="%s" type="%s"/>', $enclosure_url, $enclosure_file_size, $mime_type);
        }, 10, 4);
        mute_feed_title();
        override_feed_title($feed);
        override_feed_language($feed);
        override_feed_head('atom_head', $podcast, $feed, $file_type);
        override_feed_entry('atom_entry', $podcast, $feed, $file_type);
        add_action('atom_head', function () use($podcast, $feed, $file_type) {
            ?>
			<link rel="self" type="application/atom+xml" title="<?php 
            echo $feed->title_for_discovery();
            ?>
" href="<?php 
            echo $feed->get_subscribe_url();
            ?>
" />
			<?php 
            $feeds = Model\Feed::all();
            foreach ($feeds as $other_feed) {
                if ($other_feed->id !== $feed->id) {
                    ?>
					<link rel="alternate" type="application/atom+xml" title="<?php 
                    echo $other_feed->title_for_discovery();
                    ?>
" href="<?php 
                    echo $other_feed->get_subscribe_url();
                    ?>
" />
					<?php 
                }
            }
        }, 9);
        $this->do_feed($feed);
    }
示例#3
0
文件: rss.php 项目: rthees/podlove
 public function __construct($feed_slug)
 {
     add_action('rss2_ns', function () {
         echo 'xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"';
     });
     $podcast = Model\Podcast::get_instance();
     $feed = Model\Feed::find_one_by_slug($feed_slug);
     $episode_asset = $feed->episode_asset();
     $file_type = $episode_asset->file_type();
     add_filter('podlove_feed_enclosure', function ($enclosure, $enclosure_url, $enclosure_file_size, $mime_type) {
         return sprintf('<enclosure url="%s" length="%s" type="%s" />', $enclosure_url, $enclosure_file_size, $mime_type);
     }, 10, 4);
     mute_feed_title();
     override_feed_title($feed);
     override_feed_language($feed);
     override_feed_head('rss2_head', $podcast, $feed, $file_type);
     override_feed_entry('rss2_item', $podcast, $feed, $file_type);
     $this->do_feed($feed);
 }
function override_feed_item_limit($limits)
{
    global $wp_query;
    if (!is_feed()) {
        return $limits;
    }
    if (!($feed = \Podlove\Model\Feed::find_one_by_slug(get_query_var('feed_slug')))) {
        return $limits;
    }
    $custom_limit = (int) $feed->limit_items;
    if ($custom_limit > 0) {
        return "LIMIT {$custom_limit}";
    } elseif ($custom_limit == 0) {
        return $limits;
        // WordPress default
    } else {
        return '';
        // no limit
    }
}
示例#5
0
文件: feeds.php 项目: rthees/podlove
    });
    add_filter('query_vars', function ($qv) {
        $qv[] = 'show_slug';
        $qv[] = 'feed_slug';
        return $qv;
    });
}
// Hooks:
// parse_query => query vars available
// wp => query_posts done
add_action('wp', function () {
    global $wp_query;
    if (!($feed_slug = get_query_var('feed_slug'))) {
        return;
    }
    if (!($feed = \Podlove\Model\Feed::find_one_by_slug($feed_slug))) {
        return;
    }
    $is_feedburner_bot = preg_match("/feedburner|feedsqueezer/i", $_SERVER['HTTP_USER_AGENT']);
    $is_manual_redirect = !isset($_REQUEST['redirect']) || $_REQUEST['redirect'] != "no";
    if (strlen($feed->redirect_url) > 0 && $is_manual_redirect && !$is_feedburner_bot) {
        header(sprintf("Location: %s", $feed->redirect_url), TRUE, 302);
        exit;
    } else {
        // make sure is_feed() returns true
        add_filter('the_content', function ($content) {
            global $wp_query;
            $wp_query->is_feed = true;
            return $content;
        });
        if ($feed->format === "rss") {
 function feed_head_contributors()
 {
     global $wp_query;
     $feed = \Podlove\Model\Feed::find_one_by_slug($wp_query->query_vars['feed']);
     if (!$feed) {
         return;
     }
     $contributor_xml = $this->prepare_contributions_for_feed(\Podlove\Modules\Contributors\Model\ShowContribution::all(), $feed);
     echo apply_filters('podlove_feed_head_contributors', $contributor_xml);
 }
 public static function prepare_feed($feed_slug)
 {
     global $wp_query;
     add_action('rss2_ns', function () {
         echo 'xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" ';
         echo 'xmlns:psc="http://podlove.org/simple-chapters" ';
         echo 'xmlns:content="http://purl.org/rss/1.0/modules/content/" ';
         echo 'xmlns:fh="http://purl.org/syndication/history/1.0" ';
     });
     $podcast = Model\Podcast::get();
     if (!($feed = Model\Feed::find_one_by_slug($feed_slug))) {
         self::wp_404();
     }
     if (!($episode_asset = $feed->episode_asset())) {
         self::wp_404();
     }
     $file_type = $episode_asset->file_type();
     add_filter('podlove_feed_enclosure', function ($enclosure, $enclosure_url, $enclosure_file_size, $mime_type, $media_file) {
         if ($enclosure_file_size < 0) {
             $enclosure_file_size = 0;
         }
         $dom = new \Podlove\DomDocumentFragment();
         $element = $dom->createElement('enclosure');
         $attributes = ['url' => $enclosure_url, 'length' => $enclosure_file_size, 'type' => $mime_type];
         $attributes = apply_filters('podlove_feed_enclosure_attributes', $attributes, $media_file);
         foreach ($attributes as $k => $v) {
             $element->setAttribute($k, $v);
         }
         $dom->appendChild($element);
         return (string) $dom;
     }, 10, 5);
     override_feed_title($feed);
     override_feed_description($feed);
     override_feed_language($feed);
     override_feed_head('rss2_head', $podcast, $feed, $file_type);
     override_feed_entry('rss2_item', $podcast, $feed, $file_type);
     add_action('rss2_item', function () {
         if (apply_filters('podlove_feed_show_summary', true)) {
             echo "<description><![CDATA[";
             \Podlove\Feeds\the_description();
             echo "]]></description>";
         }
     }, 9);
     add_action('rss2_head', function () use($podcast, $feed) {
         global $wp_query;
         $current_page = get_query_var('paged') ? get_query_var('paged') : 1;
         $feed_url_for_page = function ($page) use($feed) {
             $url = $feed->get_subscribe_url();
             if ($page > 0) {
                 $url .= '?paged=' . $page;
             }
             return $url;
         };
         if ($current_page < $wp_query->max_num_pages) {
             echo "\n\t" . sprintf('<atom:link rel="next" href="%s" />', $feed_url_for_page($current_page + 1));
         }
         if ($current_page > 2) {
             echo "\n\t" . sprintf('<atom:link rel="prev" href="%s" />', $feed_url_for_page($current_page - 1));
         } elseif ($current_page == 2) {
             echo "\n\t" . sprintf('<atom:link rel="prev" href="%s" />', $feed_url_for_page(0));
         }
         echo "\n\t" . sprintf('<atom:link rel="first" href="%s" />', $feed_url_for_page(0));
         if ($wp_query->max_num_pages > 1) {
             echo "\n\t" . sprintf('<atom:link rel="last" href="%s" />', $feed_url_for_page($wp_query->max_num_pages));
         }
         if ($podcast->language) {
             echo "\n\t" . '<language>' . $podcast->language . '</language>';
         }
         do_action('podlove_rss2_head', $feed);
     }, 9);
     $posts_per_page = $feed->limit_items == 0 ? get_option('posts_per_rss') : $feed->limit_items;
     if ($posts_per_page == Model\Feed::ITEMS_GLOBAL_LIMIT) {
         $posts_per_page = $podcast->limit_items;
     }
     // now override the option so WP core functions accessing the option get the "correct" value
     add_filter('pre_option_posts_per_rss', function ($_) use($posts_per_page) {
         return $posts_per_page;
     });
     $args = array('post_type' => 'podcast', 'post__in' => $feed->post_ids(), 'posts_per_page' => $posts_per_page);
     # The theme "getnoticed" globally overrides post_types in pre_get_posts.
     # Fix: hook in after the theme and override it again.
     # It's not bad practice because I *really* only want episodes in this feed.
     add_action('pre_get_posts', function ($query) {
         $query->set('post_type', 'podcast');
     }, 20);
     /**
      * In feeds, WordPress ignores the 'posts_per_page' parameter 
      * and overrides it with the 'posts_per_rss' option. So we need to
      * override that option.
      */
     add_filter('post_limits', function ($limits) use($feed) {
         $page = get_query_var('paged') ? (int) get_query_var('paged') : 1;
         $max = $feed->get_post_limit_sql();
         $start = $max * ($page - 1);
         if ($max > 0) {
             return 'LIMIT ' . $start . ', ' . $max;
         } else {
             return '';
         }
     });
     $args = array_merge($wp_query->query_vars, $args);
     query_posts($args);
 }