Reputation: 1
This is my query:
***
$args = array( 'post_type' => 'product', 'post_status' => 'publish', 'posts_per_page' => 12, 'paged' => $paged, );
$loop = new WP_Query($args);
Upvotes: 0
Views: 505
Reputation: 1
I wanted to make a custom sortBy dropdown. This is how I solved it:
<?php
$orderby = 'ID';
$order = 'DESC';
if (isset($_GET['orderby']) && $_GET['orderby'] != "") {
$order_by = $_GET['orderby'];
WC()->query->remove_ordering_args();
if ($order_by == 'title-desc') {
$orderby = 'title';
$order = 'DESC';
}
if ($order_by == 'title-asc') {
$orderby = 'title';
$order = 'ASC';
}
if ($order_by == 'price-asc') {
$meta_key = '_price';
$orderby = ['meta_value_num' => 'ASC', $order => 'ASC'];
}
if ($order_by == 'price-desc') {
$meta_key = '_price';
$orderby = ['meta_value_num' => 'DESC', $order => 'DESC'];
}
if ($order_by == 'date-asc') {
$orderby = 'ID';
$order = 'ASC';
}
if ($order_by == 'date-desc') {
$orderby = 'ID';
$order = 'DESC';
}
}
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if ($meta_key == '_price') {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 12,
'paged' => $paged,
'orderby' => $orderby,
'order' => $order,
'meta_key' => $meta_key,
);
} else {
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => 12,
'paged' => $paged,
'orderby' => $orderby,
'order' => $order,
);
}
$loop = new WP_Query($args);
// debug($loop);
?>
And this is my form:
<form class="woocommerce-ordering" method="get">
<select name="orderby" class="orderby form-select" aria-label="Shop order"
onchange="this.form.submit()">
<option <?php if (isset($order_by) && $orderby == 'ID' && isset($order) && $order == 'DESC') {
echo 'selected';
} ?> value="date-desc">Sort by latest
</option>
<option <?php if (isset($order_by) && $orderby == 'ID' && isset($order) && $order == 'ASC') {
echo 'selected';
} ?> value="date-asc">Sort by oldest
</option>
<option <?php if (isset($order_by) && $orderby == 'title' && isset($order) && $order == 'ASC') {
echo 'selected';
} ?> value="title-asc">Sort by name: a to z
</option>
<option <?php if (isset($order_by) && $orderby == 'title' && isset($order) && $order == 'DESC') {
echo 'selected';
} ?> value="title-desc">Sort by name: z to a
</option>
<option <?php if (isset($order_by) && $orderby == ['meta_value_num' => 'ASC', $order => 'ASC'] && isset($meta_key) && $meta_key == '_price') {
echo 'selected';
} ?> value="price-asc">Sort by price: low to high
</option>
<option <?php if (isset($order_by) && $orderby == ['meta_value_num' => 'DESC', $order => 'DESC'] && isset($meta_key) && $meta_key == '_price') {
echo 'selected';
} ?> value="price-desc">Sort by price: high to low
</option>
</select>
</form>
Upvotes: 0