wordpress wc_display_product_attributes的限制结果

aiqt4smr  于 2023-10-17  发布在  WordPress
关注(0)|答案(1)|浏览(104)

我得到了一个片段,它显示了我的产品在存档页面上的属性,如图所示。在一些结果有很多的结果,我想限制,让我们说5和5后,也许一个显示更多的按钮。我现在使用的代码在下面。我想有它分开,以及它只针对一个属性,而不是所有。
我不是一个PHPMaven,所以我很难找到一个解决方案。

add_action( 'woocommerce_shop_loop_item_title', 'add_motorcode' );

function add_motorcode() {
    global $product;
    echo wc_display_product_attributes ( $product );
    
}

我试着选择品牌本身,它的工作,但可点击的属性消失了。

add_action( 'woocommerce_shop_loop_item_title', 'fdev_display_attribute_brand', 10 );
function fdev_display_attribute_brand() {

    global $product;
   
        $taxonomy = 'pa_merk'; 
        
        if ( ! $product->get_attribute($taxonomy) ) { 
            return;
        }

        echo '<div class="wc-attribute-brand" style="margin-top: 20px;"><span style="font-size:16px; font-weight:600;">' . __( 'brand : ', 'woocommerce' ) ;
        echo '<p class="attribute-brand">' . $product->get_attribute($taxonomy) . '</p> </span> </div>' ;  
}

有没有人能把我往正确的方向推?

weylhg0b

weylhg0b1#

我没有找到限制这个东西的解决方案但是我在这里找到了这个函数的源代码

所以我重建这个函数
Step1:首先我更改了函数名称!!!
第二步:添加$limitation = -1param
Step 3:添加这部分代码->

// <------- I add This 
if($limitation != -1)
    $product_attributes  = array_splice($product_attributes, count($product_attributes) - $limitation);

在此行之前

$product_attributes = apply_filters( 'woocommerce_display_product_attributes', $product_attributes, $product );

我写在这里是为了让大家用途:

<?php 
function kdev_wc_display_product_attributes( $product , $limitation = -1) {
$product_attributes = array();

// Display weight and dimensions before attribute list.
$display_dimensions = apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() );

if ( $display_dimensions && $product->has_weight() ) {
    $product_attributes['weight'] = array(
        'label' => __( 'Weight', 'woocommerce' ),
        'value' => wc_format_weight( $product->get_weight() ),
    );
}

if ( $display_dimensions && $product->has_dimensions() ) {
    $product_attributes['dimensions'] = array(
        'label' => __( 'Dimensions', 'woocommerce' ),
        'value' => wc_format_dimensions( $product->get_dimensions( false ) ),
    );
}

// Add product attributes to list.
$attributes = array_filter( $product->get_attributes(), 'wc_attributes_array_filter_visible' );

foreach ( $attributes as $attribute ) {
    $values = array();

    if ( $attribute->is_taxonomy() ) {
        $attribute_taxonomy = $attribute->get_taxonomy_object();
        $attribute_values   = wc_get_product_terms( $product->get_id(), $attribute->get_name(), array( 'fields' => 'all' ) );

        foreach ( $attribute_values as $attribute_value ) {
            $value_name = esc_html( $attribute_value->name );

            if ( $attribute_taxonomy->attribute_public ) {
                $values[] = '<a href="' . esc_url( get_term_link( $attribute_value->term_id, $attribute->get_name() ) ) . '" rel="tag">' . $value_name . '</a>';
            } else {
                $values[] = $value_name;
            }
        }
    } else {
        $values = $attribute->get_options();

        foreach ( $values as &$value ) {
            $value = make_clickable( esc_html( $value ) );
        }
    }

    $product_attributes[ 'attribute_' . sanitize_title_with_dashes( $attribute->get_name() ) ] = array(
        'label' => wc_attribute_label( $attribute->get_name() ),
        'value' => apply_filters( 'woocommerce_attribute', wpautop( wptexturize( implode( ', ', $values ) ) ), $attribute, $values ),
    );
}

// <------- I add This 
if($limitation != -1)
    $product_attributes  = array_splice($product_attributes, count($product_attributes) - $limitation);

/**
 * Hook: woocommerce_display_product_attributes.
 *
 * @since 3.6.0.
 * @param array $product_attributes Array of atributes to display; label, value.
 * @param WC_Product $product Showing attributes for this product.
 */
$product_attributes = apply_filters( 'woocommerce_display_product_attributes', $product_attributes, $product );

wc_get_template(
    'single-product/product-attributes.php',
    array(
        'product_attributes' => $product_attributes,
        // Legacy params.
        'product'            => $product,
        'attributes'         => $attributes,
        'display_dimensions' => $display_dimensions,
    )
);
}
?>

您可以将其用作:

$limit = 5;
kdev_wc_display_product_attributes($product, $limit);

如果有人有最好的解决方案,请回答问题:)

相关问题