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;
},
] );
} );