Woocommerce - 在购物车上显示更多属性

时间:2015-08-11 08:12:51

标签: php wordpress woocommerce

我有Woocommerce和Woocommerce预订。在用户将其添加到购物车后,我想在购物车上添加更多信息。

目前,我有预订的开始日期和持续时间,并带有标签。

<dl class="variation">
    <dt class="variation-Booking"><font><font class="">Booking Date:</font></font></dt>
    <dd class="variation-Booking"><p><font><font class="">August 11, 2015</font></font></p></dd>
    <dt class="variation-Duration"><font><font>Duration:</font></font></dt>
    <dd class="variation-Duration"><p><font><font>4 days</font></font></p></dd>
</dl>

我试图找到在Woocommerce的PHP文件上创建此代码的位置,因此我可以添加数据库中可用的更多属性(例如结束日期和SKU),还可以更改HTML输出。

cart.php文件中,有这部分代码:

// Meta data
echo WC()->cart->get_item_data( $cart_item );

然后在class-wc-cart.php上面的函数:

public function get_item_data( $cart_item, $flat = false ) {
            $item_data = array();

            // Variation data
            if ( ! empty( $cart_item['data']->variation_id ) && is_array( $cart_item['variation'] ) ) {

                foreach ( $cart_item['variation'] as $name => $value ) {

                    if ( '' === $value )
                        continue;

                    $taxonomy = wc_attribute_taxonomy_name( str_replace( 'attribute_pa_', '', urldecode( $name ) ) );

                    // If this is a term slug, get the term's nice name
                    if ( taxonomy_exists( $taxonomy ) ) {
                        $term = get_term_by( 'slug', $value, $taxonomy );
                        if ( ! is_wp_error( $term ) && $term && $term->name ) {
                            $value = $term->name;
                        }
                        $label = wc_attribute_label( $taxonomy );

                    // If this is a custom option slug, get the options name
                    } else {
                        $value              = apply_filters( 'woocommerce_variation_option_name', $value );
                        $product_attributes = $cart_item['data']->get_attributes();
                        if ( isset( $product_attributes[ str_replace( 'attribute_', '', $name ) ] ) ) {
                            $label = wc_attribute_label( $product_attributes[ str_replace( 'attribute_', '', $name ) ]['name'] );
                        } else {
                            $label = $name;
                        }
                    }

                    $item_data[] = array(
                        'key'   => $label,
                        'value' => $value
                    );
                }
            }

            // Other data - returned as array with name/value values
            $other_data = apply_filters( 'woocommerce_get_item_data', array(), $cart_item );

            if ( $other_data && is_array( $other_data ) && sizeof( $other_data ) > 0 ) {

                foreach ( $other_data as $data ) {
                    // Set hidden to true to not display meta on cart.
                    if ( empty( $data['hidden'] ) ) {
                        $display_value = ! empty( $data['display'] ) ? $data['display'] : $data['value'];

                        $item_data[] = array(
                            'key'   => $data['name'],
                            'value' => $display_value
                        );
                    }
                }
            }

            // Output flat or in list format
            if ( sizeof( $item_data ) > 0 ) {

                ob_start();

                if ( $flat ) {
                    foreach ( $item_data as $data ) {
                        echo esc_html( $data['key'] ) . ': ' . wp_kses_post( $data['value'] ) . "\n";
                    }
                } else {
                    wc_get_template( 'cart/cart-item-data.php', array( 'item_data' => $item_data ) );
                }

                return ob_get_clean();
            }

            return '';
        }

上面调用的cart-item-data.php

<dl class="variation">
    <?php
        foreach ( $item_data as $data ) :
            $key = sanitize_text_field( $data['key'] );
    ?>
        <dt class="variation-<?php echo sanitize_html_class( $key ); ?>"><?php echo wp_kses_post( $data['key'] ); ?>:</dt>
        <dd class="variation-<?php echo sanitize_html_class( $key ); ?>"><?php echo wp_kses_post( wpautop( $data['value'] ) ); ?></dd>
    <?php endforeach; ?>
</dl>

但是,我仍然不知道如何更改布局并从数据库中添加特定属性。

1 个答案:

答案 0 :(得分:0)

add_filter( 'woocommerce_get_item_data', 'wc_add_address_to_cart', 10, 2 ); 
function wc_add_address_to_cart( $other_data, $cart_item ) { 
    $post_data = get_post( $cart_item['product_id'] ); 
    $post_data->post_author; 
    $vendor_id = $post_data->post_author;
    echo '<br>';
    $Add = 'Address: ';
    $city = 'City: ';
    $tel = 'Phone: ';
    echo $test;
    $user_id = $vendor_id;

    // Get all user meta data for $user_id
    $meta = get_user_meta( $user_id );

    // Filter out empty meta data
    $meta = array_filter( array_map( function( $a ) {
        return $a[0];
    }, $meta ) );

    echo $Add;
    print_r( $meta ['_vendor_address_1'] );

    echo '<br>';

    echo $city;
    print_r( $meta['_vendor_city'] );

    echo '<br>';

    echo $tel;
    print_r( $meta['_vendor_phone'] ); 
    return $other_data; 

} 

将其添加到主题中的functions.php文件中。它将显示产品上每个供应商的地址。你可以根据自己的需要自定义它。