启用计数时,随机WooCommerce类别不显示吗?

时间:2018-05-24 作者:Saud Kazia

首先,如果这是基于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错误,它说这是非法的(我看到这条消息后恢复了。如果需要,如果需要排除故障,我可以重新创建它)

1 个回复
SO网友:Saud Kazia

在研究这个的时候,我遇到了Categories and products in random order 它有一个类似但不同的问题,但能够获得切割阵列所需的信息。

我修改了他的$categories = array_slice( $categories, 0, 5 ); 来满足我的需要。最后的答案是根据$cat\\u数字添加一个array\\u片

因此,我修改了$all\\u categories并将其命名为$categories(因为我稍后将引用$all\\u categories),并将代码更改为

$categories = get_categories( $args );
$_totals = count($categories);
    shuffle($categories);
$all_categories = array_slice( $categories, 0, $number_cats );

结束

相关推荐

从Archive.php中排除子页面

我创建了一个称为“服务”的分层自定义帖子类型。以下是我在自定义帖子类型中添加的页面:服务1服务子(服务1为父)服务子(服务1为父)服务子(服务1为父)服务子(服务3为父)服务子(服务3为父)服务子(服务3为父)服务子级(服务4是父级)服务子级(服务4是父级)是否可以从存档服务中排除子页。php?我希望通过使用pre_get_posts, 但这似乎不可能。