プラグインAdvanced custom fields(ACF)のacf/fields/relationship/queryフィルタの使用方法・解説

概要

acf/fields/relationship/query フィルタは、Advanced Custom Fields (ACF) で使用される Relationship フィールドの投稿をクエリするために使用される $args をフィルターします。このフィルタを使用することで、特定の条件で投稿を絞り込み、表示される投稿をカスタマイズすることが可能です。以下のような機能を実装する際に役立ちます:

  1. 特定のカスタム投稿タイプのみを表示する。
  2. 特定のカテゴリやタグに基づいて投稿をフィルタリングする。
  3. デフォルトの順序を変更する。
  4. 特定のユーザーロールに基づいて投稿を制限する。
  5. ファイルやメタデータに基づいて条件を追加する。
  6. 投稿の表示非表示を管理するための論理チェックを加える。

構文

add_filter('acf/fields/relationship/query', 'my_relationship_query', 10, 3);

パラメータ

  • $args : WP_Query に渡される引数の配列。
  • $field : フィールド情報の配列。
  • $post_id : 現在のポストの ID。

戻り値

フィルタされた $args 配列。

バージョン

  • ACF バージョン: 5.0+
  • WordPress バージョン: 4.0+

この関数のアクションでの使用可能性

アクション 使用可能性
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

サンプル 1: 特定の投稿タイプを表示する

このコードは、選択可能な投稿をカスタム投稿タイプ「book」のみでフィルタリングします。

add_filter('acf/fields/relationship/query', function($args, $field, $post_id) {
    $args['post_type'] = 'book';
    return $args;
});

引用元: https://www.advancedcustomfields.com/resources/relationship/

サンプル 2: 特定のカテゴリに基づいて投稿をフィルタリングする

このコードは、特定のカテゴリ「news」に属する投稿のみを表示します。

add_filter('acf/fields/relationship/query', function($args, $field, $post_id) {
    $args['tax_query'] = [
        [
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'news',
        ],
    ];
    return $args;
});

引用元: https://www.advancedcustomfields.com/resources/relationship/

サンプル 3: 投稿の順序を変更する

このコードは、選択された投稿をタイトルのアルファベット順で並べ替えます。

add_filter('acf/fields/relationship/query', function($args, $field, $post_id) {
    $args['orderby'] = 'title';
    $args['order'] = 'ASC';
    return $args;
});

引用元: https://www.advancedcustomfields.com/resources/relationship/

サンプル 4: ユーザーロールに基づいて投稿を表示する

このコードは、特定のユーザーロールを持つユーザーに対してのみ投稿を表示します。

add_filter('acf/fields/relationship/query', function($args, $field, $post_id) {
    if (!current_user_can('editor')) {
        $args['author'] = get_current_user_id();
    }
    return $args;
});

引用元: https://www.advancedcustomfields.com/resources/relationship/

サンプル 5: メタデータに基づいてフィルタリングする

このコードは、特定のメタフィールドを持つ投稿のみを選択します。

add_filter('acf/fields/relationship/query', function($args, $field, $post_id) {
    $args['meta_query'] = [
        [
            'key'     => 'featured',
            'value'   => '1',
        ],
    ];
    return $args;
});

引用元: https://www.advancedcustomfields.com/resources/relationship/

この関数について質問する


上の計算式の答えを入力してください