| 开发者 | webhosting4ugr |
|---|---|
| 更新时间 | 2026年4月19日 15:37 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
[wh4u_domain_lookup] shortcode or the "Domain Lookup" block to any pagewh4u-domains folder to /wp-content/plugins/[wh4u_domain_lookup] to any page, or use the "Domain Lookup" Gutenberg blockYes. You need valid API credentials from WebHosting4U to use this plugin. Without credentials, the domain search will not function.
Yes. The frontend form allows anonymous visitors to submit registration and transfer requests. These are stored as pending orders that an admin must approve before the domain is processed through the API.
Orders that fail due to temporary API issues (timeouts, server errors) are automatically queued for retry with exponential backoff. The retry queue processes items via WP-Cron.
Yes. Under Domains > Settings > General, use the Shopping Cart Redirect section. Choose WHMCS, Blesta, ClientExec, Upmind, or Custom URL template, and enter your cart base URL (or full URL templates with {domain}, {sld}, {tld}). When a visitor clicks Register or Transfer, they will be redirected to your cart with the domain pre-filled.
Yes. The plugin is fully internationalized. A Greek translation is included. Additional translations can be added via .po/.mo files in the languages/ directory.
/tlds/pricing endpoint returns registrationPrice: null for TLDs whose registry enforces multi-year registration minimums (notably .gr, which requires a 2-year minimum), so a pricing table rendered from this endpoint cannot reliably display prices for every reseller-enabled TLD. Rather than half-showing data, the "View Pricing" tile on the dashboard now links out to the authoritative WHMCS pricing page at https://webhosting4u.gr/customers/index.php?m=DomainsReseller&mg-page=Pricesadmin/class-wh4u-admin-pricing.php, rest-api/class-wh4u-rest-pricing.php, the /wh4u/v1/tlds, /wh4u/v1/tlds/pricing, /wh4u/v1/tlds/pricing/cache, and /wh4u/v1/pricing/(register|transfer) REST endpoints, the wh4u_tld_pricing_v2 transient, the loadPricing() admin JS routine, the frontend prefetchPricing() / getPriceForTld() code path, the show_pricing appearance setting, the showPricing block attribute, the data-show-pricing shortcode data attribute, and the .wh4u-domains__result-price CSS rulesrel="noopener noreferrer")registrationPrice field because they have no 1-year tier (notably .gr, whose registry enforces a 2-year minimum). extract_price() in the REST pricing controller now skips empty scalars/arrays instead of accepting the first matching key, recurses into nested period-keyed arrays picking the lowest numeric period (so {"2":"24.00","4":"48.00"} surfaces the 2-year price), and as a last resort scans period-suffixed variants like register2 or registrationPrice_2yDELETE /wh4u/v1/tlds/pricing/cache endpoint (gated by the wh4u_manage_domains capability) that clears both the wh4u_tld_pricing_v2 and wh4u_tlds_cache transients; needed because the previous normalization was cached for 12 hours and existing sites would otherwise keep serving stale empty prices after upgradeload_plugin_textdomain() on the init hook so self-hosted installs load translations correctly under WordPress 6.7+ (where gettext calls before init no longer resolve the user locale)__( 'API call failed: ' ) . $msg, $label . ' ' . __( 'Contact' ), $period . ' ' . __( 'year(s)' )) with sprintf/_n against %s/%d placeholders in admin-dashboard, admin-domains, admin-history, and notifications; word order can now be reordered per locale without code changes' yr' unit in the order history period column with a proper _n( '%d year', '%d years' ) plural form/* translators: ... */) on every new sprintf/_n call per the WordPress handbookwh4u-domains.pot (412 strings) from the updated source, merged into wh4u-domains-el.po, and translated the remaining 77 previously-untranslated Greek strings (Frontend Appearance panel, Shopping Cart Redirect, Turnstile, Reverse Proxy / Trusted IPs, Public Orders post type + status plurals, block editor title/description/keywords, encryption key notices)wh4u-domains-el.mo and the JSON translation file consumed by wp_set_script_translations(); removed two orphan JSON files whose source field held malformed artifacts ((JS, i18n)) from a prior tooling runredirection => 0 to wp_remote_post(), closing a redirect-based SSRF bypass where a crafted 3xx response could divert a webhook away from the validated/pinned hostsave_reseller_settings() in the admin reseller screen now re-verifies the wh4u_reseller_settings_nonce inside the save handler (defense-in-depth alongside the existing check_admin_referer() wrapper)(int) cast on $item->order_id in the retry queue before it reaches $wpdb->prepare() with a %d placeholder, eliminating any theoretical type-confusion path regardless of upstream callersWH4U_Logger::get_logs() method so the admin-only log reader no longer exists as latent attack surface (no callers in the plugin)wh4u_api_logs and wh4u_notifications rows older than 30 days; retention is filterable via the wh4u_log_retention_days filterwh4u_public_orders database table from activation (public orders have always been stored as a custom post type with post meta); the DROP statement in uninstall.php remains for legacy installswp_set_script_translations) so Greek (and any future locale) covers the block editor InspectorControls panel labels