我想做的是在一个页面上随机显示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();
- 我将其添加到上面的代码中
最合适的回答,由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();
- 我将其添加到上面的代码中