if ( count( $incompatible_plugins ) > 0 ) { $disabled = array( 'yes' ); } if ( ! $sync_complete && ! $this->changing_data_source_with_sync_pending_is_allowed() ) { $disabled = array( 'yes', 'no' ); } return $disabled; }; return array( 'id' => self::CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION, 'title' => __( 'Order data storage', 'woocommerce' ), 'type' => 'radio', 'options' => array( 'no' => __( 'WordPress posts storage (legacy)', 'woocommerce' ), 'yes' => __( 'High-performance order storage (recommended)', 'woocommerce' ), ), 'value' => $get_value, 'disabled' => $get_disabled, 'desc' => $get_desc, 'desc_at_end' => true, 'row_class' => self::CUSTOM_ORDERS_TABLE_USAGE_ENABLED_OPTION, ); } /** * Returns the setting for rendering sync enabling setting block in Features section of the settings page. * * @return array Feature setting object. */ private function get_hpos_setting_for_sync() { if ( 'yes' === get_transient( 'wc_installing' ) ) { return array(); } $get_value = function () { return get_option( DataSynchronizer::ORDERS_DATA_SYNC_ENABLED_OPTION ); }; $get_sync_message = function () { $orders_pending_sync_count = $this->get_orders_pending_sync_count(); $sync_in_progress = $this->batch_processing_controller->is_enqueued( get_class( $this->data_synchronizer ) ); $sync_enabled = $this->data_synchronizer->data_sync_is_enabled(); $sync_is_pending = $orders_pending_sync_count > 0; $sync_message = array(); $is_dangerous = $sync_is_pending && $this->changing_data_source_with_sync_pending_is_allowed(); if ( $is_dangerous ) { $sync_message[] = wp_kses_data( sprintf( // translators: %d: number of pending orders. _n( "There's %d order pending sync. Switching data storage while sync is incomplete is dangerous and can lead to order data corruption or loss!", 'There are %d orders pending sync. Switching data storage while sync is incomplete is dangerous and can lead to order data corruption or loss!', $orders_pending_sync_count, 'woocommerce' ), $orders_pending_sync_count, ) ); } if ( ! $sync_enabled && $this->data_synchronizer->background_sync_is_enabled() ) { $sync_message[] = __( 'Background sync is enabled.', 'woocommerce' ); } if ( $sync_in_progress && $sync_is_pending ) { $sync_message[] = sprintf( // translators: %d: number of pending orders. __( 'Currently syncing orders... %d pending', 'woocommerce' ), $orders_pending_sync_count ); } elseif ( $sync_is_pending ) { $sync_now_url = wp_nonce_url( add_query_arg( array( self::SYNC_QUERY_ARG => true, ), wc_get_container()->get( FeaturesController::class )->get_features_page_url() ), 'hpos-sync-now' ); if ( ! $is_dangerous ) { $sync_message[] = wp_kses_data( sprintf( // translators: %d: number of pending orders. _n( "There's %d order pending sync. You can switch order data storage only when the posts and orders tables are in sync.", 'There are %d orders pending sync. You can switch order data storage only when the posts and orders tables are in sync.', $orders_pending_sync_count, 'woocommerce' ), $orders_pending_sync_count ) ); } $sync_message[] = sprintf( '%2$s', esc_url( $sync_now_url ), sprintf( // translators: %d: number of pending orders. _n( 'Sync %s pending order', 'Sync %s pending orders', $orders_pending_sync_count, 'woocommerce' ), number_format_i18n( $orders_pending_sync_count ) ) ); } return implode( '
', $sync_message ); }; $get_description_is_error = function () { $sync_is_pending = $this->get_orders_pending_sync_count() > 0; return $sync_is_pending && $this->changing_data_source_with_sync_pending_is_allowed(); }; return array( 'id' => DataSynchronizer::ORDERS_DATA_SYNC_ENABLED_OPTION, 'title' => '', 'type' => 'checkbox', 'desc' => __( 'Enable compatibility mode (synchronizes orders to the posts table).', 'woocommerce' ), 'value' => $get_value, 'desc_tip' => $get_sync_message, 'description_is_error' => $get_description_is_error, 'row_class' => DataSynchronizer::ORDERS_DATA_SYNC_ENABLED_OPTION, ); } /** * Returns a value indicating if changing the authoritative data source for orders while there are orders pending synchronization is allowed. * * @return bool */ private function changing_data_source_with_sync_pending_is_allowed(): bool { /** * Filter to allow changing where order data is stored, even when there are orders pending synchronization. * * DANGER! This filter is intended for usage when doing manual and automated testing in development environments only, * it should NEVER be used in production environments. Order data corruption or loss can happen! * * @param bool $allow True to allow changing order storage when there are orders pending synchronization, false to disallow. * @returns bool * * @since 8.3.0 */ return apply_filters( 'wc_allow_changing_orders_storage_while_sync_is_pending', false ); } /** * Returns the count of orders pending synchronization. * * @return int */ private function get_orders_pending_sync_count(): int { return $this->data_synchronizer->get_sync_status()['current_pending_count']; } }
Fatal error: Uncaught Error: Failed opening required '/home/valigeria/public_html/wp-content/plugins/wordfence/lib/wfLog.php' (include_path='.:/opt/alt/php81/usr/share/pear:/opt/alt/php81/usr/share/php:/usr/share/pear:/usr/share/php') in /home/valigeria/public_html/wp-content/plugins/wordfence/lib/wordfenceClass.php:13 Stack trace: #0 /home/valigeria/public_html/wp-content/plugins/wordfence/wordfence.php(125): require_once() #1 /home/valigeria/public_html/wp-settings.php(517): include_once('/home/valigeria...') #2 /home/valigeria/public_html/wp-config.php(111): require_once('/home/valigeria...') #3 /home/valigeria/public_html/wp-load.php(50): require_once('/home/valigeria...') #4 /home/valigeria/public_html/wp-blog-header.php(13): require_once('/home/valigeria...') #5 /home/valigeria/public_html/index.php(17): require('/home/valigeria...') #6 {main} thrown in /home/valigeria/public_html/wp-content/plugins/wordfence/lib/wordfenceClass.php on line 13