Search code examples
phpwordpresswordpress-themingcustom-wordpress-pageswordpress-rest-api

Get all custom post meta values from all posts in select dropdown to use as a filter - Wordpress


In my wordpress blog page, I am trying to create filters for blogs. I have a custom post meta key part_number, now I wanna create filter for part_number in select dropdown, I was fetching all meta values from all posts like this:

<select name="filter_year">
    <option value="">Select part number</option>
    <?php
    
        if ( $query->have_posts() ) {
            while($query->have_posts()) {
                global $post;
                $part_number = get_post_meta($post->ID, 'part_number', true);
                echo '<option value="'.$part_number.'">'.$part_number.'</option>';
            }
        }
    
    ?>
</select>

But using this code, my page never stops from loading, it's like loading loading and still loading and stuck.. May be because it is 2nd query in blog page. I have searched a lot about another way to get all meta values from all posts but didn't find any solution. I am putting question here. Please help me to achieve this task. I am stuck


Solution

  • You can use get_posts() to retrieve all posts and his meta_data.

    <?php
    
    $all_posts = get_posts( array(
        'numberposts' => -1
    ) );
    
    $part_numbers = array();
    
    foreach ( $all_posts as $p ) {
        $part_number = get_post_meta( $p->ID, 'part_number', true );
        $part_numbers[] = $part_number;
    }
    
    $part_numbers = array_unique( $part_numbers );
    
    ?>
    
    <select name="filter_year">
        <option hidden disabled selected value="">Select part number</option>
        <?php foreach ( $part_numbers as $pn ) {
             echo '<option value="'.$part_number.'">'.$part_number.'</option>';
        } ?>
    </select>