Hướng dẫn sắp xếp sản phẩm trong WordPress

Trong WordPress, chúng ta có thể sắp xếp danh sách sản phẩm theo một trong các tiêu chí như:

  • Sắp xếp theo giá từ thấp-cao
  • Sắp xếp theo giá từ cao-thấp
  • Sắp xếp theo tên từ A-Z
  • Sắp xếp theo tên từ Z-A

sap-xep-san-pham-trong-wordpress

Một số quy ước cần lưu ý:

  1. Giá của sản phẩm được tạo bằng plugin Advanced Custom Fields với meta_key là “gia”
  2. Sản phẩm sẽ có danh mục sản phẩm, taxonomy tên là “danhmucsanpham”
  3. Post type có tên là “sanpham”, URL trong admin của sản phẩm như hình dưới

url-san-pham

Ta có 4 URL để sắp xếp sản phẩm:
  • Sắp xếp giá từ thấp-cao:
?orderby=gia & order=asc
  • Sắp xếp giá từ cao-thấp:
?orderby=gia & order=desc
  • Sắp xếp tên sản phẩm từ A-Z:
?orderby=title & order=asc
  • Sắp xếp tên sản phẩm từ Z-A:
?orderby=title & order=desc

Code sắp xếp sản phẩm trong WordPress:

<?php
// Đoạn 1
$queried_object = get_queried_object();
$term_id = $queried_object->term_id;

// Đoạn 2
$order2 = array();
if (isset($_GET['orderby']) && isset($_GET['order']) && $_GET['orderby'] == "title")
{
     $order2 = array(
          'orderby' => 'title',
          'order' => $_GET['order']
     );
}

// Đoạn 3
if (isset($_GET['orderby']) && isset($_GET['order']) && $_GET['orderby'] == "gia")
{
     $order2 = array(
          'meta_key' => 'gia',
          'orderby' => 'meta_value',
          'order' => $_GET['order']
     );
}

// Đoạn 4
$order1 = array(
     'post_type' => 'sanpham',
     'tax_query' => array(
          array(
               'taxonomy' => 'danhmucsanpham',
               'terms' => $term_id,
               'field' => 'term_id',
          )
     )
);

// Đoạn 5
$order = array_merge($order1, $order2);

// Đoạn 6
query_posts($order);
while (have_posts())
{
     the_post();
     ?>
     // Code lặp sản phẩm ở đây
     <?php
}
wp_reset_query();
?>
Giải thích:
  • Đoạn 1: Lấy ID danh mục sản phẩm (taxonomy) hiện tại, mục đích là lấy ra những sản phẩm (post) theo ID danh mục sản phẩm (taxonomy).
  • Đoạn 2: Dùng để lấ các tham số từ URL của việc sắp xếp tên sản phẩm từ A-Z hoặc từ Z-A, giá trị nhận được sẽ lưu trong mảng tên là $order2
  • Đoạn 3: Dùng để lấy các tham số từ URL của việc sắp xếp giá sản phẩm từ cao đến thấp hoặc từ thấp đến cao, giá trị nhận được sẽ lưu trong mảng tên là $order2
  • Đoạn 4: Tạo ra các mảng để lấy những sản phẩm (post) theo post_type, id danh mục sản phẩm (taxonomy).
  • Đoạn 5: Dùng để ghép 2 mảng với nhau.
  • Đoạn 6: Truyền tham số mảng đã ghép ở đoạn 5.
Và lặp theo giao diện của bạn.

Về HTML:

// Đoạn 1
<?php
$search = array($_SERVER['QUERY_STRING'], '?');
$replace = array('', '');
$currentUrl = str_replace($search,$replace, $_SERVER['REQUEST_URI']);
?>

// Đoạn 2
<select onchange="window.location = $(this).val();">
<option selected="selected" value="position:asc">Sắp xếp</option>
<option value="<?= $currentUrl; ?>?orderby=gia&order=asc">Giá từ thấp - cao</option>
<option value="<?= $currentUrl; ?>?orderby=gia&order=desc">Giá từ cao - thấp</option>
<option value="<?= $currentUrl; ?>?orderby=title&order=asc">Tên từ A - Z</option>
<option value="<?= $currentUrl; ?>?orderby=title&order=desc">Tên Z - A</option>
</select>
Giải thích:
  • Đoạn 1: Lấy URL hiện tại chuẩn (đoạn này rất hay, làm trực tiếp bạn sẽ rõ)
  • Đoạn 2: Các tùy chọn để sắp xếp

Dựa vào code mẫu này, bạn có thể tùy biến theo các sắp xếp riêng theo mục đích của bạn.

Chúc bạn thành công.


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

×