ACFの投稿オブジェクト・関連で選択肢に下書き記事を表示しない方法

Advanced Custom FieldのWebサイト

Advanced Custom Fieldのカスタマイズの紹介です。

投稿オブジェクトは、固定ページや記事に別の投稿オブジェクトを紐づけることができます。
似たような項目で、「関連」というものがあり投稿オブジェクトとの違いは複数選択可能がどうかしか違いがありません。

関連を使うことで、複数の投稿オブジェクトを紐付けすることができます。

投稿オブジェクト・関連の設定

設定はとても簡単

投稿オブジェクトの設定はとても簡単で、選択可能な投稿タイプと、タクソノミーを選びます。
投稿オブジェクトを選択しないとメディア等も選択肢に出てくるのでかなりめんどくさいことになります。

タクソノミーは、個々のターム情報を選択します。

設定した内容を取得すると、WP_Queryで取得した際と同じような形でWP_Postオブジェクトが中に入っています。

array(2) {
  [0]=>
  object(WP_Post)#~~ (~~) {
    // 投稿オブジェクトの情報がここに入ってます
  }
  [1]=>
  object(WP_Post)#~~ (~~) {
    // 投稿オブジェクトの情報がここに入ってます
  }
}

下書き記事の非表示方法

デフォルトでは、下書き記事が選択肢に表示されてややこしい

ACFを追加して、投稿オブジェクトを設定しただけだと下書き記事が選べる状態になっています。
選んだとしても表示されないので問題ありませんが、ここに選択肢として出てくるのは正直邪魔ですね。

なので消しましょう。

Advanced Custom Fieldsのプラグインファイルから下記のファイルの166行目にフィルターがあるのでこれを使います。

/advanced-custom-fields/includes/fields/class-acf-field-post_object.php
↓ 166行目
$args = apply_filters(’acf/fields/post_object/query’, $args, $field, $options[’post_id’] );

functions.phpに下記の記述を追加します。
post_statusのパラメータを「publish」にすることで公開済みの投稿のみを選択肢に表示することができます。

add_filter( ’acf/fields/post_object/query’, ’custom_acf_post_object_query’, 10, 4 );
function custom_acf_post_object_query(  $args, $field, $post_id  ){
    $args [’post_status’] = ’publish’;
    return $args;
}

※上記の記述は一部全角や大文字になっているのでコピペする際はご注意を。

これで下書き記事はもう出ません。
他にも記事のパラメーターによって出し分けたい場合は書き方をベースに変更してみてください。