首页 > 解决方案 > 从选择下拉列表中的所有帖子中获取所有自定义帖子元值以用作过滤器 - Wordpress

问题描述

在我的 wordpress 博客页面中,我正在尝试为博客创建过滤器。我有一个自定义帖子元键part_number,现在我想在选择下拉列表中创建过滤器part_number,我正在从所有帖子中获取所有元值,如下所示:

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

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

标签: phpwordpresswordpress-themingcustom-wordpress-pageswordpress-rest-api

解决方案


您可以使用它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>

推荐阅读