Campi aggiuntivi nel sistema di valutazione di Woocommerce

13 feb 2014, 22:11:20
Visualizzazioni: 13.4K
Voti: 0

Ho bisogno di aggiungere campi aggiuntivi al sistema di valutazione dei prodotti WooCommerce come mostrato nell'immagine: esempio di campi aggiuntivi per le valutazioni

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&hellip;', '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?

0
Tutte le risposte alla domanda 1
3

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&hellip;', '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&hellip;', '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

17 mar 2014 09:20:47
Commenti

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.

Dan Dan
17 mar 2014 10:58:57

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.

Justice_ Justice_
17 mar 2014 11:12:58

Penso che potrebbe essere necessario modificare il file single-product.js

Justice_ Justice_
17 mar 2014 11:49:00