从 select 下拉列表中的所有 post 中获取所有自定义 post 元值以用作过滤器 - Wordpress

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

在我的 wordpress 博客页面中,我正在尝试为博客创建过滤器。我有一个自定义 post 元键 part_number,现在我想在 select 下拉列表中为 part_number 创建过滤器,我从所有 post 中获取所有元值像这样:

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

但是使用此代码,我的页面从未停止加载,就像加载加载和仍在加载并卡住一样。可能是因为它是博客页面中的第二个查询。我搜索了很多关于从所有 post 获取所有元值的另一种方法,但没有找到任何解决方案。我在这里提出问题。请帮助我完成这项任务。我卡住了

您可以使用 get_posts() 检索所有帖子和他的 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>