如何按自定义字段排序?
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_posts
和orderby = '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
元键为您找到这种排序,并确保您的页面运行速度更快。
在我的自定义 post 类型 ("mitarbeiter") 中,有一个名为 "sort" 的自定义字段,它只允许数字作为值。目前我的 post 正在按标题排序。我想通过函数 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();
}
我该怎么做?
在query_posts
和orderby = '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
元键为您找到这种排序,并确保您的页面运行速度更快。