Hola @circunovo
El código tiene errores de sintaxis, suele suceder cuando copias y pegas el código directamente, sin las etiquetas correspondientes, se interpreta y se pueden modificar algunos caracteres. El código sin errores lo puedes ver aquí:
function wpcf7_generate_rand_number( $wpcf7_data ) {
$properties = $wpcf7_data->get_properties();
$shortcode = '[rand-generator]';
$mail = $properties['mail']['body'];
$mail_2 = $properties['mail_2']['body'];
$subject = $properties['mail']['subject'];
$subject2 = $properties['mail_2']['subject'];
if( preg_match( "/{$shortcode}/", $mail ) || preg_match( "/[{$shortcode}]/", $mail_2 ) ) {
$option = 'wpcf7sg_' . $wpcf7_data->id();
$sequence_number = (int)get_option( $option ) + 1;
update_option( $option, $sequence_number );
$properties['mail']['body'] = str_replace( $shortcode, $sequence_number, $mail );
$properties['mail_2']['body'] = str_replace( $shortcode, $sequence_number, $mail_2 );
$properties['mail']['subject'] = str_replace( $shortcode, $sequence_number, $subject );
$properties['mail_2']['subject'] = str_replace( $shortcode, $sequence_number, $subject2 );
$wpcf7_data->set_properties( $properties );
}
}
add_action( 'wpcf7_before_send_mail', 'wpcf7_generate_rand_number' );
Iniciador del debate
fran
(@circunovo)
Hola Jose luis!!
Gracias por la rapida respuesta/ayuda.
He colocado el nuevo codigo en el «fuctions.php» de mi tema hijo de esta forma
<?php
//rand-generator
function wpcf7_generate_rand_number( $wpcf7_data ) {
$properties = $wpcf7_data->get_properties();
$shortcode = '[rand-generator]';
$mail = $properties['mail']['body'];
$mail_2 = $properties['mail_2']['body'];
$subject = $properties['mail']['subject'];
$subject2 = $properties['mail_2']['subject'];
if( preg_match( "/{$shortcode}/", $mail ) || preg_match( "/[{$shortcode}]/", $mail_2 ) ) {
$option = 'wpcf7sg_' . $wpcf7_data->id();
$sequence_number = (int)get_option( $option ) + 1;
update_option( $option, $sequence_number );
$properties['mail']['body'] = str_replace( $shortcode, $sequence_number, $mail );
$properties['mail_2']['body'] = str_replace( $shortcode, $sequence_number, $mail_2 );
$properties['mail']['subject'] = str_replace( $shortcode, $sequence_number, $subject );
$properties['mail_2']['subject'] = str_replace( $shortcode, $sequence_number, $subject2 );
$wpcf7_data->set_properties( $properties );
}
}
add_action( 'wpcf7_before_send_mail', 'wpcf7_generate_rand_number' );
//rand-generator the end
// Exit if accessed directly
if ( !defined( 'ABSPATH' ) ) exit;
// BEGIN ENQUEUE PARENT ACTION
// AUTO GENERATED - Do not modify or remove comment markers above or below:
if ( !function_exists( 'chld_thm_cfg_locale_css' ) ):
function chld_thm_cfg_locale_css( $uri ){
if ( empty( $uri ) && is_rtl() && file_exists( get_template_directory() . '/rtl.css' ) )
$uri = get_template_directory_uri() . '/rtl.css';
return $uri;
}
endif;
add_filter( 'locale_stylesheet_uri', 'chld_thm_cfg_locale_css' );
// END ENQUEUE PARENT ACTION
por lo menos no rompe WP, asi que algo ya se ha conseguido ;).
Sin embargo al meter en el formulario el label: <label> Tu codigo
[rand-generator] </label> , no muestra el num en el formulario.
Si lo envia, pero no genera un numero aleatorio, sino que numera de forma consecutiva el email enviado…01, 02, 03…y eso no es lo que busco.
Por lo que he leido, y entiendo de esto (poco muy poco ;), en el enlace de stackoverflow, comentan que los numeros que genera son consecutivos no aleatorios…igual no es la opción que necesito 🙁
Gracias por tu tiempo!! Un saludo!.
Iniciador del debate
fran
(@circunovo)
Buenas!
Tras descartar esta opción…creo que no se ajusta a lo que busco, he retomado otra opcion que tenia y que casi, casi hace lo que busco.
Quedaria algo asi Num. aleatorio al cargar la pagina
Sigo sin conseguir incluirlo dentro del envio del formulario…pero he solucionado colocando un campo de texto donde el usuario puede pegarlo para que se incluya en el envio.
Me gustaria que el codigo aleatorio generado incluyese alguna letra, pero tampoco he encontrado la forma de hacerlo…
A grandes rasgos:
1º- he creado un archivo .js con este codigo:
function xrep_checked() {
if (document.getElementById('xrep').checked) {
return 1;
} else {
return 0;
}
}
function gen_na1() {
var min = document.getElementById("xdesde2").value;
var max = document.getElementById("xhasta2").value;
var vec = document.getElementById("xveces2").value;
var rep = xrep_checked();
var dv = document.getElementById('id_generador');
var s = document.createElement("script");
s.src = 'https://numero.wiki/generadores/servicio-json/?desde='+min+'&hasta='+max+'&numero='+vec+'&repeticion='+rep+'&json=0';
s.type = "text/javascript";
dv.appendChild(s);
try {
setTimeout('document.getElementById("g1br").innerHTML=na_respuesta.join(", ")', 1000);
} catch(err) {
document.getElementById("g1br").innerHTML='Falta de servicio';
}
}
gen_na1();
lo he renombrado como «codigo_inscripcion.js» y lo he subido a mi servidor a la carpeta «public»
2º- en el apartado de edición del formulario de CF7 he añadido este codigo:
<label> Tu codigo:
<div hidden="hidden" id="id_generador" style="margin:2em 0">
<label hidden for="xdesde2">Generador de</label>:
<input type="text" name="desde" value="0" id="xdesde2" style="width:150px"/>
<label hidden for="xhasta2">a</label>:
<input type="text" name="hasta" value="100000000" id="xhasta2" style="width:150px" />
<label hidden for="xveces2">número de repeticiones</label>:
<input type="text" name="veces" value="1" id="xveces2" style="width:150px" />
<label hidden for="xrep">sin repetición</label>:
<input hidden type="checkbox" name="rep" id="xrep" checked="checked" />
<br/><br/>
</div>
<div id="g1br" style="font-weight:bold; font-size: 1.5em"></div>
<script src="/codigo_inscripcion.js"></script>
[text* text-codigo placeholder "Copia y pega aqui tu codigo"]</label>
Con esta opción me apaño, pero…alguna idea de como generar numeros+letras? lo de incluirlo directamente (por las busquedas que he hecho en la web) creo que es bastante más complicado de lo que creia en un principio…asi que me vale tal cual esta ahora.
Un saludo!
-
Esta respuesta fue modificada hace 2 años, 9 meses por fran.
Por aquí te dejo otra opción que creo que te lo resuelve, este código para generar el código:
add_action('wpcf7_init', 'custom_code_generator');
function custom_code_generator(){
wpcf7_add_form_tag('coupon_code', 'custom_code_handler');
}
function custom_code_handler($tag){
$input_code_name = 'codigo';
$charsList = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
$lastchar = strlen($charsList) - 1;
//change the value of i to meet your requirements
for ($i=0; $i < 10; $i++){
$indice = rand(0, $lastchar);
$randomString .= $charsList[$indice];
}
//create html and return
$html = '<input type="text" readonly name="'. $input_code_name .'" value="' . $randomString . '" />';
return $html;
}
Para el formulario en Contact Form 7:
<label> Tu código:
[coupon_code] </label>
<label> Tu nombre
[text* your-name] </label>
<label> Tu correo electrónico
[email* your-email] </label>
<label> Asunto
[text* your-subject] </label>
<label> Tu mensaje (opcional)
[textarea your-message] </label>
Para el correo:
De: [your-name] <[your-email]>
Asunto: [your-subject]
Cuerpo del mensaje:
[your-message]
Tu código: [codigo]
--
Este mensaje se ha enviado desde un formulario de contacto en [_site_title] ([_site_url])
Este código está basado en How to generate dynamic tag and input values for Contact Form 7
-
Esta respuesta fue modificada hace 2 años, 9 meses por jose64. Razón: Añadir fuente
Iniciador del debate
fran
(@circunovo)
Hola!! Jose luis!!!!!!!!
Ahora SIIIIIII!!!!, ja,ja,ja. Un millon de gracias!!!!
form.num.aleatorio
…peeeeroooo (siempre hay un pero por el medio, ja,ja,ja ;)…una vez que mando el email, se reinician todos los campos…excepto el del código, que se queda tal cual. Si se vuelve a rellenar el formulario (sin recargar la pagina), con otros datos, y se envia (en este caso, a veces un usuario pide la inscripcion para varias personas y son formularios independientes)…tenemos dos formularios con datos distintos y el mismo código…lo mas sencillo (para mi) seria poner un texto indicandole al usuario que recarge la pagina para obtener un nuevo codigo, pero si hay otra forma «facilita» de hacer que tambien se reinicie el campo del código aleatorio… 😉
Muchisimas gracias por tu ayuda!!!
Un saludo!!
-
Esta respuesta fue modificada hace 2 años, 9 meses por fran.
Hola Fran.
Puedes desactivar el JavaScript añadiéndole este código:
add_filter( 'wpcf7_load_js', '__return_false' );
O redireccionar a otra página de agradecimiento con un plugin, por ejemplo:
Redirection for Contact Form 7
Successful Redirection for Contact Form 7
Iniciador del debate
fran
(@circunovo)
Hola Jose Luis!
Me quedo con la opcion del plugin para redireccionar, con eso cumple mis necesidades y funciona a la perfección.
Gracias por tu tiempo/ayuda!!