Help us understand the problem. What is going on with this article?

WordPressにスマートニュース向けのフィードを追加

毎回めんどくさいので諸々まとめとく。

SmartFormat 仕様
SmartFormat Validator

関連:WordPressにグノシー向けのフィードを追加

/path/to/theme/functions.php
//フィード追加
add_action('init', function() {
    add_feed('smartnews', function() { get_template_part('/feed/smartnews'); });
});

//クエリ変更
add_action('pre_get_posts', function($query) {
    if ( is_admin() ) return $query;
    if ( $query->is_main_query() && $query->is_feed('smartnews') ) {
        //投稿タイプ変更or追加
        $query->set('post_type', ['post', 'any']);
        //削除に対応する場合
        $query->set('post_status', ['publish', 'trash']);
    }
    return $query;
});

リライトルールを追加することになるので
設定>パーマリンク設定で更新する必要があります。

/path/to/theme/feed/smartnews.php
<?php
/*
 * Atom /wp-includes/feed-atom.php
 * RSS2.0 /wp-includes/feed-rss2.php
 */

//ATOM版
header('Content-Type: ' . feed_content_type('atom') . '; charset=' . get_option('blog_charset'), true);
$more = 1;

echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>';
do_action( 'rss_tag_pre', 'atom' );
?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:snf="http://www.smartnews.be/snf">
    <title><?php echo get_option('blogname');?></title>
    <link type="text/html" href="<?php echo home_url('/');?>" rel="alternate"/>
    <subtitle><?php echo get_option('blogdescription');?></subtitle>
    <updated><?php echo mysql2date('Y-m-d\TH:i:s\Z', get_lastpostmodified('GMT'), false); ?></updated>
    <rights>【コピーライト】</rights>
    <logo><url>【ロゴ】</url></logo>
    <snf:logo><url>【ロゴ】</url></snf:logo>
    <ttl>15</ttl>
<?php while ( have_posts() ) : the_post(); global $post;?>
    <entry>
        <title><?php the_title_rss();?></title>
        <link type="text/html" href="<?php the_permalink_rss();?>" rel="alternate"/>
        <id><?php the_permalink_rss();?></id>
        <updated><?php echo get_post_modified_time('Y-m-d\TH:i:s\Z', true);?></updated>
        <content><![CDATA[
<?php if ( has_post_thumbnail() ):?>
            <figure>
                <img src="<?php echo get_the_post_thumbnail_url($post->ID, 'large');?>">
                <figcaption><?php echo get_the_post_thumbnail_caption($post->ID);?></figcaption>
            </figure>
<?php endif;?>
<?php the_content_feed('atom');?>
        ]]></content>
<?php
$categories = get_the_category($post->ID);
if ( !empty($categories) ):
    foreach ($categories as $category) $cats[] = $category->name;
?>
        <category><?php echo implode(',', $cats);?></category>
<?php endif;?>
        <author><?php echo get_option('blogname');?></author>
        <dc:language>ja</dc:language>
<?php if ( has_post_thumbnail() ):?>
        <media:thumbnail url="<?php echo get_the_post_thumbnail_url($post->ID, 'large');?>" />
<?php endif;?>
        <media:status><?php echo (get_post_status($post->ID)=='publish') ? 'active' : 'deleted';?></media:status>
<?php do_action( 'atom_entry' );?>
    </entry>
<?php endwhile;?>
</feed>

仕様書は
<logo>http://times.smartnews.co.jp/logo.png</logo>
って書いてあるけど
ほんとうは
<logo><url>http://times.smartnews.co.jp/logo.png</url></logo>
っていうことらしいので注意。

まあ完璧な仕様書作れるとこってほぼないしね。仕方ないね。

本文のとこは本文前にアイキャッチ入れてるので適宜変更してください。

ki6ool
絶対ワードプレス使うマン
https://6oolab.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away