首先,如果这是基于Woocommerce和特定主题(自然使用wpOpal Themer),我想道歉,但这是一个wordpress编码问题。
我的主题有一个“小部件”,可以说它根据自定义标准显示Woocommerce产品类别。最大的问题是,它只显示相同的类别,没有选择类别的参数。我想更改行为,以便获得随机类别。四处搜索,我发现我不得不编辑woo\\u shop\\u类别。php(通过子主题)。我找到了需要更改的代码段,并使用了以下指令和逻辑-Categories and products in random order 我已经能够接近我想要的了。
Here is the problem.当我没有按照下面的代码进行计数时,它会以随机顺序显示所有类别-正确的结果。
$product_cat = get_term_by( \'slug\', $product_cat_slug, \'product_cat\' );
$product_category_parent = $product_cat->term_id;
extract( $atts );
$_id = rand();
$_count = 0;
$args = array(
\'child_of\' => $product_category_parent,
\'hide_empty\' => 1,
\'hierarchical\' => 1,
\'taxonomy\' => \'product_cat\',
\'pad_counts\' => 1,
);
$all_categories = get_categories( $args );
$_totals = count($all_categories);
shuffle($all_categories);
只要我包括
\'number\' => $number_cats
在args中(根据主题在前端使用King Composer选择的许多类别),它仅根据$number\\u cats值显示相同的类别。例如,如果我想要10个类别,它将洗牌前10个类别,而不显示所有类别的10个随机类别,这是所需的操作。
我怀疑下面的代码是否相关,但它基本上告诉我们按照woocommerce全局变量将每个$all\\u类别显示为一个旋转木马。
if($all_categories):
?>
<div class="opal-category-shop woocommerce <?php echo (($el_class!=\'\')?\' \'.esc_attr( $el_class ):\'\'); ?>">
<div class="title"><span><?php echo trim($title);?></span></div>
<div class="inner nopadding">
<div class="products-collection owl-carousel-play woocommerce carousel-products" id="postcarousel-<?php echo esc_attr($_id); ?>" data-ride="carousel">
<?php if( $_totals > $columns ): ?>
<div class="carousel-controls carousel-hidden hidden-xs">
<a href="#postcarousel-<?php echo esc_attr($_id); ?>" data-slide="prev" class="left carousel-control carousel-md">
<span class="fa fa-angle-left"></span>
</a>
<a href="#postcarousel-<?php echo esc_attr($_id); ?>" data-slide="next" class="right carousel-control carousel-md">
<span class="fa fa-angle-right"></span>
</a>
</div>
<?php endif; ?>
<div class="owl-carousel" data-slide="<?php echo esc_attr($columns);?>" data-singleItem="true" data-navigation="false" data-pagination="false">
<?php foreach($all_categories as $_category): ?>
<div class="cats-item">
<div class="image-category">
<a href="<?php echo esc_url( get_term_link( $_category->slug, \'product_cat\' ) ); ?>">
<?php
$thumbnail_id = get_woocommerce_term_meta( $_category->term_id, \'thumbnail_id\', true );
$image = wp_get_attachment_url( $thumbnail_id );
if ( $image ) {
echo \'<img src="\' . esc_url_raw( $image ) . \'" alt="\'.$_category->name.\'" />\';
}else{
echo \'<img src="\'.esc_url( get_template_directory_uri() ) . \'/images/cats-placeholder.png\'.\'" alt="\'.$_category->name.\'" />\';
}
?>
</a>
</div>
<div class="title-category"><a href="<?php echo esc_url( get_term_link( $_category->slug, \'product_cat\' ) ); ?>"><?php echo trim($_category->name); ?></a></div>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
</div>
What I believe the issue is:洗牌(all\\U类别);正在做自己的工作,并对所有类别进行洗牌。但洗牌是基于类别的计数,而不是基于所有类别。因此,基本上我需要知道如何设置数组以获取所有类别并将其洗牌,然后仅显示$number\\u cats中选择的数字。所以基本上数组被创建,结果被洗牌。然后从第一个数组的结果到$number\\u cats的计数创建另一个数组。
我可以创建两个数组,首先洗牌所有类别,然后从洗牌的类别中选择计数吗?如果是这种情况,创建多个数组的语法是什么。我试图列出一个数组,然后从get_categories($args)
然后通过在数组中调用该变量,从该变量创建另一个数组\'child_of\'
但是,通过一个php错误,它说这是非法的(我看到这条消息后恢复了。如果需要,如果需要排除故障,我可以重新创建它)