plugin = $plugin; $this->screens = $this->build_menu_item_array(); add_action( 'admin_init', array( $this, 'add_extra_screens' ) ); add_action( 'admin_menu', array( $this, 'add_menu_item' ) ); add_action( 'wp_loaded', array( $this, 'save' ) ); add_action( 'admin_notices', array( $this, 'display_fb_product_sets_removed_banner' ) ); } /** * Arranges the tabs. If the plugin is connected to FB, Advertise tab will be first, otherwise the Connection tab will be the first tab. * * @since 3.0.7 */ public function build_menu_item_array(): array { $screens = array( Settings_Screens\Product_Sync::ID => new Settings_Screens\Product_Sync(), Settings_Screens\Product_Attributes::ID => new Settings_Screens\Product_Attributes(), ); return $screens; } public function add_extra_screens(): void { $rollout_switches = $this->plugin->get_rollout_switches(); $is_connected = $this->plugin->get_connection_handler()->is_connected(); $is_woo_all_products_sync_enbaled = $this->plugin->get_rollout_switches()->is_switch_enabled( RolloutSwitches::SWITCH_WOO_ALL_PRODUCTS_SYNC_ENABLED ); /** * If all products sync is not enabled should show the Product sync tab */ if ( true === $is_connected && false === $is_woo_all_products_sync_enbaled ) { $this->screens[ Settings_Screens\Product_Sync::ID ] = new Settings_Screens\Product_Sync(); } } /** * Adds the Facebook menu item. * * @since 2.0.0 */ public function add_menu_item() { $root_menu_item = $this->root_menu_item(); add_submenu_page( $root_menu_item, __( 'Meta for WooCommerce', 'facebook-for-woocommerce' ), __( 'Facebook', 'facebook-for-woocommerce' ), 'manage_woocommerce', self::PAGE_ID, [ $this, 'render' ], 5 ); $this->connect_to_enhanced_admin( $this->is_marketing_enabled() ? 'marketing_page_wc-facebook' : 'woocommerce_page_wc-facebook' ); } /** * Get root menu item. * * @since 3.2.10 * return string Root menu item slug. */ public function root_menu_item() { if ( $this->is_marketing_enabled() ) { return 'woocommerce-marketing'; } return 'woocommerce'; } /** * Check if marketing feature is enabled. * * @since 3.2.10 * return bool Is marketing enabled. */ public function is_marketing_enabled() { if ( class_exists( WooAdminFeatures::class ) ) { return WooAdminFeatures::is_enabled( 'marketing' ); } return is_callable( '\Automattic\WooCommerce\Admin\Loader::is_feature_enabled' ) && \Automattic\WooCommerce\Admin\Loader::is_feature_enabled( 'marketing' ); } /** * Enables enhanced admin support for the main Facebook settings page. * * @since 2.2.0 * * @param string $screen_id the ID to connect to */ private function connect_to_enhanced_admin( $screen_id ) { $is_woo_all_products_sync_enbaled = $this->plugin->get_rollout_switches()->is_switch_enabled( RolloutSwitches::SWITCH_WOO_ALL_PRODUCTS_SYNC_ENABLED ); if ( is_callable( 'wc_admin_connect_page' ) ) { $crumbs = array( __( 'Meta for WooCommerce', 'facebook-for-woocommerce' ), ); //phpcs:ignore WordPress.Security.NonceVerification.Recommended if ( ! empty( $_GET['tab'] ) ) { //phpcs:ignore WordPress.Security.NonceVerification.Recommended switch ( $_GET['tab'] ) { case Settings_Screens\Product_Sync::ID: /** * If all proudcts sync not enabled * Show the product sync tab */ if ( ! $is_woo_all_products_sync_enbaled ) { $crumbs[] = __( 'Product sync', 'facebook-for-woocommerce' ); } break; } } wc_admin_connect_page( array( 'id' => self::PAGE_ID, 'screen_id' => $screen_id, 'path' => add_query_arg( 'page', self::PAGE_ID, 'admin.php' ), 'title' => $crumbs, ) ); } } /** * Renders the settings page. * * @since 2.0.0 */ public function render() { $current_tab = $this->get_current_tab(); $screen = $this->get_screen( $current_tab ); ?>
render_tabs( $current_tab ); ?> get_message_handler()->show_messages(); ?>

get_title() ); ?>

get_description() ); ?>

