register(new \Crawlsy_Menus_Product_Grid_Widget()); $widgets_manager->register(new \Crawlsy_Menus_Single_Product_Widget()); } /** * Enqueue Scripts and Styles */ public function enqueue_scripts() { wp_enqueue_style( 'crawlsy-menus-styles', CRAWLSY_MENUS_PLUGIN_URL . 'assets/css/crawlsy-menus.css', [], CRAWLSY_MENUS_VERSION ); wp_enqueue_script( 'crawlsy-menus-script', CRAWLSY_MENUS_PLUGIN_URL . 'assets/js/crawlsy-menus.js', ['jquery'], CRAWLSY_MENUS_VERSION, true ); } /** * Add Admin Menu */ public function add_admin_menu() { add_menu_page( 'Crawlsy Menus', 'Crawlsy Menus', 'manage_options', 'crawlsy-menus', [$this, 'admin_page'], 'dashicons-products', 30 ); } /** * Register Plugin Settings */ public function register_settings() { register_setting('crawlsy_menus_settings', 'crawlsy_api_token'); } /** * Admin Page */ public function admin_page() { ?>
'', 'limit' => 12, 'columns' => 3, 'in_stock' => 'true' ], $atts); $products = $this->fetch_products($atts); if (!$products) { return 'No products found.
'; } ob_start(); include CRAWLSY_MENUS_PLUGIN_DIR . 'templates/product-grid.php'; return ob_get_clean(); } /** * Single Product Shortcode */ public function single_product_shortcode($atts) { $atts = shortcode_atts([ 'id' => 0 ], $atts); if (!$atts['id']) { return 'Product ID required.
'; } $product = $this->fetch_product($atts['id']); if (!$product) { return 'Product not found.
'; } ob_start(); include CRAWLSY_MENUS_PLUGIN_DIR . 'templates/single-product.php'; return ob_get_clean(); } /** * Fetch Products from API */ public function fetch_products($args = []) { $api_token = get_option('crawlsy_api_token'); if (!$api_token) { return false; } $query_args = http_build_query($args); $url = CRAWLSY_MENUS_API_URL . '/products?' . $query_args; $response = wp_remote_get($url, [ 'headers' => [ 'X-API-Key' => $api_token ], 'timeout' => 30 ]); if (is_wp_error($response)) { return false; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); return $data['products'] ?? false; } /** * Fetch Single Product from API */ public function fetch_product($id) { $api_token = get_option('crawlsy_api_token'); if (!$api_token) { return false; } $url = CRAWLSY_MENUS_API_URL . '/products/' . intval($id); $response = wp_remote_get($url, [ 'headers' => [ 'X-API-Key' => $api_token ], 'timeout' => 30 ]); if (is_wp_error($response)) { return false; } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); return $data['product'] ?? false; } } // Initialize Plugin function crawlsy_menus() { return Crawlsy_Menus_Plugin::instance(); } crawlsy_menus();