config; } public function run( $config ) { if ( ! $this->is_woocommerce_activated() ) { return; } $this->config = $config; Logger::setConfig( ! empty( $this->config['logger'] ) ? $this->config['logger'] : [] ); $this->run_hooks(); } public function run_hooks() { if ( is_network_admin() ) { self::preventNetworkWideActivation(); return; } register_activation_hook( ADSCALE_PLUGIN_FILE, [ PluginActivation::class, 'activateHandler' ] ); register_deactivation_hook( ADSCALE_PLUGIN_FILE, [ PluginActivation::class, 'deactivateHandler' ] ); // Settings menu add_action( 'admin_menu', [ Settings::class, 'menu' ], 777 ); add_action( 'admin_init', [ Settings::class, 'settings_init' ], 777 ); // meta tags google-site-verification, facebook-domain-verification if ( ! Helper::is_shopy_mode() ) { add_action( 'wp_head', [ MetaTags::class, 'put_google_site_verification_tag' ], 777 ); add_action( 'wp_head', [ MetaTags::class, 'put_facebook_domain_verification_tag' ], 777 ); } // load assets if ( ! Helper::is_shopy_mode() ) { add_action( 'wp_enqueue_scripts', [ Assets::class, 'load_assets' ], 777 ); } add_action( 'admin_enqueue_scripts', [ Assets::class, 'load_admin_assets' ], 777 ); // Redirect after plugin activation add_action( 'admin_init', [ PluginActivation::class, 'redirectAfterActivation' ], 777 ); // add data-adscale-product_price if ( ! Helper::is_shopy_mode() ) { add_filter( 'woocommerce_loop_add_to_cart_args', [ WooHandlers::class, 'change_add_to_cart_args' ], 777, 2 ); } // add js script with trigger function from adscale script if ( ! Helper::is_shopy_mode() ) { add_action( 'woocommerce_add_to_cart', [ WooHandlers::class, 'trigger_after_add_to_cart_event' ], 777, 6 ); } // Add functionality on Order creation if ( ! Helper::is_shopy_mode() ) { add_action( 'woocommerce_checkout_order_processed', [ WooHandlers::class, 'save_adscale_ad_link' ], 777, 3 ); add_action( 'woocommerce_checkout_order_processed', [ WooHandlers::class, 'save_session_data_as_custom_order_meta_data' ], 777, 3 ); } // Checkout page Opt-in Checkbox Setup if (Helper::get_opt_in_enabled() && ! Helper::is_shopy_mode()){ add_action(Helper::get_opt_in_action(),[WooHandlers::class,'wc_checkout_page_front']); add_action( 'woocommerce_checkout_update_order_meta', [ WooHandlers::class, 'save_optin_order' ], 777, 2 ); } // Add cookie for Order after status changed to needed if ( ! Helper::is_shopy_mode() ) { add_action( 'woocommerce_order_status_processing', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); add_action( 'woocommerce_order_status_completed', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); add_action( 'woocommerce_order_status_on-hold', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); if ( Helper::is_consider_pending_orders() ) { add_action( 'woocommerce_after_order_object_save', [ WooHandlers::class, 'new_order' ], 777, 1 ); add_action( 'woocommerce_order_status_pending', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); add_action( 'woocommerce_order_status_cancelled', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); add_action( 'woocommerce_order_status_failed', [ WooHandlers::class, 'order_status_changed' ], 777, 2 ); } } // Tracking Changes if ( ! Helper::is_shopy_mode() ) { // category add_action( 'edited_product_cat', [ WooHandlers::class, 'wc_changes_category' ], 777 ); add_action( 'created_product_cat', [ WooHandlers::class, 'wc_changes_category' ], 777 ); add_action( 'delete_product_cat', [ WooHandlers::class, 'wc_changes_category' ], 777 ); // product add_action( 'woocommerce_process_product_meta', [ WooHandlers::class, 'wc_changes_process_product_meta' ], 777, 2 ); add_action( 'woocommerce_new_product', [ WooHandlers::class, 'wc_changes_new_and_update_product' ], 777 ); add_action( 'woocommerce_new_product_variation', [ WooHandlers::class, 'wc_changes_new_and_update_product' ], 777 ); add_action( 'woocommerce_update_product', [ WooHandlers::class, 'wc_changes_new_and_update_product' ], 777 ); add_action( 'woocommerce_update_product_variation', [ WooHandlers::class, 'wc_changes_new_and_update_product' ], 777 ); add_action( 'woocommerce_no_stock', [ WooHandlers::class, 'wc_changes_product_no_stock' ], 777 ); // common: product add_action( 'wp_trash_post', [ WooHandlers::class, 'wc_changes_trash' ], 777 ); add_action( 'untrashed_post', [ WooHandlers::class, 'wc_changes_untrash' ], 777 ); // order add_action( 'woocommerce_update_order', [ WooHandlers::class, 'wc_changes_update_order' ], 777 ); } // heartbeat add_action( 'init', [ Heartbeat::class, 'activate' ] ); // Api add_action( 'init', [ ApiHandler::class, 'addEndpoints' ], 0 ); add_action( 'parse_request', [ ApiHandler::class, 'handleApiRequests' ], 0 ); add_filter( 'query_vars', [ ApiHandler::class, 'addQueryVars' ], 0 ); if ( ! Helper::is_shopy_mode() ) { // ajax: adscale/ajaxGetCart add_action( 'wp_ajax_adscale/ajaxGetCart', [ Cart::class, 'ajaxGetCart' ] ); add_action( 'wp_ajax_nopriv_adscale/ajaxGetCart', [ Cart::class, 'ajaxGetCart' ] ); // Add adscale cart id data to order responses(Legacy API) add_filter( 'woocommerce_api_order_response', [ WooHandlers::class, 'wc_legacy_api_order_filter' ], 10, 2 ); // Add adscale cart id data to order responses(WP Rest API) add_filter( 'woocommerce_rest_prepare_shop_order_object', [ WooHandlers::class, 'wc_api_order_filter' ], 10, 3 ); } // Caching Behavior // Wp Rocket: exclude from minification/concatenation add_filter( 'rocket_minify_excluded_external_js', [ CachingBehavior::class, 'wpRocketExcludeJs' ], 777 ); // Caching Behavior // ezcache: exclude from minification/concatenation add_filter( 'ezcache_excluded_minify_files', [ CachingBehavior::class, 'wpEzcacheExcludeJs' ], 777 ); } public function is_woocommerce_activated() { $blog_plugins = get_option( 'active_plugins', [] ); $site_plugins = is_multisite() ? (array) maybe_unserialize( get_site_option( 'active_sitewide_plugins' ) ) : []; return in_array( 'woocommerce/woocommerce.php', $blog_plugins, true ) || isset( $site_plugins['woocommerce/woocommerce.php'] ); } public static function preventNetworkWideActivation() { register_activation_hook( ADSCALE_PLUGIN_FILE, function ( $network_wide ) { if ( $network_wide ) { deactivate_plugins( plugin_basename( ADSCALE_PLUGIN_FILE ), true, true ); wp_die( esc_html__( 'Plugin "AdScale" can`t be activate for all network. Please, go to the target site and activate it.', 'adscale-ai' ) ); } } ); add_action( 'network_admin_plugin_action_links_' . plugin_basename( ADSCALE_PLUGIN_FILE ), function ( $actions, $plugin_file, $plugin_data, $context ) { if ( isset( $actions['activate'] ) ) { unset( $actions['activate'] ); } return $actions; }, 10, 4 ); } }