ืืคืื ืงืฆืื woocommerce_catalog_ordering() ืืฆืืื ืืช ืืชืคืจืื ืื ืคืชื ืดืกืืืืจ ืืจืืจืช ืืืืืด (Default sorting) ืืขื ืืืืืช ืืืืฆืจืื. ืืื ืืืืกืืฃ ืื ืืคืฉืจืืช ืืฉืืื, ืืืฉื ืืืื (sorting) ืืงืจืื, ืชืฆืืจืื ืฉื ื ืคืืืืจืื: woocommerce_catalog_orderby ืืืงืกื ืฉื ืืืคืฉืจืืช ื-woocommerce_get_catalog_ordering_args ืืฉืืืืชื.
ืืืืืื ืืืื ืืืกืืคื ืืคืฉืจืืช ืืืืื ืืงืจืื. ืืืืชื ืืืคื ืชืืืื ืืืืกืืฃ ืื ืขืจื orderby ืฉื ืชืื ื-WP_Query.
ืืืกืคืช ืืคืฉืจืืช ืืืืื ืืงืจืื
ืืืกืืคื ืืช ืืงืื ืืื ืืงืืืฅ functions.php ืฉื ืชืื ืืช ืืืช ืฉืืื ืื ืืชืืกืฃ ืืฉืืื:
/**
* Add a "Random" option to the catalog sorting dropdown
* and to the default sorting choices in the Customizer.
*/
function savvy_catalog_orderby_random( $options ) {
$options['random_list'] = __( 'Random', 'your-textdomain' );
return $options;
}
add_filter( 'woocommerce_catalog_orderby', 'savvy_catalog_orderby_random' );
add_filter( 'woocommerce_default_catalog_orderby_options', 'savvy_catalog_orderby_random' );
/**
* Turn the "random_list" value into WP_Query arguments.
*/
function savvy_catalog_ordering_args_random( $args, $orderby, $order ) {
if ( 'random_list' === $orderby ) {
$args['orderby'] = 'rand';
}
return $args;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'savvy_catalog_ordering_args_random', 10, 3 );
ืืืื ืกื ืืขืืื ืืื ืืช ืืืืจื ืดRandomืด ืืืชืคืจืื ืื ืคืชื. ืืืชืืืช ืืชืืืกืฃ ?orderby=random_list, ืืืืืฆืจืื ืืืฆืื ืืกืืจ ืืงืจืื.
ืืื ืื ืขืืื?
woocommerce_catalog_orderby ืืกื ื ืืช ืืขืจื ืืืคืฉืจืืืืช ืฉ-woocommerce_catalog_ordering() ืืฆืืื. ืืืคืชื ืืฉืืฉ ืืขืจื orderby ืืืชืืืช, ืืืขืจื ืืื ืืืงืกื ืฉืืืฆื.
woocommerce_default_catalog_orderby_options ืืกื ื ืืช ืืืคืฉืจืืืืช ืฉื ืดืืจืืจืช ืืืื ืืืืื ืืืฆืจืืืด ืชืืช ืขืืฆืื > ืืชืืื ืืืฉืืช > WooCommerce > ืงืืืื ืืืฆืจืื. ื-Customizer ืืืืช ืืช ืืืืืจื ืืื ืืจืฉืืื ืืื, ืื ืฉืืืขืืื ืื ืชืืืื ืืฉืืืจ ืืช ืืืืื ืืืงืจืื ืืืจืืจืช ืืืื.
ืืืฉืจ ืฉืืืืชืช ืืื ืืช ืจืฆื, WC_Query::get_catalog_ordering_args() ืงืืจืืช ืืช ืืขืจื ืืืืชืืืช ืื ืืืืืจืช ืืจืืจืช ืืืืื. ืืื ืืคืฆืืช ืืช ืืขืจื ืืคื ืืงืฃ (price-desc ืืืคื ื-price ืื-DESC), ืืืืืจ ืืื ืืขืืืจื ืืช ืืชืืฆืื ื-woocommerce_get_catalog_ordering_args ื-$args, $orderby ื-$order.
ืฉื ื ืคืจืืื ืืฉืืืื:
- ืืฉืชืืฉื ืืงื ืชืืชืื ืืืคืชืืืช ืืืชืืืื. ืืคืชื ืืื
random-listืืคืืฆื ื-randomืื-LIST. - ืืฉืื ืืื
$orderby, ืื ืืื$_GET. ืืคืื ืงืฆืื ื ืงืจืืช ืื ืขื ืืื ืืฉืืจืืงืื[products]ืืขื ืืื ืืืืงืื ืขื ืขืจืืื ืืฉืืื, ืืืคืจืืืจ ืืฉืงืฃ ืืช ืืืืื ืืคืืขื.
ืืคืื ืงืฆืื woocommerce_catalog_ordering()
WooCommerce ืืืืจ ืืช woocommerce_catalog_ordering() ืืืืง woocommerce_before_shop_loop ืืขืืืคืืช 30, ืืื ืืืจื ืืื ื ืืชืืฆืืืช ืืขืืืคืืช 20. ืืคืื ืงืฆืื ืืืขื ืช ืืช ืืชืื ืืช loop/orderby.php, ืืืฆืืื ืคืื ืจืง ืืืฉืจ ืืืืืื ืืืืืงืช ืืขืืืืื (paginated) ืืืฉ ืืืฆืจืื ืืืฆืื.
ืืื ืืคืฉืจืืืืช ืืจืืจืช ืืืืื, ืืคื ื ืืคืืืืจืื:
| ืืคืชื | ืืงืกื |
|---|---|
menu_order |
ืกืืืืจ ืืจืืจืช ืืืื (Default sorting) |
popularity |
ืืืื ืืคื ืคืืคืืืจืืืช (Sort by popularity) |
rating |
ืืืื ืืคื ืืืจืื ืืืืฆืข (Sort by average rating) |
date |
ืืืื ืืคื ืืืืฉืื ืืืืชืจ (Sort by latest) |
price |
ืืืื ืืืืื ืืืงืจ (Sort by price: low to high) |
price-desc |
ืืืื ืืืืงืจ ืืืื (Sort by price: high to low) |
ืืืืจ ืืื ืืคืื ืงืฆืื ืืชืืืื ืืช ืืจืฉืืื. ืืื ืืกืืจื ืืช menu_order ืืืฉืจ ืืืืื ืฉืืืืืจ ืืืจืืจืช ืืืื ืืื ืืืจ, ืืกืืจื ืืช rating ืืืฉืจ ืืืืงืืจืืช ืื ืืืจืื ืืืืืืื ืืืืืืื, ืืืชืืฆืืืช ืืืคืืฉ ืืืืืคื ืืช menu_order ื-relevance.
ืืื ืฉืืจืืงืื ืืืขืืื ืืืืื. ืืชืคืจืื ืื ืคืชื ืืืคืืข ื-[products paginate="true"], ืืืชืื ืืืช ืืืืงืื ืืื ืืืฆื ืืืืฆืขืืช ืืืืืง Catalog Sorting, ืฉืงืืจื ืืืืชื ืคืื ืงืฆืื.
ืืฉืืืคืช ืืืฆืจืื ืืชืื ืืืช ืฉืืื, ืจืื ืืช ืืคืืกื ืืืจื ืื ืืื ื ืืฉืืืฃ ืืืฆืจืื ืฉื WooCommerce ืืชืื ืืช ืฉืืื.
ืืืื ืืงืจืื ืืขืืืื
ORDER BY RAND() ืืขืจืื ืืช ืืืืฆืจืื ืืืืฉ ืืื ืืงืฉื. ืืขืืื 2 ืืืง ืืืืืฆืจืื ืืขืืื 1 ืขืืืืื ืืืืคืืข ืฉืื, ืืืืจืื ืื ืืืคืืขื ืืื.
WP_Query ืืงืื RAND(x) ืขื seed ืืื ืืืจืืคืจืก 4.5. ืขืจื seed ืฉืืฉืชื ื ืคืขื ืืืื ืฉืืืจ ืขื ืกืืจ ืงืืืข ืืื ืืขืืืืื ืืื ื-cache ืฉื ืืขืืืืื:
if ( 'random_list' === $orderby ) {
$args['orderby'] = 'RAND(' . absint( gmdate( 'Ymd' ) ) . ')';
}
ืืืื ืืงืจืื ืื ืืืืฅ ืืช MySQL ืืืืื ืืช ืื ืืชืืฆืืืช, ืื ืฉืืืคื ืืืืื ืืงืืืืืื ืขื ืืืคืื ืจืืื ืฉื ืืืฆืจืื.
ืฉืืืืช ื ืคืืฆืืช
ืฉืืืืช ื ืคืืฆืืช ืขื ืืืื ืืืฆืจืื ืืงืืืื ืฉื WooCommerce:
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); ืืงืืืฅ functions.php. ืืชืื ืืืช ืืืืงืื, ืืกืืจื ืืช ืืืืืง Catalog Sorting ืืชืื ืืช ืงืืืื ืืืืฆืจืื.
woocommerce_catalog_orderby ืืืกืืจื ืืช ืืืคืชื ืขื unset(), ืืืฉื unset( $options['popularity'] );, ืืืืืจ ืืื ืืืืืจื ืืช ืืืขืจื.
woocommerce_catalog_ordering().
woocommerce_catalog_orderby, ืืืืืจ ืืื ื-woocommerce_get_catalog_ordering_args ืืืืืจื ืืช $args['meta_key'] ืืฉื ืืฉืื ืฉืืื ืืืช $args['orderby'] ื-meta_value ืื ื-meta_value_num. ืืืฆืจืื ืฉืืื ืืื ืืช ืืฉืื ืืื ืื ืืืคืืขื ืืชืืฆืืืช.