Problem with controls of a Custom Looper Provider

Do the controls of a Custom Looper Provider not automatically update the page?

I created it based on the API, it is appearing in the UI, however, when changing the default values of the controls, nothing happens…

When I use the CUSTOM option and change the values using JSON parameters, it updates automatically.

Here is the code:

add_action( 'init', function () {
    cs_looper_provider_register( 'latest_posts_excluding_repeater', [
        'label'    => __( 'Latest Posts (excluding slideshow)', 'textdomain' ),
        'values'   => [
            'number'     => -1,
            'post_type'  => 'post',
            'page_id'    => 0,
            'repeater'   => 'slideshow',
            'post_field' => 'news',
            'offset'     => 0,
        ],
        'controls' => [
            [
                'key'   => 'number',
                'type'  => 'number',
                'label' => __( 'Number of posts', 'textdomain' ),
                'min'   => 1,
                'max'   => 20,
            ],
            [
                'key'   => 'post_type',
                'type'  => 'text',
                'label' => __( 'Post type', 'textdomain' ),
            ],
            [
                'key'   => 'page_id',
                'type'  => 'number',
                'label' => __( 'Page ID (0 = current)', 'textdomain' ),
            ],
            [
                'key'   => 'repeater',
                'type'  => 'text',
                'label' => __( 'Repeater field name', 'textdomain' ),
            ],
            [
                'key'   => 'post_field',
                'type'  => 'text',
                'label' => __( 'Post Object subfield name', 'textdomain' ),
            ],
            [
                'key'   => 'offset',
                'type'  => 'number',
                'label' => __( 'Offset (skip N posts)', 'textdomain' ),
                'min'   => 0,
            ],
        ],
        'filter'   => function ( $result, $args = [] ) {
            // Lê TUDO de $args (Controls + Params)
            $number     = ! empty( $args['number'] )     ? (int) $args['number']     : -1;
            $post_type  = ! empty( $args['post_type'] )  ? $args['post_type']        : 'post';
            $page_id    = ! empty( $args['page_id'] )    ? (int) $args['page_id']    : get_the_ID();
            $repeater   = ! empty( $args['repeater'] )   ? $args['repeater']         : 'slideshow';
            $post_field = ! empty( $args['post_field'] ) ? $args['post_field']       : 'news';
            $offset     = ! empty( $args['offset'] )     ? (int) $args['offset']     : 0;

            if ( $number <= 0 ) {
                $number = -1;
            }
            if ( $offset < 0 ) {
                $offset = 0;
            }

            $exclude_ids = [];

            if ( get_field( $repeater, $page_id ) ) {
                while ( have_rows( $repeater, $page_id ) ) {
                    the_row();
                    $post_obj = get_sub_field( $post_field );

                    if ( ! $post_obj ) {
                        continue;
                    }

                    $id = 0;

                    if ( is_numeric( $post_obj ) ) {
                        $id = (int) $post_obj;
                    } elseif ( is_array( $post_obj ) && isset( $post_obj['ID'] ) ) {
                        $id = (int) $post_obj['ID'];
                    } elseif ( is_object( $post_obj ) && isset( $post_obj->ID ) ) {
                        $id = (int) $post_obj->ID;
                    }

                    if ( $id > 0 ) {
                        $exclude_ids[] = $id;
                    }
                }
            }

            $exclude_ids = array_filter( array_unique( $exclude_ids ) );

            $query = new WP_Query( [
                'post_type'      => $post_type,
                'post_status'    => 'publish',
                'posts_per_page' => $number,
                'offset'         => $offset,
                'orderby'        => 'date',
                'order'          => 'DESC',
                'post__not_in'   => $exclude_ids,
            ] );

            if ( ! $query->have_posts() ) {
                return [];
            }

            $posts = [];
            foreach ( $query->posts as $post ) {
                $posts[] = [
                    'ID'           => $post->ID,
                    'title'        => get_the_title( $post ),
                    'permalink'    => get_permalink( $post ),
                    'excerpt'      => get_the_excerpt( $post ),
                    'date'         => get_the_date( '', $post ),
                    'featured_img' => get_the_post_thumbnail_url( $post, 'medium' ),
                ];
            }

            wp_reset_postdata();

            return $posts;
        },
    ] );
} );

Hello @leomello,

Thanks for writing to us.

Regretfully, we don’t provide custom development support as it’s outside our support scope. I recommend connecting with a developer who can assist with your customization needs, or consider subscribing to One, where customization questions receive dedicated responses.

Thanks for understanding