An advanced WordPress query that filters by meta_key
and orders the results by another meta_key
.
Here’s a PHP code example demonstrating how to achieve this using WP_Query
. This will be provided in an immersive code document.
/** * Advanced WordPress Query: Filtering by meta_key and Ordering by another meta_key. * * This example demonstrates how to use WP_Query to fetch posts that have a specific * custom field (meta_key) and then order those results based on the value of a * different custom field. */ // Define the arguments for our WP_Query. $args = array( 'post_type' => 'post', // Or 'product', 'book', 'custom_post_type', etc. 'posts_per_page' => 10, // Number of posts to retrieve. Use -1 for all posts. 'post_status' => 'publish', // Only published posts. // 1. Filtering by meta_key (e.g., only posts with 'featured_item' set to 'yes') 'meta_query' => array( array( 'key' => 'featured_item', // The meta_key to filter by. 'value' => 'yes', // The meta_value to match. 'compare' => '=', // Comparison operator (e.g., '=', '!=', '>', 'LIKE'). 'type' => 'CHAR', // Data type of the meta_value (e.g., 'CHAR', 'NUMERIC', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'UNSIGNED'). // Important for correct comparison. ), // You can add more meta_query arrays here for complex filtering (AND/OR relationships). // For example, to also ensure 'product_price' exists: // array( // 'key' => 'product_price', // 'compare' => 'EXISTS', // ), ), // 2. Ordering by a custom meta_key (e.g., order by 'display_order') 'orderby' => 'meta_value_num', // Use 'meta_value' for string sorting, 'meta_value_num' for numeric sorting. 'meta_key' => 'display_order', // The meta_key to order the results by. // This meta_key must be present in the posts you want to order by it. 'order' => 'ASC', // Order direction: 'ASC' for ascending, 'DESC' for descending. ); // Create a new WP_Query instance. $custom_query = new WP_Query( $args ); // Check if there are any posts found. if ( $custom_query->have_posts() ) { echo '<h2>Featured Items (Ordered by Display Order):</h2>'; echo '<ul>'; // Loop through the posts. while ( $custom_query->have_posts() ) { $custom_query->the_post(); // Set up post data. // Retrieve custom field values for display. $featured_status = get_post_meta( get_the_ID(), 'featured_item', true ); $display_order = get_post_meta( get_the_ID(), 'display_order', true ); echo '<li>'; echo '<a href="' . get_permalink() . '">' . get_the_title() . '</a>'; echo ' (Featured: ' . esc_html( $featured_status ) . ', Display Order: ' . esc_html( $display_order ) . ')'; echo '</li>'; } echo '</ul>'; } else { // No posts found matching the criteria. echo '<p>No featured items found.</p>'; } // Restore original post data. This is crucial if you are running this query // within the WordPress loop (e.g., in a theme template file). wp_reset_postdata();
This code snippet provides a robust example of how to construct an advanced WP_Query
. It first filters posts to include only those marked as ‘featured_item’ with a value of ‘yes’, and then orders these filtered posts based on the numeric value of another custom field named ‘display_order’.
Remember to replace 'post'
with your desired post type and adjust the meta_key
and meta_value
parameters to match your specific custom fields and requirements.