From 14a0559200e09c086e9ad6b848c929ff8f6ab728 Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Mon, 14 Jul 2025 13:10:19 +0530 Subject: [PATCH 1/2] `gpr-randomize-fields-to-its-own-page.php`: Added snippet to randomize fields to its own page. --- .../gpr-randomize-fields-to-its-own-page.php | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 gp-randomizer/gpr-randomize-fields-to-its-own-page.php diff --git a/gp-randomizer/gpr-randomize-fields-to-its-own-page.php b/gp-randomizer/gpr-randomize-fields-to-its-own-page.php new file mode 100644 index 000000000..8a595d7d9 --- /dev/null +++ b/gp-randomizer/gpr-randomize-fields-to-its-own-page.php @@ -0,0 +1,97 @@ +id ] = $field; + } + + $result = array(); + $used_ids = array(); + + foreach ( $fields_backup as $field ) { + if ( $field->type === 'page' ) { + $result[] = $field; + } elseif ( isset( $filtered_map[ $field->id ] ) ) { + $result[] = $filtered_map[ $field->id ]; + + $used_ids[] = $field->id; + } + } + + foreach ( $filtered_fields as $field ) { + if ( ! in_array( $field->id, $used_ids, true ) && $field->type !== 'page' ) { + $result[] = $field; + } + } + + // Clean up redundant pages + $cleaned_result = array(); + $prev_is_page = false; + + foreach ( $result as $field ) { + if ( $field->type === 'page' ) { + if ( $prev_is_page ) { + continue; // Skip consecutive page + } + $prev_is_page = true; + } else { + $prev_is_page = false; + } + $cleaned_result[] = $field; + } + + // Remove leading page + if ( isset( $cleaned_result[0] ) && $cleaned_result[0]->type === 'page' ) { + array_shift( $cleaned_result ); + } + + // Remove trailing page + if ( ! empty( $cleaned_result ) && end( $cleaned_result )->type === 'page' ) { + array_pop( $cleaned_result ); + } + + return $cleaned_result; +} + +function randomize_fields_within_pages( $fields ) { + $result = array(); + $current_group = array(); + + foreach ( $fields as $field ) { + if ( $field->type === 'page' ) { + // Shuffle current group and add to result. + shuffle( $current_group ); + $result = array_merge( $result, $current_group ); + $result[] = $field; // Add the page marker. + $current_group = array(); // Start new group. + } else { + $current_group[] = $field; + } + } + + // Add any remaining fields in the last group. + if ( ! empty( $current_group ) ) { + shuffle( $current_group ); + $result = array_merge( $result, $current_group ); + } + + return $result; +} From 7eeb37456b4f968332910cca9850237ee139a70b Mon Sep 17 00:00:00 2001 From: Saif Sultan Date: Tue, 15 Jul 2025 15:38:21 +0530 Subject: [PATCH 2/2] `gpr-randomize-fields-to-its-own-page.php`: Added snippet to randomize fields to its own page. --- gp-randomizer/gpr-randomize-fields-to-its-own-page.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/gp-randomizer/gpr-randomize-fields-to-its-own-page.php b/gp-randomizer/gpr-randomize-fields-to-its-own-page.php index 8a595d7d9..aedd9a16a 100644 --- a/gp-randomizer/gpr-randomize-fields-to-its-own-page.php +++ b/gp-randomizer/gpr-randomize-fields-to-its-own-page.php @@ -7,15 +7,18 @@ * * See video: https://www.loom.com/share/2dd4f3c6995349ae91d4b88f3990294b */ -add_filter( 'gpr_filtered_fields', function( $filtered_fields, $form, $display_count ) { +add_filter( 'gpr_filtered_fields', function( $filtered_fields, $form ) { - if ( ! $display_count ) { + $feed_id = gp_randomizer()->get_default_feed_id( $form['id'] ); + $settings = rgar( gp_randomizer()->get_feed( $feed_id ), 'meta', array() ); + + if ( ! $settings['display_count'] ) { $filtered_fields = randomize_fields_within_pages( $form['fields'] ); } else { $filtered_fields = arrange_fields_by_page( $form['fields'], $filtered_fields ); } return $filtered_fields; -}, 10, 3 ); +}, 10, 2 ); function arrange_fields_by_page( $fields_backup, $filtered_fields ) { $filtered_map = array();