「webで何か」作るブログ

35歳という遅すぎるスタートをなんとかする為のブログです。基本的に自分にとっての役立ちメモ。

ループについて|WordPressテーマの作り方

 

 

ページ送りがデフォルトだったり、サイドバーが一切なかったりしてますが、テーマを利用し始めました。使いながら少しつ良くしていきたいなと思います。

あと、はてなブログからgithub.ioへ引っ越しました。VCCW+StaticPress+github.ioの組み合わせで無料ホスティング。
若干手間は増えますが、そのあたりの自動化も課題としてやっていきたいなと思います。

さてタイトルの件ですが、今現在ほとんどのページでアイキャッチを設定していません。イコール、インデックス系のページにはサムネイルがありません。大事なのは理解しているのですが、正直若干面倒だな…と思うんですよね。

このテーマのヘッダーデザインはそういう理由だったりもします。この作りなら忘れてしまってもカッコつくかなと。

とは言え、カテゴリとかタグのページにはどうしても必要ですし、これまで設定してこなかった分を一つ一つ設定するよりアイキャッチ画像のデフォルト設定をしてしまった方が勉強にもなるし一石二鳥だ!というわけでアイキャッチにデフォルト設定をかけていきます。

特定の画像をデフォルト画像としてアイキャッチに設定する方法

add_action( 'save_post', 'save_default_thumbnail' );
function save_default_thumbnail( $post_id ) {
	$post_thumbnail = get_post_meta( $post_id, $key = '_thumbnail_id', $single = true );
	if ( !wp_is_post_revision( $post_id ) ) {
		if ( empty( $post_thumbnail ) ) {
			update_post_meta( $post_id, $meta_key = '_thumbnail_id', $meta_value = '56' );
		}
	}
}

WordPressのアイキャッチ画像に任意のデフォルト画像を登録する方法
WordPressのアイキャッチ画像に任意のデフォルト画像を登録する方法をご紹介します。クライアントワークでも使えると思います。−kachibito.netさまより引用

デフォルト画像はこちらを設定します。まずは任意の画像をアップ。全投稿を更新します。

写真ACさんよりいただきました。

実行結果

before

after

無事、期待通りの結果になりました!続いてなぜこうなるのか?を追っていきます。

コードの仕組み

まず、フックになっているpost_saveですが、Codexによると

インポート機能の利用、投稿・ページ編集フォームの利用、XMLRPCでの投稿、メールでの投稿のうちいずれかの方法で投稿・ページが作成・更新された際に実行する。実行されるタイミングはデータがデータベースに保存された後。アクション関数引数: 投稿 ID投稿 ID は最後に保存した投稿ではなく投稿履歴を参照していることもある。実際の投稿の ID を取得するには、[[関数リファレンス/wp_is_post_revision()]] を使う。

WordPressCodex-アクションフック一覧

とのこと。要は何かしら投稿が保存されたタイミングで何かしたいときにどうぞーということですね。で、引数にはpost_idが渡されるので、保存が行われた投稿に対してのみの動作になると。なるほど。

実際の処理の流れは、

  1. get_post_metaでサムネイルを$post_thumbnailに入れて、(thumbnailってカスタムフィールド扱いだったんですね)
  2. !wp_is_post_revision( $post_id )でリビジョン除外して、
  3. 取ってきた$post_thumbnailが空だったらupdate_post_metaでサムネイルの書き換え

と。post_meta系は色々と使い道がありそうですね。以上、デフォルトのアイキャッチを設定する方法でした。