get_postsで「下書き保存」の記事も取得する

2015年9月4日

概要

get_posts() を使って下書き保存状態の記事を取得する。

環境

WordPress バージョン 4.3

理由

get_posts()はデフォルトの状態だとステータスが公開状態のものしか取得できません。
DBのデータで言うと「post_status」カラムの値が「publish」になってるものが対象です。

しかし、今回は値が「draft」のものも取得したい!
というわけで力技が入っていますが、以下のように設定。

設定

//力技の設定
function custom_status ($where)
{
  $prefix = 'wp_';// wp-confing.phpの$table_prefixを参照
  $where = str_replace("AND (({$prefix}posts.post_status = 'publish'))", "AND (({$prefix}posts.post_status != 'inherit'))", $where);
  return $where;
}

add_action('posts_where', 'custom_status');// 設定の呼び出し

$arr = array(
  'suppress_filters' => false // フックの許可。この設定は必須!
);

if( $posts = get_posts( $arr ) )
{
  print_r($posts); 
}

 

最後にひとこと

力技の作業なので、Wordpressのバージョンに依存してしまう可能性があります。
もっといい方法は、ないものでしょうか・・・

 

  • この記事を書いた人

カバノキ

印刷会社のWEB部隊に所属してます。 WEB制作に携わってから、もう時期10年になります。 普段の業務では、PHPをメインにサーバーサイドの言語を扱っています。 最近のお気に入りはJavascriptです。 Vue.jsを狂喜乱舞しながら、社内に布教中です。

-WordPress