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

问题描述 投票:0回答:1

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

https://i.stack.imgur.com/6Qabg.jpg

我用红色标记的部分是最先显示的!我很想对这个循环进行排序,因此它会在字段顺序之后输出!而不是某个日期..

php wordpress sorting advanced-custom-fields
1个回答
0
投票

您可以使用 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 参数排序。

© www.soinside.com 2019 - 2024. All rights reserved.