Câmpuri adiționale în sistemul de evaluare Woocommerce
Am nevoie să adaug câmpuri suplimentare la sistemul de evaluare a produselor WooCommerce, ca în această imagine:
Am deschis acest fișier: /wp-content/plugins/woocommerce/templates/single-product-reviews.php și am observat următoarele linii:
$comment_form = array(
'title_reply' => $title_reply,
'comment_notes_before' => '',
'comment_notes_after' => '',
'fields' => array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Nume', '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' => __( 'Trimite Recenzia', 'woocommerce' ),
'logged_in_as' => '',
'comment_field' => ''
);
și acest cod:
$comment_form['comment_field'] = '<p class="comment-form-rating"><label for="rating">' . __( 'Evaluare', 'woocommerce' ) .'</label><select name="rating" id="rating">
<option value="">'.__( 'Alegeți...', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfect', 'woocommerce' ).'</option>
<option value="4">'.__( 'Bun', 'woocommerce' ).'</option>
<option value="3">'.__( 'Mediu', 'woocommerce' ).'</option>
<option value="2">'.__( 'Nu atât de rău', 'woocommerce' ).'</option>
<option value="1">'.__( 'Foarte slab', 'woocommerce' ).'</option>
</select></p>';
Există vreo modalitate prin care pot adăuga alte câmpuri de tip select?

Am lucrat la asta singur, având foarte puțină experiență în codare.
Până acum am descoperit că poți adăuga o altă valoare, dar trebuie să actualizezi câteva fișiere din șablonul WooCommerce. În single-product-reviews.php
, pur și simplu repetă codul de la <p>
până la </p>
. Vezi unde am adăugat selecția cu stele pentru newrating
:
if ( get_option('woocommerce_enable_review_rating') == 'yes' ) {
$comment_form['comment_field'] = '<p class="comment-form-rating"><label for="rating">' . __( 'Rating', 'woocommerce' ) .'</label><select name="rating" id="rating">
<option value="">'.__( 'Rate…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfect', 'woocommerce' ).'</option>
<option value="4">'.__( 'Good', 'woocommerce' ).'</option>
<option value="3">'.__( 'Average', 'woocommerce' ).'</option>
<option value="2">'.__( 'Not that bad', 'woocommerce' ).'</option>
<option value="1">'.__( 'Very Poor', 'woocommerce' ).'</option>
</select></p>
adaugă codul nou mai jos:
<p class="comment-form-rating"><label for="newrating">' . __( 'New Rating', 'woocommerce' ) .'</label><select name="newrating" id="newrating">
<option value="">'.__( 'Rate…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfect', 'woocommerce' ).'</option>
<option value="4">'.__( 'Good', 'woocommerce' ).'</option>
<option value="3">'.__( 'Average', 'woocommerce' ).'</option>
<option value="2">'.__( 'Not that bad', 'woocommerce' ).'</option>
<option value="1">'.__( 'Very Poor', 'woocommerce' ).'</option>
</select></p>;
După ce salvezi asta, ar trebui să poți vedea noul câmp cu stele, sau poate un meniu derulant, deoarece nu am definit nicăieri stilul CSS pentru newrating
. Poți face asta dacă dorești. Câmpul de rating apare în formular, dar nu va face nimic până nu setezi comments_meta
în baza de date.
Să creăm acum comment_meta
pentru a stoca datele acestui câmp NewRating, care ar fi în fișierul /wp-content/plugins/woocommerce/includes/class-wc-comments.php
. Găsește acest cod:
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 );
}
și repetă-l mai jos:
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 );
}
}
Funcția add_comment_meta
creează câmpul în tabelul comments_meta
din WordPress și îl leagă de ID-urile comentariului și postării. Acum ai stocat o a doua valoare de rating în baza de date.
Următorul pas ar fi să afișezi al doilea rating când sunt afișate recenziile. Acest lucru se face modificând fișierul:
/single-product/review.php
Adaugă o linie în partea de sus unde vezi $rating
, care este practic o copiere și lipire:
$newrating = intval( get_comment_meta( $comment->comment_ID, 'newrating', true ) );
Apoi, după ce vezi instrucțiunea if pe linia 26, copiază și lipește acest întreg cod și schimbă variabila în 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(__( 'Rated %d out of 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( 'out of 5', 'woocommerce' ); ?></span>
</div>
<?php endif; ?>
Această ultimă secțiune de cod va afișa newrating
dacă acesta există.
Încă experimentez încercând să am o linie cu 10 sau mai multe categorii de recenzii, apoi să calculez media acestora pentru a crea ratingul general. Până acum am ajuns doar până aici.
Ține minte că toate acestea ar fi șterse dacă actualizezi pluginul WooCommerce, așa că folosește șabloane acolo unde poți. Dacă aș ști cum, aș transforma asta într-un plugin, dar sunt doar începător în WordPress. Noroc!

Am reușit să obțin ce aveam nevoie prin crearea unui plugin personalizat pentru sistemul de rating. Oricum, mulțumesc pentru răspuns, poate mă va ajuta mai târziu.

Poți să împărtășești și tu răspunsul tău? Am probleme în a schimba stilurile pentru a se potrivi cu stelele, pot obține doar caseta de tip dropdown.
