我正在使用高级自定义字段向每个帖子输出一些额外的数据。我通过将其添加到 WordPress 中的 post.php 文件来做到这一点:
<ul>
<?php foreach( $fields as $field ): ?>
<?php if( $field['value'] ): ?>
<li><?php echo $field['label']; ?>: <div class="new_color_test"> <?php echo $field['value']; ?></div></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
这曾经工作得非常完美!但是在更新一些字段标签后,这个 php 循环会在日期之后排序,而不是字段顺序。看这张图:
我用红色标记的部分是最先显示的!我很想对这个循环进行排序,因此它会在字段顺序之后输出!而不是某个日期..
您可以使用 array_multisort 函数对字段进行排序。让我展示一下:
ACF字段是分组存储的。每个字段都有 menu_order 参数。在管理字段中始终按其排序,但在前端,此顺序可能会被破坏。
所以,首先我们需要从我们的组中获取字段。我们需要知道ACF字段组ID。您可以在群组编辑页面的url中找到它,例如:
http://site.ru/wp-admin/post.php?post=340&action=edit
在本例中,组 ID 为 340。如果您不想使用硬编码 ID(如果您的组不时更改),则可以使用组名称获取它(在此示例中,组名称 id Technic CPT):
global $wpdb;
$group_ID = $wpdb->get_var( "SELECT ID FROM $wpdb->posts WHERE post_title = 'Technic CPT'" );
然后我们得到我们的字段数组:
$acf_fields = acf_get_fields_by_id( $group_ID );
下一步将为新订单创建数组。我们需要通过 menu_order 参数对字段进行排序:
$order = array();
foreach ( $acf_fields as $key => $field ) :
$order[ $key ] = $field[ 'menu_order' ];
endforeach;
注意,$acf_fields 的键也是 $order 的键! 最后,我们可以对字段进行排序:
array_multisort(
$order, SORT_DESC,
$acf_fields
);
如果您想从大到小排序,将使用SORT_DESC。以及 SORT_ASC - 从小到大。
仅此而已。现在 $acf_fields 数组按 menu_order 参数排序。