Salta al contenuto
NetCov

Guide · WordPress e PHP

Guide / WordPress e PHP

Verifica copertura su WordPress: plugin o snippet PHP

Due strade: il plugin ufficiale (blocco + shortcode, zero codice) oppure uno shortcode artigianale con proxy REST se vuoi il pieno controllo del markup. In entrambi i casi la chiave resta sul server.

1 · Il plugin (consigliato)

  • Blocco Gutenberg netcov-coverage/coverage-form + shortcode [netcov_coverage]
  • Proxy REST con throttle per-IP e cache transient (1h copertura / 15min autocomplete)
  • Footer di attribuzione CC BY 4.0 incluso di default
Repository del plugin ↗

2 · Shortcode artigianale

php
// functions.php — shortcode + proxy (chiave in wp-config.php:
// define('NETCOV_API_KEY', getenv('NETCOV_API_KEY'));)
add_shortcode('netcov_form', function () {
  return '<form id="ncov"><input name="city" placeholder="Comune">'
    . '<input name="address" placeholder="Via e numero civico">'
    . '<button>Verifica copertura</button><div id="ncov-out"></div></form>';
});

add_action('rest_api_init', function () {
  register_rest_route('netcov/v1', '/coverage', [
    'methods' => 'GET',
    'callback' => function ($req) {
      $city = sanitize_text_field($req['city'] ?? '');
      $address = sanitize_text_field($req['address'] ?? '');
      if ($city === '' || $address === '') {
        return new WP_Error('bad_request', 'city e address richiesti', ['status' => 400]);
      }
      $cache_key = 'netcov_' . md5($city . '|' . $address);
      if (false !== ($hit = get_transient($cache_key))) {
        return $hit;
      }
      $r = wp_remote_get('https://api.netcov.io/coverage/italy?' . http_build_query(
        ['address' => $address . ', ' . $city, 'limit' => 8]
      ), ['headers' => ['Authorization' => 'Bearer ' . NETCOV_API_KEY], 'timeout' => 10]);
      $code = wp_remote_retrieve_response_code($r);
      $body = json_decode(wp_remote_retrieve_body($r), true);
      if ($code < 200 || $code >= 300 || !is_array($body)) {
        return new WP_Error('netcov_error', 'Servizio non disponibile, riprova', ['status' => 502]);
      }
      set_transient($cache_key, $body, HOUR_IN_SECONDS);
      return $body;
    },
    // Solo visitatori loggati OPPURE aggiungi throttle per IP
    // (vedi il plugin ufficiale per l'implementazione completa).
    'permission_callback' => 'is_user_logged_in',
  ]);
});

Domande frequenti

Vedi anche il widget embeddabile se preferisci non toccare PHP, e i codici di errore per gestire i casi limite.

Esiste un plugin WordPress per la verifica copertura?

Sì: il plugin netcov-coverage fornisce blocco Gutenberg e shortcode con proxy REST integrato, così la chiave API non lascia mai il server. È la via più rapida su WordPress.

Come evito di esporre la chiave API nel frontend WordPress?

Tutte le chiamate passano da un endpoint REST lato server (il tuo tema o il plugin), che aggiunge l'header Authorization. Il browser chiama solo il tuo dominio.

Posso mettere in cache le risposte?

Sì, ed è consigliato: transients da 1 ora per la copertura e 15 minuti per l'autocomplete, con chiave md5 della query. Riduci latenza e consumo di quota.

Quanta quota consumano autocomplete e copertura?

Ogni chiamata di autocomplete e ogni chiamata di copertura consumano quota del tuo piano (chiavi gratuite: circa 30 richieste al minuto e 1.000 al giorno). L'autocomplete ha un budget separato e più ampio (15x). Debounce di 250 ms e cache di 60 secondi tengono i consumi sotto controllo; /credits mostra i residui in tempo reale.

Pronto a integrare?

Crea la chiave gratuita per integrare, oppure prova gli endpoint nel Playground senza account. Guide per altri stack: Guida Next.js, Guida Django.