Wordpress 高级自定义字段 - 使用 get_field_objects() 排序;

Wordpress advanced custom field - sort with get_field_objects();

我正在使用高级自定义字段向每个 post 输出一些额外的数据。我通过将其添加到 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 循环在日期之后排序,而不是字段顺序。看这张图片:

http://imgur.com/MzZy66m

我标红的在先显示!我很想对这个循环进行排序,所以它会在 Field Order 之后输出!而不是某个日期..

您可以使用 array_multisort 功能对字段进行任意排序。让我展示一下:

ACF 字段存储在组中。每个字段都有 menu_order 参数。在管理字段中总是按它排序,但在前端这个顺序可能会被打破。

所以,首先我们需要从我们的组中获取字段。我们需要知道 ACF 字段组 ID。您可以在组编辑页面的 url 中找到它,例如:

http://site.ru/wp-admin/post.php?post=340&action=edit

在这种情况下,组 ID 是 340。如果您不想使用硬编码 ID(如果您的组不时更改),您可以使用组名(在此示例中组名 id技术 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 参数排序。