render(); ?>
get_tabs(); ?> get_tabs(); $current_tab = Helper::get_requested_value( 'tab' ); if ( ! $current_tab ) { $current_tab = current( array_keys( $tabs ) ); } return $current_tab; } /** * Saves the settings page. * * @since 2.0.0 */ public function save() { if ( ! is_admin() || Helper::get_requested_value( 'page' ) !== self::PAGE_ID ) { return; } $screen = $this->get_screen( Helper::get_posted_value( 'screen_id' ) ); if ( ! $screen ) { return; } if ( ! Helper::get_posted_value( 'save_' . $screen->get_id() . '_settings' ) ) { return; } if ( ! current_user_can( 'manage_woocommerce' ) ) { wp_die( esc_html__( 'You do not have permission to save these settings.', 'facebook-for-woocommerce' ) ); } check_admin_referer( 'wc_facebook_admin_save_' . $screen->get_id() . '_settings' ); try { $screen->save(); facebook_for_woocommerce()->get_message_handler()->add_message( __( 'Your settings have been saved.', 'facebook-for-woocommerce' ) ); } catch ( PluginException $exception ) { facebook_for_woocommerce()->get_message_handler()->add_error( sprintf( /* translators: Placeholders: %s - user-friendly error message */ __( 'Your settings could not be saved. %s', 'facebook-for-woocommerce' ), $exception->getMessage() ) ); } } /** * Gets a settings screen object based on ID. * * @since 2.0.0 * * @param string $screen_id desired screen ID * @return Abstract_Settings_Screen|null */ public function get_screen( $screen_id ) { $screens = $this->get_screens(); return ! empty( $screens[ $screen_id ] ) && $screens[ $screen_id ] instanceof Abstract_Settings_Screen ? $screens[ $screen_id ] : null; } /** * Gets the available screens. * * @since 2.0.0 * * @return Abstract_Settings_Screen[] */ public function get_screens() { /** * Filters the admin settings screens. * * @since 2.0.0 * * @param array $screens available screen objects */ $screens = (array) apply_filters( 'wc_facebook_admin_settings_screens', $this->screens, $this ); // ensure no bogus values are added via filter $screens = array_filter( $screens, function ( $value ) { return $value instanceof Abstract_Settings_Screen; } ); return $screens; } /** * Gets the tabs. * * @since 2.0.0 * * @return array */ public function get_tabs() { $tabs = []; foreach ( $this->get_screens() as $screen_id => $screen ) { $tabs[ $screen_id ] = $screen->get_label(); } /** * Filters the admin settings tabs. * * @since 2.0.0 * * @param array $tabs tab data, as $id => $label */ return (array) apply_filters( 'wc_facebook_admin_settings_tabs', $tabs, $this ); } public function display_fb_product_sets_removed_banner() { $dismissed = get_transient( 'fb_product_set_banner_dismissed' ); if ( $dismissed ) { return; // Banner dismissed, do not show } $screen = get_current_screen(); if ( ! $screen || ( 'marketing_page_wc-facebook' !== $screen->id && 'woocommerce_page_wc-facebook' !== $screen->id ) ) { return; } $fb_catalog_id = facebook_for_woocommerce()->get_integration()->get_product_catalog_id(); ?>

The Product Sets tab has been removed

The Product Sets tab is no longer available in the plugin. All product sets you created previously remain intact and accessible. Your WooCommerce categories will continue to sync automatically as product sets to your Meta catalog. To update synced sets, please edit your categories in WooCommerce. To view and manage your synced product sets, visit Commerce Manager.