aoyama

2013.12.03

WordPressでアイキャッチ画像(Post Thumbnail)がない投稿のみを取得する方法

どーも、aoyamaです。社内にもうひとり「青山さん」がいらっしゃって、
メールでのやり取りでの導入部分が

青山さん
お疲れ様です、青山です。

とかなって、メールが続くとよくわからなくなったりします。

あと、社内でも宛先の間違いメールが、たまに届くようになりました。
大きな会社で、「佐藤」とか「鈴木」とかメジャーな苗字の人ってもっと大変なんだろうなと
思う今日、この頃です。
面倒ですね。

前回は、Knockout.jsで動くサンプルに関する記事を書いてみたりしました。
が、今回は、Wordpressネタにしようと思います。

「Wordpressでアイキャッチ画像(Post Thumbnail)がない投稿のみを取得する方法」
についてです。
結構簡単かなと調べてみたのですが、ざっと調べた限りでは見つからず、
結構苦労したので、共有です。
ニッチ過ぎて需要がないような気もしますが…。

WordPressでアイキャッチ画像(Post Thumbnail)が「ある」投稿のみを取得する方法

アイキャッチ画像(Post Thumbnail)が「ない」投稿の取得の話よりも、
まずは、「ある」投稿の取得方法から見ていきましょう。

または、

これだけです。簡単ですね。
では、いよいよ本題です。

引数だけでなんとか出来ないか、試してみる

WordPress Codexの「query_posts」のページを眺めてみましょう。
「カスタムフィールド引数」の項目に指定できるキーが書いてあります。

  • meta_key: (string) – Custom field key.
  • meta_value: (string) – Custom field value.
  • meta_compare: (string) – ‘meta_value=’ で指定された値を比較する演算子。デフォルトは ‘=’ で, ‘!=’、’>’、’>=’、’<'、'<=' も使える。

これらを使ってなんとか、出来ないかなーと眺めてみたものの。
そもそも、アイキャッチ画像がない時に「_thumbnail_id」というカスタムフィールドがあるのか?
と思ったので、DBを見てみることに。

結果、meta_keyはアイキャッチ画像を削除すると消えるようです。

発行されるSQLを無理やり書き換える方向で考える

で、SQLを無理やり書き換える方向で検討してみます。
すべての条件で、SQLを書き換えるわけにはいかないので、下記の場合に書き換えるようにします。

上記の条件で発行されるSQLは下記の通り。

記事用のテーブル(wp_post)の記事に対して、カスタムフィールドは複数存在するので
サブクエリを使わないと、wp_postmetaにmeta_key: _thumbnail_idを持たない記事を
抽出するのは難しそうです。
発行されるSQLを下記のように書き換えるようにします。

で、無理やり書き換えるために、functions.phpに下記の内容に追加します。

といった感じで、かなり力技ですが、
Wordpressでアイキャッチ画像(Post Thumbnail)がない投稿のみを取得する
ことが出来るようになりました。

おわりに

弊社では、一緒に働いていただけるエンジニアを募集中です。
興味のあるかたは、「エンジニア採用サイト」をご覧いただき、ご応募ください。

ご応募お待ちしております。