WooCommerce评级系统上的其他字段

时间:2014-02-13 作者:Dan

我需要向Woocommerce产品评级系统添加其他字段,如下所示:enter image description here

我打开了这个文件:/wp-content/plugins/woocommerce/templates/single-product-reviews.php 看到了以下几行:

$comment_form = array(
        \'title_reply\' => $title_reply,
        \'comment_notes_before\' => \'\',
        \'comment_notes_after\' => \'\',
        \'fields\' => array(
            \'author\' => \'<p class="comment-form-author">\' . \'<label for="author">\' . __( \'Name\', \'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\' => __( \'Submit Review\', \'woocommerce\' ),
        \'logged_in_as\' => \'\',
        \'comment_field\' => \'\'
    );
还有这个

$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>\';
是否有任何方法可以添加其他选择输入?

1 个回复
最合适的回答,由SO网友:Justice_ 整理而成

我自己一直在做这方面的工作,几乎没有编码经验。

到目前为止,我发现您可以添加其他值,但需要更新woocommerce模板中的一些文件。在single-product-reviews.php, 只需重复<p></p>. 查看我在中添加的位置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>
在下面添加新代码:

        <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>;
保存后,您应该能够看到新的星形字段,或者可能是一个下拉选择框,因为我们还没有在任何地方将newrating定义为css样式。你可以做你喜欢的事。表单上会显示ratings字段,但在数据库中设置新的comments\\u meta之前,它不会做任何事情。

现在,让我们创建新的comment\\u meta来存储此NewRating字段的数据,该字段将位于/wp-content/plugins/woocommerce/includes/class-wc-comments.php 文件查找此代码:

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 );
    }
并在下面重复此操作:

   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 );
    }
}
add\\u comment\\u meta函数在Wordpress的comments\\u meta表中创建字段,并将其链接到comment和post ID。现在,您已经在数据库中存储了第二个额定值。

下一步是在显示评论时显示第二个评分。这可以通过修改文件来完成:/single-product/review.php在顶部附近可以看到的地方添加一行$rating 基本上是复制粘贴:

$newrating = intval( get_comment_meta( $comment->comment_ID, \'newrating\', true ) );
然后在第26行左右看到if语句后,复制并粘贴整个代码,并将变量更改为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; ?>
最后一段代码将打印newrating 如果存在

我仍然在尝试建立一个10个左右的评论类别,然后计算出这些类别的平均值来创建总体评级。到目前为止,我只知道这一点。

请记住,如果升级Woocommerce插件,这一切都会被删除,所以请尽可能使用模板。如果我知道如何将其制作为插件,但我只是WP的初学者。干杯

结束

相关推荐

Migrating to Tumblr

我之所以成为Tumblr的忠实粉丝,有几个原因(极简主义、易于制作报价/照片/视频风格的帖子,以及我使用的移动设备的客户端),所以我决定在使用WordPress 7年后,无论是私人托管还是WordPress。com托管解决方案,是时候行动了。不幸的是,我不知道如何正确地做到这一点。互联网上的一些帖子建议从RSS提要导入,但这并不能完全解决问题-我的要求是:我保持相同的基本URL(通过使用DNS记录很简单)所有现有的帖子URL都可以工作,或者至少301重定向到新的URL(以尽量减少PageRank的损失)媒