$current_version, 'main_plugin_file' => $main_plugin_file, 'plugin_slug' => $plugin_slug, 'time' => current_time('mysql') ]; // URL to your Gitea releases API $gitea_api_url = 'https://repo.anhonesthost.net/api/v1/repos/wp-plugins/fourth-wall-embed-wp/releases/latest'; // Use cURL to fetch release data $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $gitea_api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']); curl_setopt($ch, CURLOPT_USERAGENT, 'WordPress/Fourth-Wall-Plugin-Updater'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); curl_close($ch); if ($response) { $release_info = json_decode($response); // Get latest version from tag name $latest_version = $release_info->tag_name; // Simple version comparison - we want any update to trigger if version is different if ($current_version != $latest_version) { // Get the download URL for the ZIP $download_url = null; if (isset($release_info->assets) && is_array($release_info->assets)) { foreach ($release_info->assets as $asset) { if (isset($asset->name) && strpos($asset->name, '.zip') !== false) { $download_url = $asset->browser_download_url; break; } } } // Hook into WordPress update system add_filter('site_transient_update_plugins', function($transient) use ($plugin_slug, $current_version, $latest_version, $download_url) { // Initialize if needed if (!is_object($transient)) { $transient = new stdClass(); } if (empty($transient->checked)) { $transient->checked = []; } // Add our plugin to the checked list $transient->checked[$plugin_slug] = $current_version; if (empty($transient->response)) { $transient->response = []; } // Add to the update list $transient->response[$plugin_slug] = (object) [ 'id' => 'fourthwall-store-embed', 'slug' => 'fourthwall-store-embed', 'plugin' => $plugin_slug, 'new_version' => $latest_version, 'url' => 'https://repo.anhonesthost.net/wp-plugins/fourth-wall-embed-wp', 'package' => $download_url, 'icons' => [], 'banners' => [], 'tested' => '6.8', 'requires' => '6.2', 'compatibility' => new stdClass(), ]; return $transient; }); } } } add_action('admin_init', 'fwembed_check_for_updates'); // Add plugin information for the details popup/changelog add_filter('plugins_api', function($result, $action, $args) { // Only handle requests for our plugin $plugin_slug = 'fourthwall-store-embed'; // The slug is directory name if ($action !== 'plugin_information' || !isset($args->slug) || $args->slug !== $plugin_slug) { return $result; } // Get latest release info from Gitea API $gitea_api_url = 'https://repo.anhonesthost.net/api/v1/repos/wp-plugins/fourth-wall-embed-wp/releases/latest'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $gitea_api_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json']); curl_setopt($ch, CURLOPT_USERAGENT, 'WordPress/Fourth-Wall-Plugin-Updater'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); curl_close($ch); if (!$response) { return $result; // Keep default result if API call fails } $release_info = json_decode($response); // Build plugin info object $plugin_info = new stdClass(); $plugin_info->name = 'Fourthwall Store Embed'; $plugin_info->slug = $plugin_slug; $plugin_info->version = $release_info->tag_name; $plugin_info->author = 'Joshua Knapp'; $plugin_info->homepage = 'https://repo.anhonesthost.net/wp-plugins/fourth-wall-embed-wp'; $plugin_info->requires = '5.0'; $plugin_info->tested = '6.8'; $plugin_info->downloaded = 10; $plugin_info->last_updated = $release_info->published_at; // Format the release notes $changelog = !empty($release_info->body) ? $release_info->body : 'No changelog provided for this release.'; // Handle empty changelog if (empty(trim($changelog))) { $changelog = "Version " . $release_info->tag_name . "\n\n" . "Released on " . date('F j, Y', strtotime($release_info->published_at)) . "\n\n" . "* Updated plugin files"; } // Format sections for display $plugin_info->sections = [ 'description' => '

Embed Fourthwall Store in WordPress.

', 'changelog' => '
' . esc_html($changelog) . '
', 'installation' => '

Upload the plugin to your WordPress site and activate it.

' ]; // Download link $download_url = null; if (isset($release_info->assets) && is_array($release_info->assets)) { foreach ($release_info->assets as $asset) { if (isset($asset->name) && strpos($asset->name, '.zip') !== false) { $download_url = $asset->browser_download_url; break; } } } $plugin_info->download_link = $download_url; return $plugin_info; }, 10, 3);