如何按自定义字段排序?

How to sort by custom field?

在我的自定义 post 类型 ("mitarbeiter") 中,有一个名为 "sort" 的自定义字段,它只允许数字作为值。目前我的 post 正在按标题排序。我想通过函数 get_field("sort").

给出的自定义字段 "sort" 的值对它们进行排序

这是我的代码现在的样子:

// Get the team members
function get_employee() {
    query_posts(array( 
        'post_type' => 'mitarbeiter',
        'showposts' => 100,
        'orderby' => 'title',
        'order' => 'ASC'
    ) );
    while (have_posts()) : the_post();
        $content = '
            <div class="col-md-6 department member_of_'. get_field("abteilung") .'">
                <div class="well">
                    <div class="row">
                        <div class="col-xs-5">';
                            // Display the image
                            $image = get_field('portraitfoto');
                            if (!empty($image)) :
                                $content .= '<img class="img-responsive sidebar-img team-member" src="'. $image["url"] .'" alt="'. $image["alt"] .'" /><br />';
                            endif;
                        $content .= '</div>
                        <!-- /.col-xs-5 -->
                        <div class="col-xs-7">
                            <h2>'. get_the_title() .'</h2>
                            <p>'. get_field("funktion") .'<br>'.
                             get_field("telefon") . '<br>
                            <a href="mailto:'. get_field("email") . '">'. get_field("email") .'</a></p>
                        </div><!-- /.col-xs-7 -->
                    </div><!-- /.row -->
                </div><!-- /.well -->
            </div><!-- /.col-md-6 -->';

    echo $content;
    endwhile;
    wp_reset_query();
}

我该怎么做?

query_postsorderby = 'meta_value_num'中使用了meta_key

query_posts(array( 
        'post_type' => 'mitarbeiter',
        'showposts' => 100,
        'meta_key'          => 'sort',
        'orderby'           => 'meta_value_num',
        'order'             => 'ASC/DESC'// Add ASC OR DESC as per your requirement 
) );

正如 Pieter 在评论中提到的那样,query_posts() 并不是最适合使用的函数 - 请参阅 WordPress Stack Exchange 上的 this post 了解一些背景知识。基本上,它效率低下并且会导致一些不明显的错误。

执行此操作的更好方法是使用 WP_Query,该文档向您展示了如何执行此操作以及更多内容(它非常强大 class)。

要重写您的查询并添加您的排序标准,您将看到如下内容:

$my_query = new WP_Query(array( 
  'post_type' => 'mitarbeiter',
  'posts_per_page' => 100,
  'meta_key' => 'sort',
  'orderby' => 'meta_value_num',
  'order' => 'ASC',
) );

要让您的循环与您的自定义 WP_Query 一起工作,您还需要更改此行:

while (have_posts()) : the_post();

对此:

while ($my_query->have_posts()) : $my_query->the_post();

并将代码末尾的 wp_reset_query(); 调用更改为 wp_reset_postdata();

您应该通过 sort 元键为您找到这种排序,并确保您的页面运行速度更快。