Ciao,
Ho creato un plugin WordPress con un form che deve spedire i dati di un form alla tabella wp_postmeta del database, ho seguito le pratiche migliori specificate da WordPress stesso ed il plugin funziona correttamente, infatti i valori del form vengono salvati nel database poi vengono presi e inseriti in un div.
Ora il mio problema è capire come riuscire a passare i valori dei campi del form ad una variabile PHP senza che debba ricaricare tutta la pagina perchè questa variabile PHP venga popolata con il valore che mi interessa.
Ho bisogno di fare questo perchè poi queste variabili con i valori del form devono andare a popolare delle funzioni PHP
Questo è il codice su cui ho lavorato, mi piacerebbe sapere voi come risolvereste questo problema grazie.
Codice della pagina isk.php nella cartella del plugin
codice:
function isk_calc( $content ) { global $post;
// controllo per il post type
if ( ! isset( $post->post_type ) || $post->post_type != 'listing' ) return $content;
// controllo anche se siamo all'interno di un post valido, controllando l'esistenza di un ID valido
if ( ! isset( $post->ID ) ) return $content;
// recupero l'attuale votazione memorizzata all'interno del post
ob_start();
?>
<div class="post-rate">
<p class="calc-info">
<b class="date-count"></b>
</p>
<div class="rating">
<form method="post" id="post-calc">
<input type="date" name="dataskipass" action="" required></input>
<fieldset class="tipo-eta one-half last">
<label>Età</label>
<select id="tipo-eta" name="tipo-eta">
<option value="adulto">Adulto</option>
<?php if(get_field('data_senior')){?>
<option value="senior">Senior nati prima del <?php formatting_date(get_field('data_senior'),'','')?></option>
<? }?>
<?php if(get_field('data_under18')){?>
<option value="teen">Teen nati dopo il <?php formatting_date(get_field('data_under18'),'','')?></option>
<? }?>
<?php if(get_field('data_junior')){?>
<option value="junior">Junior nati dopo il <?php formatting_date(get_field('data_junior'),'','')?></option>
<? }?>
<?php if(get_field('data_baby')){?>
<option value="baby">Baby nati dopo il <?php formatting_date(get_field('data_baby'),'','')?></option>
<? }?>
</select>
</fieldset>
<fieldset class="tipo-skipass one-half last">
<label>Tipo Skipass</label>
<select id="tipo-skipass" name="tiposkipass">
<?php if(get_field('giornaliero_adulto_min')){?>
<option value="giornaliero">Giornaliero</option>
<? }?>
<?php if(get_field('5gg_adulto_min')){?>
<option value="5giorni">5 giorni</option>
<? }?>
<?php if(get_field('7gg_adulto_min')){?>
<option value="7giorni">7 giorni</option>
<? }?>
<?php if(get_field('stagionale_adulto_max')){?>
<option value="stagionale">Stagionale</option>
<? }?>
</select>
</fieldset>
<input type="number" name="nskipass"></input>
<input type="number" name="budget"></input>
<br />
<input type="hidden" name="post_id" value="<?php echo $post->ID ?>" />
<input type="submit" value="<?php _e( 'Vota!', 'isk' ) ?>" />
<img src="<?php echo plugins_url( 'loading.gif', __FILE__ ) ?>" style="display:none;" class="loading" />
</form>
</div>
</div>
<?php
return ob_get_clean().$content ;
}
add_filter( 'the_content', 'isk_calc' );
function isk_enqueue_assets() {
wp_enqueue_script( 'isk-custom', plugins_url( 'script.js' , __FILE__ ), array( 'jquery' ) );
wp_localize_script( 'isk-custom', 'isk_vars', array(
'ajaxurl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'isk-calc' ))
);
}
add_action( 'wp_enqueue_scripts', 'isk_enqueue_assets' );
function isk_add_calc() {
if ( ! wp_verify_nonce( $_REQUEST['isk_nonce'], 'isk-calc' ) )
die ( 'Non autorizzato!');
$data_skipass = $_REQUEST['dataskipass'];
$tipo_skipass = $_REQUEST['tiposkipass'];
$tipo_eta = $_REQUEST['tipoeta'];
$n_skipass = $_REQUEST['nskipass'];
$budget = $_REQUEST['budget'];
$post_id = intval( $_REQUEST['post_id'] );
update_post_meta( $_REQUEST['post_id'], '_post_data_skipass', $data_skipass);
update_post_meta( $_REQUEST['post_id'], '_post_n_skipass', $n_skipass);
update_post_meta( $_REQUEST['post_id'], '_post_budget_skipass', $budget);
update_post_meta( $_REQUEST['post_id'], '_post_tipo_skipass', $tipo_skipass);
update_post_meta( $_REQUEST['post_id'], '_post_tipo_eta', $tipo_eta);
$valori = array(
'tiposkipass' => $tipo_skipass,
'tipoeta' => $tipo_eta,
'nskipass' => $n_skipass,
'budget' => $budget,
'dataskipass' => $data_skipass,
);
echo json_encode($valori);
die();
}
add_action( 'wp_ajax_add_post_rating', 'isk_add_calc' );
add_action( 'wp_ajax_nopriv_add_post_rating', 'isk_add_calc' );
Questo il codice jQuery nel file script.js nella cartella del plugin
codice:
jQuery(document).ready(function($){
$('#post-calc').on( 'submit', function(e){
e.preventDefault();
var form = $(this),
dataskipass = form.find('input[name=dataskipass]').val();
nskipass = form.find('input[name=nskipass]').val();
budget = form.find('input[name=budget]').val();
loading = form.find('img.loading');
loading.show();
$.post(
isk_vars.ajaxurl,
{
// il nome dell'action che utilizzeremo con il gancio wp_ajax_
action : 'add_post_rating',
post_id : form.find('input[name=post_id]').val(),
dataskipass:form.find('input[name=dataskipass]').val(),
nskipass : form.find('input[name=nskipass]').val(),
budget : form.find('input[name=budget]').val(),
// controllo di sicurezza tramite il nonce
isk_nonce : isk_vars.nonce
},
function( response ) {
loading.hide();
$('.calc-info').find('b.date-count').text( response.dataskipass + response.nskipass + response.nskipass);
},
'json'
);
});
});