WordPressに入ってる仕組みを使ってよそのサイトのRSSを取得してテーマ内で表示のメモ

WordPressに入っていたのですね。Simple Pieです。

キャッシングもしてくれますし、以前は取得した結果をDBに保存したりしてて、損しちゃった。

$feeduri = 'http://example.com/feed/uri/here';
$rss = fetch_feed( $feeduri );

if ( ! is_wp_error( $rss ) ):

	$maxitems  = $rss->get_item_quantity( 4 ); // 4件表示
	$rss_items = $rss->get_items( 0, $maxitems );

endif;

if ( !$rss_items ):
	echo '<p><a href="http://example.com/" target="_blank">おもしろブログだよ。読みに来てね&#9825;</a></p>';
else:
	foreach ( $rss_items as $i ) {
		?>
		<li><a href="<?php echo esc_url( $i->get_permalink() ) ?>" target="_blank"><?php echo esc_html( $i->get_title() ); ?></a></li>
		<?php
	}
endif;

キャッシングは、transient APIなのですが、12時間がデフォルト。変更には下記。

function return_3h( $seconds )
{
  return 1*60*60*3;
}
add_filter( 'wp_feed_cache_transient_lifetime' , 'return_3h' );

参考:http://codex.wordpress.org/Function_Reference/fetch_feed

↓ プラグインを作る方々への本、書きました。 ↓

WordPressの投稿画面で、タイトルの下にカスタムフィールドの入力欄を追加する

公式ディレクトリに上げました

タイトル欄の下に、1個だけカスタムフィールドのフィールドが足したかったのです。

edit_form_after_title というフックを使います。 edit_form_after_editor というフックもあるのでエディタ直下の時に便利。

投稿タイトルの真下にフィールド
投稿タイトルの真下にフィールド

参考にさせていただいたのは、metabox – How do I position meta_box on post edit screen? – WordPress Answersです。

3行目からがフォームの出力です。
6行目: $postが空だったりポストタイプが投稿じゃなかった場合は終了
9行目: 何もない場合は空の値をセット
12行目: 出力

21行目からがフォームの内容がポストされた時の保存です。
23行目: オートセーブの仕組みに対応
26行目: 権限のチェック
31行目: 保存してます
33行目: 保存ボタンが押された際、値が空だったら削除してます

edit_form_after_editor の場合はこちら。

↓ プラグインを作る方々への本、書きました。 ↓

wp_enqueue_styleをfunctions.phpに素で書くとエラーが出るのを回避

TwentyTwelveテーマの子テーマを作る場面に出会いました。ウェブルジョンさんの下記の記事を参考に、functions.phpに下記を書き込んだところ、エラーが出てしまいました。

参考にした記事

Twenty Twelveの子テーマをつくるときに wp_enqueue_style を使ったほうが幸せになれるかもしれないという話 | Webourgeon

書いたコード

<br />
if ( !is_admin() ) {<br />
	wp_enqueue_style( 'twentytwelve-style', get_template_directory_uri() . '/style.css', array(), date('YmdHis', filemtime(get_template_directory() . '/style.css')) );<br />
	wp_enqueue_style( 'twentytwelve-child-style', get_stylesheet_uri(), array('twentytwelve-style'), date('YmdHis', filemtime(get_stylesheet_directory() . '/style.css')) );<br />
	wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array(), date('YmdHis', filemtime(get_template_directory() . '/css/ie.css')) );<br />
	$wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' );<br />
}<br />

出たエラー

Notice: wp_enqueue_style が誤って呼び出されました。スクリプトおよびスタイルは wp_enqueue_scripts、admin_enqueue_scripts、init フック以降のみに登録・キュー追加できます。 詳細は WordPress のデバッグをご覧ください。 (このメッセージはバージョン 3.3 で追加されました) in /var/www/vhosts/hiheyhoi/wp-includes/functions.php on line 2959

何かフックしてくれという感じですので、関数にして、一番最初の wp_enqueue_scripts フックに登録したところ、エラーは表示されなくなりました。

wp_enqueue_scriptsによれば、フロントエンドでのスタイルのためにこのフックを使いましょう(wp_enqueue_scripts is the proper hook to use when enqueuing items that are meant to appear on the front end.)ということで、if(!is_admin()){}が取れました。また、 global $wp_styles; の追加が必要でした。

最終的にfunctions.phpに追記したもの

<br />
function add_child_styles()<br />
{<br />
	global $wp_styles;<br />
	wp_enqueue_style( 'twentytwelve-style', get_template_directory_uri() . '/style.css', array(), date('YmdHis', filemtime(get_template_directory() . '/style.css')) );<br />
	wp_enqueue_style( 'twentytwelve-child-style', get_stylesheet_uri(), array('twentytwelve-style'), date('YmdHis', filemtime(get_stylesheet_directory() . '/style.css')) );<br />
	wp_enqueue_style( 'twentytwelve-ie', get_template_directory_uri() . '/css/ie.css', array(), date('YmdHis', filemtime(get_template_directory() . '/css/ie.css')) );<br />
	$wp_styles->add_data( 'twentytwelve-ie', 'conditional', 'lt IE 9' );<br />
}<br />
add_action( 'wp_enqueue_scripts', 'add_child_styles' );<br />

感想

WordPress/wp-includes/script-loader.php at 3.5.1 · WordPress/WordPress · GitHubを見ると、

function wp_enqueue_scripts() {
	do_action('wp_enqueue_scripts');
}

となっており、WRAPしているだけ。その直前のコメントには、

* Allows plugins to queue scripts for the front end using wp_enqueue_script().
* Runs first in wp_head() where all is_home(), is_page(), etc. functions are available.

とあるので、is_home()などの条件分岐タグを使いたいときには、initアクションフックではなく、こちらの方がいいですよ、そのために、do_actionするだけの関数も作りましたよ、ということなのかな、と思いました。間違ってるかもですが・・・

WordPressの実行フローを視覚化してみる | Simple Colors

↓ プラグインを作る方々への本、書きました。 ↓

カスタム投稿タイプの記事の一覧をカスタムタクソノミごとに表示する

フォーラムのお母様こと、@gatespace_kさんのWordPressでカテゴリ(タクソノミー)毎に投稿を表示 | Gatespace’s Blogを参考にさせていただきました。

ここでは、とあるカスタム投稿タイプの記事一覧をそのカスタム投稿タイプに紐付いたカスタムタクソノミ別に出しています。

  • カスタムタクソノミ1
    • 記事1
    • 記事2
    • 記事3
  • カスタムタクソノミ2
    • 記事4
    • 記事5
    • 記事6

みたいな感じで。

↓ プラグインを作る方々への本、書きました。 ↓

カスタム投稿タイプの記事の一覧をカスタムタクソノミごとに表示する

フォーラムのお母様こと、@gatespace_kさんのWordPressでカテゴリ(タクソノミー)毎に投稿を表示 | Gatespace’s Blogを参考にさせていただきました。

ここでは、とあるカスタム投稿タイプの記事一覧をそのカスタム投稿タイプに紐付いたカスタムタクソノミ別に出しています。

  • カスタムタクソノミ1
    • 記事1
    • 記事2
    • 記事3
  • カスタムタクソノミ2
    • 記事4
    • 記事5
    • 記事6

みたいな感じで。

↓ プラグインを作る方々への本、書きました。 ↓