如何按自定义字段排序?

时间:2016-06-17 10:17:35

标签: php wordpress sorting advanced-custom-fields

在我的自定义帖子类型(“mitarbeiter”)中,有一个名为“sort”的自定义字段,它只允许数字作为值。目前,我的帖子按标题排序。我想通过自定义字段“sort”的值来命令它们,它将由函数get_field("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();
}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

meta_keyquery_posts

中使用了orderby = 'meta_value_num'
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 
) );

答案 1 :(得分:1)

正如Pieter在评论中提到的那样,query_posts()并不是最好的功能 - 请参阅WordPress Stack Exchange上的this post了解相关问题。基本上,它效率低下并导致一些模糊的错误。

更好的方法是使用WP_Query,该文档将向您展示如何执行此操作以及更多(这是一个非常强大的类)。

要重写您的查询,并添加您的排序条件,您将看到类似这样的内容:

$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元键找到这种排序,并确保您的页面运行得更快。