29 marca 2017

Nietypowy RSS dla WordPress-a

Kategoria: PHP Autor: FX

Czasem jest potrzeba zrobienia nietypowego kanału RSS, np. zawierającego inaczej sformatowane informacje. WordPress zawiera m. in. taką niedogodność, że w kanale RSS umieszcza pełne wpisy. Jest możliwość stosowania wypisów, ale nie dla użytkowników korzystających ze znacznika MORE. Opracujemy dziś skróconą wersję RSS.

Pod tym linkiem jest szczegółowa instrukcja tworzenia:
RSS dla WordPress – tworzenie.

Trzeba wykonać następujące kroki:

  1. edytować plik functions.php w katalogu z wzorcem (templates) – dopisujemy przed znacznikiem końca PHP dwie funkcje w pliku: wp-content/themes/wzorzec/functions.php:
    1
    2
    3
    4
    5
    6
    7
    8
    add_action('init', 'customRSS');
    function customRSS(){
            add_feed('mobile', 'customRSSFunc');
    }

    function customRSSFunc(){
            get_template_part('rss', 'mobile');
    }

    gdzie ‚mobile’ to nazwa naszego kanału (np. dla telefonów komórkowych w tym przypadku),

  2. tworzymy katalog wp-content/themes/child (dokładnie tak go nazywamy)
  3. wgrywamy tam plik rss-mobile.php (nazwa mobile musi być taka jaką nadaliśmy w funkcji) jak w przykładzie z linka powyżej np.:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
    /**
     * Template Name: Custom RSS Template - Feedname
     */

    $postCount = 5; // The number of posts to show in the feed
    $posts = query_posts('showposts=' . $postCount);
    header('Content-Type: '.feed_content_type('rss-http').'; charset='.get_option('blog_charset'), true);
    echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
    ?>
    <rss version="2.0"
            xmlns:content="http://purl.org/rss/1.0/modules/content/"
            xmlns:wfw="http://wellformedweb.org/CommentAPI/"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:atom="http://www.w3.org/2005/Atom"
            xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
            xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
            <?php do_action('rss2_ns'); ?>>
    <channel>
            <title><?php bloginfo_rss('name'); ?> - Feed</title>
            <atom:link href="<?php self_link(); ?>" rel="self" type="application/rss+xml" />
            <link><?php bloginfo_rss('url') ?></link>
            <description><?php bloginfo_rss('description') ?></description>
            <lastBuildDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></lastBuildDate>
            <language><?php echo get_option('rss_language'); ?></language>
            <sy:updatePeriod><?php echo apply_filters( 'rss_update_period', 'hourly' ); ?></sy:updatePeriod>
            <sy:updateFrequency><?php echo apply_filters( 'rss_update_frequency', '1' ); ?></sy:updateFrequency>
            <?php do_action('rss2_head'); ?>
            <?php while(have_posts()) : the_post(); ?>
                    <item>
                            <title><?php the_title_rss(); ?></title>
                            <link><?php the_permalink_rss(); ?></link>
                            <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate>
                            <dc:creator><?php the_author(); ?></dc:creator>
                            <guid isPermaLink="false"><?php the_guid(); ?></guid>
                            <description><![CDATA[<?php the_excerpt_rss() ?>]]></description>
                            <content:encoded><![CDATA[<?php the_excerpt_rss() ?>]]></content:encoded>
                            <?php rss_enclosure(); ?>
                            <?php do_action('rss2_item'); ?>
                    </item>
            <?php endwhile; ?>
    </channel>
    </rss>
  4. Restartujemy linki permamentne w menu admina -> Ustawienia ->Bezpośrednie odnośniki -> Zapisz (choć nie zmieniamy nic)
  5. Nasz kanał jest dostępny pod adresem domena.com/feed/mobile

Komentowanie wyłączone.