https://developer.ww.wp.xz.cn/reference/functions/get_terms/
'orderby'
(string) Field(s) to order terms by. Accepts term fields ('name', 'slug', 'term_group', 'term_id', 'id', 'description'), 'count' for term taxonomy count, 'include' to match the 'order' of the $include param, or 'none' to skip ORDER BY. Defaults to 'name'.
Rand is not an option.
Thanks for your fast reply, then this is a bit confusing.
Aren’t you telling me there i can use rand with ‘orderby’?
Sorting Products by Custom Meta Fields
In many shortcodes like:
[recent_products]
[featured_products]
[products]
[product_category]
[sale_products]
[top_rated_products]
[product_attribute]
[related_products]
you can choose to order products by the following values
- menu_order
- title
- date
- rand
- id
using the “orderby” attribute, for example:
[products skus=”foo, bar, baz” orderby=”date” order=”desc”].
https://docs.woothemes.com/document/woocommerce-shortcodes/
Is there any possibility to randomize my categories?
Rand is an option for product queries, not term queries.
Is there any possibility to randomize displayed categories?
The only way I see this being possible with this shortcode would be to shuffle() the array of categories here:
https://github.com/woothemes/woocommerce/blob/dcf81b3bbedcb26679df5c40871c6d4579ba0e71/includes/class-wc-shortcodes.php#L268
http://php.net/manual/en/function.shuffle.php
But this change won’t be upgrade safe so you may want to create a custom shortcode of your own.
If someone wants to know how i did it:
past this in function.php of your theme:
/**
* List all (or limited) product categories.
*
* @param array $atts
* @return string
*/
function rand_product_categories( $atts ) {
global $woocommerce_loop;
$atts = shortcode_atts( array(
'number' => null,
'orderby' => 'name',
'order' => 'ASC',
'columns' => '4',
'hide_empty' => 1,
'parent' => '',
'ids' => ''
), $atts );
if ( isset( $atts['ids'] ) ) {
$ids = explode( ',', $atts['ids'] );
$ids = array_map( 'trim', $ids );
} else {
$ids = array();
}
$hide_empty = ( $atts['hide_empty'] == true || $atts['hide_empty'] == 1 ) ? 1 : 0;
// get terms and workaround WP bug with parents/pad counts
$args = array(
'orderby' => $atts['orderby'],
'order' => $atts['order'],
'hide_empty' => $hide_empty,
'include' => $ids,
'pad_counts' => true,
'child_of' => $atts['parent']
);
$rand_product_categories = get_terms( 'product_cat', $args );
if ( '' !== $atts['parent'] ) {
$rand_product_categories = wp_list_filter( $rand_product_categories, array( 'parent' => $atts['parent'] ) );
}
if ( $hide_empty ) {
foreach ( $rand_product_categories as $key => $category ) {
if ( $category->count == 0 ) {
unset( $rand_product_categories[ $key ] );
}
}
}
if ( $atts['number'] ) {
$rand_product_categories = array_slice( $rand_product_categories, 0, $atts['number'] );
}
$columns = absint( $atts['columns'] );
$woocommerce_loop['columns'] = $columns;
ob_start();
// Reset loop/columns globals when starting a new loop
$woocommerce_loop['loop'] = $woocommerce_loop['column'] = '';
if ( shuffle($rand_product_categories) ) {
woocommerce_product_loop_start();
foreach ( $rand_product_categories as $category ) {
wc_get_template( 'content-product_cat.php', array(
'category' => $category
) );
}
woocommerce_product_loop_end();
}
woocommerce_reset_loop();
return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}
add_shortcode( 'rand_prod_cat', 'rand_product_categories' );
?>
your new shuffeld categories shortcode is:
[rand_prod_cat number="4" parent="0"]
Tried this one
And it actually works but after all my random categories it display also de same categories in alfabetic order.
I believe you should not modify the custom-functions.php of your theme but use the small custom plugin to add the code so that your code is not overwritten if you receive an update of your theme
Any idea what I am doing wrong?
I don’t know, but its unlikely your post will be seen much at the end of an old resolved post. Try creating a new topic using the form here:
https://ww.wp.xz.cn/support/plugin/woocommerce
I don’t know, but its unlikely your post will be seen much at the end of an old resolved thread. Try creating a new topic using the form here:
https://ww.wp.xz.cn/support/plugin/woocommerce