WordPress:Advanced Custom Fieldsの「関連」フィールドで、現在の投稿を除外する方法

WordPress:Advanced Custom Fieldsの「関連」フィールドで、現在の投稿を除外する方法

WordPressでカスタムフィールドを扱いやすくするプラグイン「Advanced Custom Fields」の「関連」フィールドタイプで、現在の投稿は除外して選択欄に表示させないようにする方法です。
新規投稿時には気になりませんが、デフォルトでは「関連」フィールド内に該当するすべての投稿が表示されるので、編集時などに現在編集している投稿も表示されます。
ほとんどの場合は現在の投稿を関連投稿として選択することはないと思うので、それを非表示にします。

※「Advanced Custom Fields」の概要や使用方法については省略します。
また、ここで紹介しているものは Advanced Custom Fields PRO Ver 5.6.8 で検証した内容になります。

Advanced Custom Fieldsの「関連」フィールドのカスタマイズ例として「公開済みの投稿のみ表示させる方法」や「並び順を日付やランダムに設定する方法」でも紹介しているように、「関連」フィールド内の出力をカスタマイズしたい場合はacf/fields/relationship/queryのフィルターフックを利用します。
実装にはfunctions.phpに下記のように記述し、WP_Queryなどで利用することも多いpost__not_inを使います。

functions.php

add_filter( 'acf/fields/relationship/query', 'custom_acf_relationship_query', 10, 3 );
function custom_acf_relationship_query( $args, $field, $post_id ) {
  $args['post__not_in'] = array( $post_id );
  return $args;
}

記述後に投稿画面を確認すると「関連」フィールド内から現在の投稿が除外されているのを確認できます。

今回は現在の投稿なのでarray( $post_id )と指定していますが、何らかの理由で特定の投稿のみ出したくないというときも同じようにpost__not_inを利用し、その場合は$post_idを投稿IDに置き換えればその指定した投稿が「関連」フィールドに表示されないようにできます。

Close the search window,
please press close button or esc key.