随机排列的类别和产品

时间:2012-10-16 作者:Nicolai Grossherr

我想做的是在一个页面上随机显示Woocommerce类别和产品。正常设置允许在同一页面上显示类别和产品,但首先显示类别,然后显示产品。这是因为类别随函数一起提供woocommerce_product_subcategories() 然后产品循环开始。

我想要的是这样的:

    $args = array(
    \'post_type\' => array(\'product\', \'post\'),
    \'orderby\' => \'rand\', 
    \'posts_per_page\' =>-1,
    \'post_status\' => \'publish\'
);

$query = new WP_Query($args);
但我不知道如何把类别放在那里。

详细说明我的问题:我能够通过添加以下内容将类别的输出随机化:

shuffle( $product_categories );
到函数woocommerce_product_subcategories() 或者是我创建的模板的例外,但我或多或少地从那里的函数复制了代码

我想这可能会对某人有所帮助,在这里找到了:http://core.trac.wordpress.org/ticket/21875

但这只是针对类别或如上所述的解决方案,如果类别显示在产品之前,它们将被刷毛,但当然仍然不会与产品一起刷毛

好的,受@s\\u ha\\u dum答案的启发,我设法找到了一个解决方案:

//this 1. part is out of the woocommerce-template.php and part of the woocommerce_product_subcategories()
$product_cat = get_term_by( \'slug\', $product_cat_slug, \'product_cat\' );
$product_category_parent = $product_cat->term_id;

$pcat_args = array(
\'child_of\'  => $product_category_parent,
\'hide_empty\'    => 1,
\'hierarchical\'  => 1,
\'taxonomy\'      => \'product_cat\',
\'pad_counts\'    => 1
);
$product_categories = get_categories( $pcat_args  );

//grab things by post_type product
$prod_args = array(
\'post_type\' => array(\'product\'),
\'orderby\' => rand, 
\'posts_per_page\' =>-1,
\'post_status\' => publish
);
$ng_query = get_posts($prod_args);

//combines, merge the arrays
$merge_query = array_merge( $ng_query, $product_categories );

//make the order random
shuffle($merge_query);

//iterate merged arrays
foreach( $merge_query as $mqp ) { 
setup_postdata($mqp);
if ( $mqp->taxonomy == product_cat ) {
echo $mqp->category_nicename;
echo "<br/>";
} else {
echo $mqp->post_title;
echo "<br/>";
}
}
这给了我一个类别和产品的随机列表!

正如@s\\u ha\\u dum所说,有必要在合并在一起的数组/对象类型之间有所不同。对于这个简化的解决方案,我通过检查分类法做到了这一点——不确定这是否是处理更复杂输出的好方法。

(1)编辑:我现在用所有特定的格式实现了它,而且它仍然工作得很好-因此,寻找分类法»product\\u cat«对于我的场景来说是一个很好的解决方案!

(2)编辑:我遇到了一个问题,即价格和添加到购物车按钮不会显示,迭代会中断,解决方法是添加setup_postdata(); - 我将其添加到上面的代码中

2 个回复
最合适的回答,由SO网友:Nicolai Grossherr 整理而成

正如kaiser所建议的,我的上一个工作“编辑为”解决方案:

好的,受@s\\u ha\\u dum answer的启发,我设法找到了一个解决方案:

//this 1. part is out of the woocommerce-template.php and part of the woocommerce_product_subcategories()
$product_cat = get_term_by( \'slug\', $product_cat_slug, \'product_cat\' );
$product_category_parent = $product_cat->term_id;

$pcat_args = array(
\'child_of\'  => $product_category_parent,
\'hide_empty\'    => 1,
\'hierarchical\'  => 1,
\'taxonomy\'      => \'product_cat\',
\'pad_counts\'    => 1
);
$product_categories = get_categories( $pcat_args  );

//grab things by post_type product
$prod_args = array(
\'post_type\' => array(\'product\'),
\'orderby\' => rand, 
\'posts_per_page\' =>-1,
\'post_status\' => publish
);
$ng_query = get_posts($prod_args);

//combines, merge the arrays
$merge_query = array_merge( $ng_query, $product_categories );

//make the order random
shuffle($merge_query);

//iterate merged arrays
foreach( $merge_query as $mqp ) { 
setup_postdata($mqp);
if ( $mqp->taxonomy == product_cat ) {
echo $mqp->category_nicename;
echo "<br/>";
} else {
echo $mqp->post_title;
echo "<br/>";
}
}
这给了我一个类别和产品的随机列表!

正如@s\\u ha\\u dum所说,有必要在合并在一起的数组/对象类型之间有所不同。对于这个简化的解决方案,我通过检查分类法做到了这一点——不确定这是否是处理更复杂输出的好方法。

(1)编辑:我现在用所有特定的格式实现了它,而且它仍然工作得很好-因此,寻找分类法»product\\u cat«对于我的场景来说是一个很好的解决方案!

(2)编辑:我遇到了一个问题,即价格和添加到购物车按钮不会显示,迭代会中断,解决方法是添加setup_postdata(); - 我将其添加到上面的代码中

SO网友:s_ha_dum

您应该能够组合类别和产品数组/对象,然后将它们洗牌,然后循环组合的数组/对象。我预期的问题:

一个可能是对象,另一个可能是数组,因此您必须施放一个或另一个

结束

相关推荐

META_QUERY的WP_QUERY性能问题

我正在为使用WP_Query 实例从具有2个非空自定义字段的2种帖子类型中选择帖子。根据现场的具体情况$current_zone 变量可以设置为确定要从中查询的类别。// Custom loop $paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1; $custom_loop_args = array( \'post_type\' => array(\'videos\', \'post