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

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.