/**
* Plugin Name: CF7 Dynamic Selects - País y Provincia
* Description: Rellena dinámicamente los selects de país y provincia en formularios de Contact Form 7.
* Version: 1.0
* Author: Fernando Spiluttini + ChatGPT
*/
add_filter('wpcf7_form_tag', 'cf7ds_rellenar_selects', 10, 2);
function cf7ds_rellenar_selects($tag, $unused) {
global $wpdb;
if ($tag['type'] !== 'select') return $tag;
$tag['raw_values'] = [];
$tag['values'] = [];
$tag['labels'] = [];
if ($tag['name'] === 'codigo-pais') {
$paises = $wpdb->get_results("
SELECT Denominacion AS nombre, Identificador AS codigo_pais
FROM { $wpdb->prefix }menuSelectPaises
WHERE Opcion = '1'
ORDER BY Denominacion ASC
");
foreach ($paises as $pais) {
$tag['raw_values'][] = $pais->codigo_pais;
$tag['values'][] = ($pais->codigo_pais === '724') ? $pais->codigo_pais . ':default' : $pais->codigo_pais;
$tag['labels'][] = $pais->nombre;
}
}
if ($tag['name'] === 'codigo-provincia') {
$provincias = $wpdb->get_results($wpdb->prepare("
SELECT Denominacion AS nombre, Identificador AS codigo_provincia
FROM { $wpdb->prefix }menuSelectProvincias
WHERE idPais = %s AND Opcion = '1'
ORDER BY Denominacion ASC", '724'
));
foreach ($provincias as $prov) {
$tag['raw_values'][] = $prov->codigo_provincia;
$tag['values'][] = $prov->codigo_provincia;
$tag['labels'][] = $prov->nombre;
}
}
return $tag;
}
add_action('wp_ajax_get_provincias', 'cf7ds_ajax_get_provincias');
add_action('wp_ajax_nopriv_get_provincias', 'cf7ds_ajax_get_provincias');
function cf7ds_ajax_get_provincias() {
global $wpdb;
$idPais = sanitize_text_field($_GET['pais'] ?? '');
$provincias = $wpdb->get_results($wpdb->prepare("
SELECT Denominacion AS nombre, Identificador AS codigo_provincia
FROM { $wpdb->prefix }menuSelectProvincias
WHERE idPais = %s AND Opcion = '1'
ORDER BY Denominacion ASC", $idPais
));
wp_send_json($provincias);
}
add_action('wp_enqueue_scripts', function () {
wp_register_script('cf7ds-script', '', [], null, true);
wp_enqueue_script('cf7ds-script');
wp_add_inline_script('cf7ds-script', 'const ajaxSelect = { ajaxurl: "' . admin_url('admin-ajax.php') . '" };');
wp_add_inline_script('cf7ds-script', file_get_contents(plugin_dir_path(__FILE__) . 'cf7ds.js'));
});
European Character and Virtue Association – Papers | UFV