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
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>