Câmpuri adiționale în sistemul de evaluare Woocommerce

13 feb. 2014, 22:11:20
Vizualizări: 13.4K
Voturi: 0

Am nevoie să adaug câmpuri suplimentare la sistemul de evaluare a produselor WooCommerce, ca în această imagine: Exemplu de câmpuri adiționale pentru rating Woocommerce

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?

0
Toate răspunsurile la întrebare 1
3

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

17 mar. 2014 09:20:47
Comentarii

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.

Dan Dan
17 mar. 2014 10:58:57

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.

Justice_ Justice_
17 mar. 2014 11:12:58

Cred că va trebui să modific fișierul single-product.js

Justice_ Justice_
17 mar. 2014 11:49:00