ืืคืฉืจื•ืช ืœืžื™ื•ืŸ ืžื•ืฆืจื™ื ืจื ื“ื•ืžืœื™ ื‘ืขืžื•ื“ ื”ืงื˜ืœื•ื’ ืฉืœ ื•ื•ืงื•ืžืจืก

ื”ืคื•ื ืงืฆื™ื” 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:

ืื™ืš ืžืกื™ืจื™ื ืืช ื”ืชืคืจื™ื˜ ื”ื ืคืชื— ืฉืœ ื”ืžื™ื•ืŸ ื‘-WooCommerce?
ื‘ืชื‘ื ื™ื•ืช ืงืœืืกื™ื•ืช, ื”ื•ืกื™ืคื• ืืช remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); ืœืงื•ื‘ืฅ functions.php. ื‘ืชื‘ื ื™ื•ืช ื‘ืœื•ืงื™ื, ื”ืกื™ืจื• ืืช ื”ื‘ืœื•ืง Catalog Sorting ืžืชื‘ื ื™ืช ืงื˜ืœื•ื’ ื”ืžื•ืฆืจื™ื.
ืื™ืš ืžืกื™ืจื™ื ืืคืฉืจื•ืช ืžื™ื•ืŸ ืžื•ื‘ื ื™ืช?
ื”ืฉืชืžืฉื• ื‘ืคื™ืœื˜ืจ woocommerce_catalog_orderby ื•ื”ืกื™ืจื• ืืช ื”ืžืคืชื— ืขื unset(), ืœืžืฉืœ unset( $options['popularity'] );, ื•ืœืื—ืจ ืžื›ืŸ ื”ื—ื–ื™ืจื• ืืช ื”ืžืขืจืš.
ืœืžื” ืืคืฉืจื•ืช ื”ืžื™ื•ืŸ ื”ืžื•ืชืืžืช ืฉืœื™ ืœื ืžื•ืคื™ืขื”?
ื”ืชืคืจื™ื˜ ื”ื ืคืชื— ืžื•ืฆื’ ืจืง ื‘ืœื•ืœืื•ืช ืžื•ืฆืจื™ื ืขื ืขื™ืžื•ื“ ืฉื™ืฉ ื‘ื”ืŸ ืžื•ืฆืจื™ื ืœื”ืฆื™ื’. ื‘ื“ืงื• ื’ื ืฉื”ืชื‘ื ื™ืช ืฉืœื›ื ืื• ื”-page builder ืื™ื ื ืžืฆื™ื’ื™ื ืจื›ื™ื‘ ืžื™ื•ืŸ ืžืฉืœื”ื ื‘ืžืงื•ื woocommerce_catalog_ordering().
ื”ืื ืืคืฉืจ ืœืžื™ื™ืŸ ืœืคื™ ืฉื“ื” ืžื•ืชืื?
ื›ืŸ. ื”ื•ืกื™ืคื• ืืช ื”ืืคืฉืจื•ืช ืขื woocommerce_catalog_orderby, ื•ืœืื—ืจ ืžื›ืŸ ื‘-woocommerce_get_catalog_ordering_args ื”ื’ื“ื™ืจื• ืืช $args['meta_key'] ืœืฉื ื”ืฉื“ื” ืฉืœื›ื ื•ืืช $args['orderby'] ืœ-meta_value ืื• ืœ-meta_value_num. ืžื•ืฆืจื™ื ืฉืื™ืŸ ืœื”ื ืืช ื”ืฉื“ื” ื”ื–ื” ืœื ื™ื•ืคื™ืขื• ื‘ืชื•ืฆืื•ืช.
ื“ื™ื•ืŸ ื•ืชื’ื•ื‘ื•ืช
[  0 ืชื’ื•ื‘ื•ืช  ]

ื”ืฉืื™ืจื• ืชื’ื•ื‘ื”

ื”ื•ืกื™ืคื• ืงื•ื“ ื‘ืืžืฆืขื•ืช ื”ื›ืคืชื•ืจื™ื ืžื˜ื”. ืœืžืฉืœ, ื‘ื›ื“ื™ ืœื”ื•ืกื™ืฃ PHP ืœื—ืฆื• ืขืœ ื”ื›ืคืชื•ืจ PHP ื•ื”ื•ืกื™ืคื• ืืช ื”ืงื•ื“ ื‘ืชื•ืš ื”ืฉื•ืจื˜ืงื•ื“. ืžืฆืืชื ืฉื’ื™ืื” ื‘ืคื•ืกื˜? ืขื“ื›ื ื• ืื•ืชื ื•...