actions = array(); $this->filters = array(); } /** * Add a new action to the collection * * @param string $hook The name of the WordPress action. * @param object $component A reference to the instance of the object on which the action is defined. * @param string $callback The name of the function definition on the $component. * @param int $priority Optional. The priority at which the function should be fired. Default 10. * @param int $accepted_args Optional. The number of arguments that should be passed to the callback. Default 1. */ public function add_action( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { $this->actions = $this->add( $this->actions, $hook, $component, $callback, $priority, $accepted_args ); } /** * Add a new filter to the collection * * @param string $hook The name of the WordPress filter. * @param object $component A reference to the instance of the object on which the filter is defined. * @param string $callback The name of the function definition on the $component. * @param int $priority Optional. The priority at which the function should be fired. Default 10. * @param int $accepted_args Optional. The number of arguments that should be passed to the callback. Default 1. */ public function add_filter( $hook, $component, $callback, $priority = 10, $accepted_args = 1 ) { $this->filters = $this->add( $this->filters, $hook, $component, $callback, $priority, $accepted_args ); } /** * A utility function for registering hooks into a single collection * * @param array $hooks The collection of hooks being registered. * @param string $hook The name of the WordPress filter being registered. * @param object $component A reference to the instance of the object on which the filter is defined. * @param string $callback The name of the function definition on the $component. * @param int $priority The priority at which the function should be fired. * @param int $accepted_args The number of arguments that should be passed to the callback. * @return array The collection of actions and filters registered with WordPress. */ private function add( $hooks, $hook, $component, $callback, $priority, $accepted_args ) { $hooks[] = array( 'hook' => $hook, 'component' => $component, 'callback' => $callback, 'priority' => $priority, 'accepted_args' => $accepted_args, ); return $hooks; } /** * Register the filters and actions with WordPress */ public function run() { // Register cron handler $cron = new WBC_Cron(); $this->add_action( 'wbc_product_sync_event', $cron, 'run_scheduled_sync' ); // Register order sync handler $order_sync = new WBC_Order_Sync(); $this->add_action( 'woocommerce_order_status_processing', $order_sync, 'sync_order', 10, 1 ); $this->add_action( 'woocommerce_payment_complete', $order_sync, 'sync_order', 10, 1 ); // Register admin handler if ( is_admin() ) { $admin = new WBC_Admin(); $this->add_action( 'admin_menu', $admin, 'add_admin_menu' ); $this->add_action( 'admin_init', $admin, 'register_settings' ); $this->add_action( 'admin_enqueue_scripts', $admin, 'enqueue_scripts' ); $this->add_action( 'wp_ajax_wbc_test_connection', $admin, 'ajax_test_connection' ); $this->add_action( 'wp_ajax_wbc_manual_sync', $admin, 'ajax_manual_sync' ); $this->add_action( 'wp_ajax_wbc_clear_logs', $admin, 'ajax_clear_logs' ); $this->add_action( 'wp_ajax_wbc_get_companies', $admin, 'ajax_get_companies' ); $this->add_action( 'admin_init', $admin, 'handle_csv_export' ); // Add settings link to plugins page $this->add_filter( 'plugin_action_links_' . WBC_PLUGIN_BASENAME, $admin, 'add_settings_link' ); } // Register all actions foreach ( $this->actions as $hook ) { add_action( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); } // Register all filters foreach ( $this->filters as $hook ) { add_filter( $hook['hook'], array( $hook['component'], $hook['callback'] ), $hook['priority'], $hook['accepted_args'] ); } } }