使用来自自定义帖子类型的所有帖子的元值填充选择列表

时间:2021-04-14 作者:revive

我有一个CPT的库存,我试图显示所有制造商的下拉列表。我有form和pre\\u get\\u posts功能,这样当用户选择一个制造商时,页面会刷新并仅显示该制造商的库存。

问题是:一旦选择了制造商。页面刷新,只有mfr显示为选项!无论我如何构建选择选项(我不会将它们全部发布在这里,因为我已经尝试了10个不同的循环),我都无法让它显示所有MFR。总是

我已经阅读了几十篇文章(字面意思),似乎找不到有效的解决方案。

以下是我现在拥有的:

功能。PHP

function my_pre_get_posts( $query ) {
    // do not modify queries in the admin
    if( is_admin() ) {
        return $query;      
    }

    // only modify queries for \'inventory\' post type
    if( isset($query->query_vars[\'post_type\']) && $query->query_vars[\'post_type\'] == \'inventory\' ) {
        
        // allow the url to alter the query
        if( isset($_GET[\'item_oem\']) ) {
            $query->set(\'meta_key\', \'item_oem\');
            $query->set(\'meta_value\', $_GET[\'item_oem\']);
            $query->set( \'meta_compare\', \'=\' );
        } 
    }
    // return
    return $query;
}
add_action(\'pre_get_posts\', \'my_pre_get_posts\');
回路:

        <?php // using get right now to see the query string and confirm functionality ?> 
        <form method="get" action="" onchange="submit();">

            <?php 
                $posts = get_posts( array(
                \'post_type\' => \'inventory\',
                \'posts_per_page\' => -1,
                \'orderby\' => \'date\',
                \'order\' => \'DESC\',
            ));

            if ( $posts ): ?>

            <select name="item_oem" id="select-oem">
                <?php foreach( $posts as $post ): ?>
                    <option value="<?php the_field(\'item_oem\'); ?>"> <?php the_field(\'item_oem\'); ?> </option>
                <?php endforeach; ?>
            </select>
        <?php endif; ?>
        <?php wp_reset_postdata(); ?>

        </form>

所以,这确实给了我一个完整的制造商列表。但是,一旦您选择一个,它就会重新加载页面,只显示该制造商的库存。,则选定的Mfr是选择中的唯一选项。

我如何覆盖它并始终显示“item\\u oem”元键的所有元值??

非常感谢!

1 个回复
SO网友:revive

这是我提出的解决方案,它可以正常工作。

<form method="get" action="" onchange="submit();">
        <div class="input-group">
            <?php
            global $wpdb;
            $meta_key = \'item_oem\';
            $data = $wpdb->get_results($wpdb->prepare( "SELECT DISTINCT meta_value FROM $wpdb->postmeta WHERE meta_key = %s", $meta_key) , ARRAY_N  ); ?>
            <select class="custom-select" id="oems" aria-label="oems" name="item_oem" >
                <option selected>Search By OEM</option>
                <?php foreach( $data as $value ): ?>
                    <option value="<?php echo $value[0]; ?>"><?php echo $value[0]; ?> </option>
                <?php endforeach; ?>
          </select>
          <div class="input-group-append">
            <a href="/inventory" class="btn btn-secondary" type="button">Clear Filter</a>
          </div>
        </div>
    </form>

相关推荐

Category selectable homepage

我已经安装了一个本地Wordpress,我试图让用户可以自定义它,所以它只显示他们选择的类别中的页面。我使用了在线程中找到的代码How to Set an Individual Homepage for Each User?当它工作时,它打破了每一页的菜单,它只是消失了。前面的示例:https://i.stack.imgur.com/dVvLb.png之后:https://i.stack.imgur.com/aNqWX.png任何帮助都将不胜感激。提前谢谢你。