使用过滤器修改已注册自定义 Post 类型的参数

Modify Arguments of Already Registered Custom Post Type with Filter

我正在尝试在自定义 post 类型上设置 show_in_rest 参数,该类型已被第三方插件从 false 注册到 true。值得庆幸的是,插件作者包含了一个参数过滤器并提供了一个示例(请参见下面的第一个代码块)。 知道如何将提到的参数设置为 true 吗?

这是CPT注册功能

    public function register_client() {

    $labels = apply_filters( 'business_manager_client_labels', array(
        'name'                  => _x( '%2$s', 'post type general name', 'business-manager' ),
        'singular_name'         => _x( '%1$s', 'post type singular name', 'business-manager' ),
        'add_new'               => __( 'New %1s', 'business-manager' ),
        'add_new_item'          => __( 'Add New %1$s', 'business-manager' ),
        'edit_item'             => __( 'Edit %1$s', 'business-manager' ),
        'new_item'              => __( 'New %1$s', 'business-manager' ),
        'all_items'             => __( '%2$s', 'business-manager' ),
        'view_item'             => __( 'View %1$s', 'business-manager' ),
        'search_items'          => __( 'Search %2$s', 'business-manager' ),
        'not_found'             => __( 'No %2$s found', 'business-manager' ),
        'not_found_in_trash'    => __( 'No %2$s found in Trash', 'business-manager' ),
        'parent_item_colon'     => '',
        'menu_name'             => _x( '%2$s', 'admin menu', 'business-manager' ),
        'filter_items_list'     => __( 'Filter %2$s list', 'business-manager' ),
        'items_list_navigation' => __( '%2$s list navigation', 'business-manager' ),
        'items_list'            => __( '%2$s list', 'business-manager' ),
    ) );

    foreach ( $labels as $key => $value ) {
        $labels[ $key ] = sprintf( $value, business_manager_label_client_single(), business_manager_label_client_plural() );
    }

    $args = array(
        'labels'                => $labels,
        'public'                => false,
        'show_in_rest'          => false,
        'exclude_from_search'   => true,
        'publicly_queryable'    => false,
        'show_ui'               => true,
        'show_in_menu'          => false, // we are using custom add_submenu_page
        'query_var'             => true,
        'capability_type'       => 'post',
        'map_meta_cap'          => true,
        'has_archive'           => false,
        'hierarchical'          => false,
        'supports'              => array( 'title' ),
    );

    register_post_type( 'bm-client', apply_filters( 'business_manager_client_post_type_args', $args ) );

}

这是提供的例子

add_filter( 'business_manager_employee_post_type_args', 'example_function_for_employee_post_type', 10, 1 );

function example_function_for_employee_post_type( $args ) {
    print( $args ); //print the return value
    return $args;
}

试试下面的代码。您可以访问“$args”参数中的“show_in_rest”键并通过 true 更新值。

add_filter( 'business_manager_employee_post_type_args', 'example_function_for_employee_post_type', 10, 1 );
function example_function_for_employee_post_type( $args ) {
    $args['show_in_rest'] = true;
    return $args;
}

对于希望在没有预定义过滤器挂钩的任何其他 CPT 中更改此设置的任何人。 CTP 注册函数已经包含可能使用的所需过滤器挂钩:register_post_type_args

所以这变成了:

add_action('register_post_type_args', function ($args, $postType) {
    if ($postType !== 'bm-client'){
        return $args;
    }

    $args['show_in_rest'] = true;

    return $args;
}, 99, 2);

相关文章:https://zerowp.com/modify-cpt-arguments-after-it-was-registered/