Campi aggiuntivi nel sistema di valutazione di Woocommerce
Ho bisogno di aggiungere campi aggiuntivi al sistema di valutazione dei prodotti WooCommerce come mostrato nell'immagine:
Ho aperto questo file: /wp-content/plugins/woocommerce/templates/single-product-reviews.php e ho trovato queste righe:
$comment_form = array(
'title_reply' => $title_reply,
'comment_notes_before' => '',
'comment_notes_after' => '',
'fields' => array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Nome', 'woocommerce' ) . '</label> ' . '<span class="required">*</span>' .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="30" aria-required="true" /></p>',
'email' => '<p class="comment-form-email"><label for="email">' . __( 'Email', 'woocommerce' ) . '</label> ' . '<span class="required">*</span>' .
'<input id="email" name="email" type="text" value="' . esc_attr( $commenter['comment_author_email'] ) . '" size="30" aria-required="true" /></p>',
),
'label_submit' => __( 'Invia Recensione', 'woocommerce' ),
'logged_in_as' => '',
'comment_field' => ''
);
e questa parte:
$comment_form['comment_field'] = '<p class="comment-form-rating"><label for="rating">' . __( 'Valutazione', 'woocommerce' ) .'</label><select name="rating" id="rating">
<option value="">'.__( 'Valuta…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfetto', 'woocommerce' ).'</option>
<option value="4">'.__( 'Buono', 'woocommerce' ).'</option>
<option value="3">'.__( 'Nella media', 'woocommerce' ).'</option>
<option value="2">'.__( 'Non male', 'woocommerce' ).'</option>
<option value="1">'.__( 'Scarso', 'woocommerce' ).'</option>
</select></p>';
Esiste un modo per aggiungere altri menu a tendina?

Ho lavorato su questo da solo con pochissima esperienza di programmazione.
Finora ho scoperto che puoi aggiungere un altro valore ma devi aggiornare alcuni file nel template di woocommerce. Nel file single-product-reviews.php
, basta ripetere il codice da <p>
a </p>
. Guarda dove ho aggiunto la selezione a stelle newrating
if ( get_option('woocommerce_enable_review_rating') == 'yes' ) {
$comment_form['comment_field'] = '<p class="comment-form-rating"><label for="rating">' . __( 'Valutazione', 'woocommerce' ) .'</label><select name="rating" id="rating">
<option value="">'.__( 'Valuta…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfetto', 'woocommerce' ).'</option>
<option value="4">'.__( 'Buono', 'woocommerce' ).'</option>
<option value="3">'.__( 'Medio', 'woocommerce' ).'</option>
<option value="2">'.__( 'Non male', 'woocommerce' ).'</option>
<option value="1">'.__( 'Scarso', 'woocommerce' ).'</option>
</select></p>
aggiungi il nuovo codice qui sotto:
<p class="comment-form-rating"><label for="newrating">' . __( 'Nuova Valutazione', 'woocommerce' ) .'</label><select name="newrating" id="newrating">
<option value="">'.__( 'Valuta…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfetto', 'woocommerce' ).'</option>
<option value="4">'.__( 'Buono', 'woocommerce' ).'</option>
<option value="3">'.__( 'Medio', 'woocommerce' ).'</option>
<option value="2">'.__( 'Non male', 'woocommerce' ).'</option>
<option value="1">'.__( 'Scarso', 'woocommerce' ).'</option>
</select></p>;
Dopo aver salvato questo, dovresti essere in grado di vedere il nuovo campo a stelle, o possibilmente un menu a discesa poiché non abbiamo definito newrating come stile CSS da nessuna parte. Puoi farlo se vuoi. Il campo delle valutazioni appare sul modulo, ma non farà ancora nulla finché non imposti il nuovo comments_meta nel database.
Creiamo ora il nuovo comment_meta per memorizzare questi dati per il campo NewRating, che sarebbe all'interno del file /wp-content/plugins/woocommerce/includes/class-wc-comments.php
. Trova questo codice:
public function add_comment_rating( $comment_id ) {
if ( isset( $_POST['rating'] ) ) {
if ( ! $_POST['rating'] || $_POST['rating'] > 5 || $_POST['rating'] < 0 )
return;
add_comment_meta( $comment_id, 'rating', (int) esc_attr( $_POST['rating'] ), true );
$this->clear_transients( $comment_id );
}
e ripetilo qui sotto:
if ( isset( $_POST['newrating'] ) ) {
if ( ! $_POST['newrating'] || $_POST['newrating'] > 5 || $_POST['newrating'] < 0 )
return;
add_comment_meta( $comment_id, 'newrating', (int) esc_attr( $_POST['newrating'] ), true );
$this->clear_transients( $comment_id );
}
}
La funzione add_comment_meta crea il campo nella tabella comments_meta di WordPress e lo collega agli ID del commento e del post. Quindi ora hai memorizzato un secondo valore di valutazione nel database.
Il passo successivo sarebbe visualizzare la seconda valutazione quando vengono mostrate le recensioni. Questo viene fatto modificando il file:
/single-product/review.php
Aggiungi una riga vicino alla parte superiore dove puoi vedere $rating
che è sostanzialmente un copia e incolla:
$newrating = intval( get_comment_meta( $comment->comment_ID, 'newrating', true ) );
E poi dopo l'istruzione if intorno alla riga 26, copia e incolla tutto questo codice e cambia la variabile in newrating
<?php if ( $newrating && get_option( 'woocommerce_enable_review_rating' ) == 'yes' ) : ?>
<div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating" class="star-rating" title="<?php echo sprintf(__( 'Valutato %d su 5', 'woocommerce' ), $newrating) ?>">
<span style="width:<?php echo ( intval( get_comment_meta( $GLOBALS['comment']->comment_ID, 'newrating', true ) ) / 5 ) * 100; ?>%"><strong itemprop="ratingValue"><?php echo intval( get_comment_meta( $GLOBALS['comment']->comment_ID, 'newrating', true ) ); ?></strong><?php _e( 'su 5', 'woocommerce' ); ?></span>
</div>
<?php endif; ?>
Questa ultima sezione di codice stamperà il newrating
se esiste
Sto ancora sperimentando per avere una riga di circa 10 categorie di recensioni, e poi calcolare la media di queste per creare la valutazione complessiva. Finora sono arrivato solo fino a qui.
Tieni presente che tutto questo verrebbe cancellato se aggiorni il plugin Woocommerce, quindi usa i template quando possibile. Se sapessi come fare, lo trasformerei in un plugin, ma sono solo un principiante in WP. Saluti

Ho ottenuto ciò di cui avevo bisogno creando un plugin personalizzato per il sistema di valutazione. Comunque, grazie per la tua risposta, potrebbe essermi utile in futuro.

Puoi condividere anche la tua soluzione? Sto avendo difficoltà a modificare gli stili per adattarli alle stelle, riesco solo a visualizzare il menu a discesa di selezione.
