14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2016-12-09

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

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>
っていうことらしいので注意。

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

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

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?