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

概要

acf/fields/post_object/query は、Advanced Custom Fields (ACF) プラグインにおいて、投稿オブジェクトフィールドのクエリをカスタマイズするために使用されるフィルターフックです。このフィルタを利用することで、特定の条件に基づいて投稿のリストを取得したり、表示する投稿の種類を変更したりすることができます。

このフィルタは、次のような機能を実装する際によく使われます:

  1. 特定の投稿タイプの投稿のみを表示する
  2. 投稿のステータス(公開、非公開など)をフィルタリングする
  3. カスタムタクソノミーに基づいて投稿を絞り込む
  4. 指定した条件を満たす投稿だけを取得する
  5. ソート順をカスタマイズする
  6. 投稿のメタデータに基づいてフィルタリングする

構文

add_filter('acf/fields/post_object/query', 'my_post_object_query', 10, 3);

パラメータ

  • $args: WP_Queryに渡される引数の配列
  • $field: フィールドオブジェクト
  • $post_id: 現在の投稿のID

戻り値

  • フィルターを適用した$args配列

対応バージョン

  • Advanced Custom Fields: 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: 特定の投稿タイプをフィルタリング

add_filter('acf/fields/post_object/query', 'custom_post_object_query', 10, 3);
function custom_post_object_query($args, $field, $post_id) {
    $args['post_type'] = 'custom_post_type'; // 'custom_post_type' を特定の投稿タイプに設定
    return $args;
}

このサンプルコードは、投稿オブジェクトフィールドから特定のカスタム投稿タイプである custom_post_type の投稿のみを取得します。

サンプル2: 投稿のステータスによるフィルタリング

add_filter('acf/fields/post_object/query', 'filter_by_post_status', 10, 3);
function filter_by_post_status($args, $field, $post_id) {
    $args['post_status'] = 'publish'; // 公開された投稿のみを取得
    return $args;
}

このコードは、投稿オブジェクトフィールドにおいて、公開された投稿のみを表示するために投稿のステータスを publish に設定します。

サンプル3: タクソノミーを使用したフィルタリング

add_filter('acf/fields/post_object/query', 'filter_by_taxonomy', 10, 3);
function filter_by_taxonomy($args, $field, $post_id) {
    $args['tax_query'] = array(
        array(
            'taxonomy' => 'custom_taxonomy',
            'field' => 'slug',
            'terms' => 'term_slug',
        ),
    );
    return $args;
}

このサンプルは、特定のタクソノミー custom_taxonomy から term_slug に一致する投稿のみをクエリで取得します。

サンプル4: メタクエリによるフィルタリング

add_filter('acf/fields/post_object/query', 'filter_by_meta', 10, 3);
function filter_by_meta($args, $field, $post_id) {
    $args['meta_query'] = array(
        array(
            'key' => 'meta_key',
            'value' => 'meta_value',
            'compare' => '=',
        ),
    );
    return $args;
}

このコードは、特定のメタキーとその値に基づいて投稿をフィルタリングします。

サンプル5: 投稿順序のカスタマイズ

add_filter('acf/fields/post_object/query', 'sort_posts_by_title', 10, 3);
function sort_posts_by_title($args, $field, $post_id) {
    $args['orderby'] = 'title'; // タイトルでソート
    $args['order'] = 'ASC'; // 昇順
    return $args;
}

このコード例は、投稿をタイトルに基づいて昇順でソートします。

これらのサンプルコードは、Advanced Custom Fieldsの acf/fields/post_object/query フィルタを利用して投稿オブジェクトフィールドの表示をカスタマイズする方法を示しています。

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


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