Campos adicionales en el sistema de valoraciones de Woocommerce
Necesito agregar campos adicionales al sistema de valoraciones de productos en Woocommerce como este:
Abri este archivo: /wp-content/plugins/woocommerce/templates/single-product-reviews.php y vi las siguientes líneas:
$comment_form = array(
'title_reply' => $title_reply,
'comment_notes_before' => '',
'comment_notes_after' => '',
'fields' => array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Nombre', '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' => __( 'Enviar valoración', 'woocommerce' ),
'logged_in_as' => '',
'comment_field' => ''
);
y este
$comment_form['comment_field'] = '<p class="comment-form-rating"><label for="rating">' . __( 'Valoración', 'woocommerce' ) .'</label><select name="rating" id="rating">
<option value="">'.__( 'Valorar…', 'woocommerce' ).'</option>
<option value="5">'.__( 'Perfecto', 'woocommerce' ).'</option>
<option value="4">'.__( 'Bueno', 'woocommerce' ).'</option>
<option value="3">'.__( 'Normal', 'woocommerce' ).'</option>
<option value="2">'.__( 'No tan malo', 'woocommerce' ).'</option>
<option value="1">'.__( 'Muy pobre', 'woocommerce' ).'</option>
</select></p>';
¿Hay alguna manera de agregar otros campos de selección?

He estado trabajando en esto por mi cuenta con muy poca experiencia en programación.
Hasta ahora he descubierto que puedes añadir otro valor pero necesitas actualizar algunos archivos en la plantilla de WooCommerce. En el archivo single-product-reviews.php
, simplemente repite el código desde <p>
hasta </p>
. Observa donde he añadido la selección de estrellas 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>
Añade el nuevo código debajo:
<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>;
Después de guardar esto, deberías poder ver el nuevo campo de estrellas, o posiblemente un cuadro de selección desplegable ya que no hemos definido newrating
como un estilo CSS en ningún lugar. Puedes hacer esto si lo deseas. El campo de valoraciones aparece en el formulario, pero no hará nada todavía hasta que configures el nuevo comments_meta
en la base de datos.
Ahora creemos el nuevo comment_meta
para almacenar estos datos para el campo NewRating
, que estaría dentro del archivo /wp-content/plugins/woocommerce/includes/class-wc-comments.php
. Encuentra este código:
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 );
}
y repítelo debajo:
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 función add_comment_meta
crea el campo en la tabla comments_meta
de WordPress y lo vincula a los IDs del comentario y del post. Así que ahora has almacenado un segundo valor de valoración en la base de datos.
El siguiente paso sería mostrar la segunda valoración cuando se muestren las reseñas. Esto se hace modificando el archivo:
/single-product/review.php
Añade una línea cerca de la parte superior donde veas $rating
, que básicamente es copiar y pegar:
$newrating = intval( get_comment_meta( $comment->comment_ID, 'newrating', true ) );
Y luego, después de ver la declaración if
alrededor de la línea 26, copia y pega todo este código y cambia la variable a 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; ?>
Esta última sección de código imprimirá el newrating
si existe.
Todavía estoy experimentando con la idea de tener una línea de unas 10 categorías de reseñas y luego calcular el promedio de estas para crear la valoración general. Solo he llegado hasta aquí hasta ahora.
Ten en cuenta que todo esto se borraría si actualizas el plugin de WooCommerce, así que usa plantillas cuando puedas. Si supiera cómo, haría esto como un plugin, pero solo soy un principiante en WP. Saludos.

Logré conseguir lo que necesitaba creando un plugin personalizado de sistema de valoración. De todas formas, gracias por tu respuesta, puede que me ayude más adelante.

¿Podrías compartir tu respuesta también? Estoy teniendo problemas para cambiar los estilos y que se muestren las estrellas, solo logro que aparezca el cuadro de selección tipo dropdown.
