$row ) { if ( ! is_array( $row ) ) { continue; } $product = ! empty( $row['parent_id'] ) ? (int) $row['parent_id'] : (int) ( $row['ID'] ?? 0 ); if ( ! self::hidden_from_someone( $product ) ) { continue; } foreach ( array_keys( $row ) as $source ) { if ( in_array( (string) $source, self::SOURCES, true ) || 1 === preg_match( self::CURRENCY, (string) $source ) ) { $rows[ $i ][ $source ] = array(); } } } return $rows; } public static function hidden_filters( $slugs ) { if ( ! class_exists( 'AIEO_Catalogue_Mode' ) || ! AIEO_Catalogue_Mode::settings()['hide_prices'] ) { return $slugs; } return array_values( array_unique( array_merge( (array) $slugs, self::price_slugs() ) ) ); } public static function price_slugs() { $stored = get_option( 'fibofilters_filters' ); $filters = is_string( $stored ) ? json_decode( $stored, true ) : $stored; $slugs = array(); foreach ( is_array( $filters ) ? $filters : array() as $filter ) { $attrs = is_array( $filter ) && isset( $filter['attributes'] ) && is_array( $filter['attributes'] ) ? $filter['attributes'] : ( is_array( $filter ) ? $filter : array() ); if ( self::PRICE_SOURCE === (string) ( $attrs['source'] ?? '' ) && '' !== (string) ( $attrs['url_slug'] ?? '' ) ) { $slugs[] = (string) $attrs['url_slug']; } } return $slugs; } public static function expiration( $seconds ) { return self::any() ? min( (int) $seconds, self::EXPIRATION ) : $seconds; } public static function option_added( $option, $value ) { if ( is_array( $value ) && ! empty( $value['hide_prices'] ) ) { self::schedule(); } } public static function option_changed( $old, $new ) { $was = is_array( $old ) && ! empty( $old['hide_prices'] ); $now = is_array( $new ) && ! empty( $new['hide_prices'] ); if ( $was !== $now ) { self::schedule(); } } public static function term_mark_changed( $meta_id, $object_id, $meta_key ) { if ( class_exists( 'AIEO_Catalogue_Mode' ) && AIEO_Catalogue_Mode::META_TERM === $meta_key ) { self::schedule(); } } public static function product_mark_changed( $meta_id, $object_id, $meta_key ) { if ( class_exists( 'AIEO_Catalogue_Mode' ) && AIEO_Catalogue_Mode::META_PRODUCT === $meta_key && has_action( 'fibofilters/indexer/update_single' ) ) { do_action( 'fibofilters/indexer/update_single', (int) $object_id ); } } public static function schedule() { if ( ! has_action( 'fibofilters/indexer/build' ) || wp_next_scheduled( self::REBUILD ) ) { return; } wp_schedule_single_event( time() + 30, self::REBUILD ); } public static function rebuild() { do_action( 'fibofilters/indexer/build' ); } } }