plugin = $plugin; } /** * Registers hooks. */ public function register(): void { add_action( 'admin_menu', array( $this, 'add_pages' ), 60 ); add_filter( 'plugin_action_links_' . plugin_basename( TIDELIST_FILE ), array( $this, 'action_links' ) ); } /** * Adds the pages. */ public function add_pages(): void { add_submenu_page( 'woocommerce', __( 'Tidelist', 'tidelist' ), __( 'Tidelist', 'tidelist' ), Plugin::CAPABILITY, self::SETTINGS_SLUG, array( new SettingsPage( $this->plugin ), 'render' ) ); add_submenu_page( 'woocommerce', __( 'Get started with Tidelist', 'tidelist' ), __( 'Tidelist: Get started', 'tidelist' ), Plugin::CAPABILITY, self::WELCOME_SLUG, array( new OnboardingPage( $this->plugin ), 'render' ) ); add_submenu_page( 'woocommerce', Text::channel( __( 'Connect your {channel} account', 'tidelist' ), $this->plugin->channel()->label() ), __( 'Tidelist: Connect', 'tidelist' ), Plugin::CAPABILITY, self::CONNECT_SLUG, array( new ConnectPage( $this->plugin ), 'render' ) ); add_submenu_page( 'woocommerce', __( 'Category mapping', 'tidelist' ), __( 'Tidelist: Categories', 'tidelist' ), Plugin::CAPABILITY, self::CATEGORY_SLUG, array( new CategoryMappingPage( $this->plugin ), 'render' ) ); add_submenu_page( 'woocommerce', __( 'Attribute mapping', 'tidelist' ), __( 'Tidelist: Attributes', 'tidelist' ), Plugin::CAPABILITY, self::ATTRIBUTE_SLUG, array( new AttributeMappingPage( $this->plugin ), 'render' ) ); add_submenu_page( 'woocommerce', __( 'Listings', 'tidelist' ), __( 'Tidelist: Listings', 'tidelist' ), Plugin::CAPABILITY, self::LISTINGS_SLUG, array( new ListingsPage( $this->plugin ), 'render' ) ); /** * Screens added by the Pro add-on: list of ['title' => string, 'menu_title' => string, 'slug' => string, 'callback' => callable]. * * @param array $tabs Screens. */ foreach ( (array) apply_filters( 'tidelist_register_admin_tabs', array() ) as $tab ) { if ( isset( $tab['title'], $tab['menu_title'], $tab['slug'], $tab['callback'] ) && is_callable( $tab['callback'] ) ) { add_submenu_page( 'woocommerce', (string) $tab['title'], (string) $tab['menu_title'], Plugin::CAPABILITY, (string) $tab['slug'], $tab['callback'] ); } } add_submenu_page( 'woocommerce', __( 'Tidelist log', 'tidelist' ), __( 'Tidelist log', 'tidelist' ), Plugin::CAPABILITY, self::LOG_SLUG, array( new LogPage( $this->plugin ), 'render' ) ); } /** * "Settings" link on the Plugins screen. * * @param array $links Links. */ public function action_links( array $links ): array { array_unshift( $links, sprintf( '%s', esc_url( self::settings_url() ), esc_html__( 'Settings', 'tidelist' ) ) ); return $links; } /** * URL of the first-run guide. */ public static function welcome_url(): string { return admin_url( 'admin.php?page=' . self::WELCOME_SLUG ); } /** * URL of the Listings screen. */ public static function listings_url(): string { return admin_url( 'admin.php?page=' . self::LISTINGS_SLUG ); } /** * URL of the category mapping screen. */ public static function categories_url(): string { return admin_url( 'admin.php?page=' . self::CATEGORY_SLUG ); } /** * URL of the attribute mapping screen. * * @param int $category Marketplace category to show (0 = the first). * @param string $channel_id Channel ('' = the default channel). */ public static function attributes_url( int $category = 0, string $channel_id = '' ): string { return admin_url( 'admin.php?page=' . self::ATTRIBUTE_SLUG . ( $category ? '&remote_cat=' . $category : '' ) . ( '' !== $channel_id ? '&channel=' . rawurlencode( $channel_id ) : '' ) ); } /** * URL of the connect wizard. * * @param string $channel_id Channel ('' = the default channel). */ public static function connect_url( string $channel_id = '' ): string { return admin_url( 'admin.php?page=' . self::CONNECT_SLUG . ( '' !== $channel_id ? '&channel=' . rawurlencode( $channel_id ) : '' ) ); } /** * URL of the settings page. */ public static function settings_url(): string { return admin_url( 'admin.php?page=' . self::SETTINGS_SLUG ); } }