How to sort by a field in the pre_get_posts hook that is a number from largest to smallest?

To sort posts by a numeric custom field in descending order using the pre_get_posts hook, you need to modify the WP_Query parameters. Here’s an example:

add_action('pre_get_posts', 'custom_sort_posts_by_meta_field');
function custom_sort_posts_by_meta_field($query) {
    // Check if this is the main query and, for example, an archive page
    if (!is_admin() && $query->is_main_query() && $query->is_archive()) {
        $meta_key = 'your_meta_key'; // Replace with your meta field key
        $query->set('meta_key', $meta_key);
        $query->set('orderby', 'meta_value_num'); // Specify the field is numeric
        $query->set('order', 'DESC'); // Sort from highest to lowest
    }
}

Explanation:

  1. is_admin() and is_main_query():
    • These ensure the hook runs only for frontend queries and for the main query (not for secondary queries).
  2. $query->is_archive():
    • This condition checks if the query is for an archive page. You can replace it with other conditions like is_home(), is_category(), or remove it entirely if you want to apply this logic to all frontend queries.
  3. meta_key:
    • Replace your_meta_key with the key of the custom field you want to sort by. This is the meta field key you use when saving data with update_post_meta.
  4. meta_value_num:
    • This tells WordPress to treat the meta field values as numbers rather than strings.
  5. order:
    • Specifies the sorting order: DESC for descending or ASC for ascending.

Example Use Case:

Suppose you have a custom field price storing product prices, and you want to sort products by price from highest to lowest. Replace your_meta_key with price.

If you need additional conditions (e.g., sorting only for a specific post type), you can add them to the check. For example:

if (!is_admin() && $query->is_main_query() && $query->is_post_type_archive('product')) {
    // Sorting code here
}

This will apply sorting only to archive pages for the product post type.

How useful is the publication?

Click on a star to rate it!

Average score 5 / 5. Number of grades: 1

No ratings yet. Rate it first.

Similar posts

How to transfer a site from dle to WordPress?

Transferring a website from DLE (DataLife Engine) to WordPress can be a complex process, especially if the site has a lot of content. Here’s a step-by-step guide: 1. Preparation 2. Export Data from DLE DLE uses its own database structure, so you’ll need to export data and convert it into a format compatible with WordPress:…
Read more