更改附加到帖子的图像的顺序

时间:2018-06-27 作者:730wavy

我不太确定如何解释我的问题,所以如果我不清楚什么,请告诉我。

我在我的前端帖子表单上有一个多文件上传输入,可以将文件上传到我指定的文件夹,并创建附件id等。

if (!empty($_FILES[\'vidPix\'][\'tmp_name\'][0])) {
    $i = 1;
    $files = $_FILES[\'vidPix\'];
    foreach ($files[\'name\'] as $key => $value) {
        if ($files[\'name\'][$key]) {
            $file = array(
                \'name\' => $files[\'name\'][$key],
                \'type\' => $files[\'type\'][$key],
                \'tmp_name\' => $files[\'tmp_name\'][$key],
                \'error\' => $files[\'error\'][$key],
                \'size\' => $files[\'size\'][$key]
            );
            $_FILES = array("sight" . $i => $file);
            add_filter( \'upload_dir\', \'wpse_141088_upload_dir\' );
            add_filter(\'intermediate_image_sizes_advanced\', \'no_image_resizing\');

            $mfile =  wp_handle_upload($files, $upload_overrides );

            $newvidPix = sight("sight" . $i, $v_Id);
            remove_filter( \'upload_dir\', \'wpse_141088_upload_dir\' );
            remove_filter(\'intermediate_image_sizes_advanced\', \'no_image_resizing\');

            if ($i == 1) {
                update_post_meta($v_Id, \'_thumbnail_id\', $newvidPix);
            }
            add_post_meta($v_Id, \'vid_pix\', $newvidPix, false);
        }
        $i++;
    }
}
上载文件时,我会将其显示在前端-

<div id="pic-con">
<?php
    if (!empty($vid_pix)) {
        foreach ($vid_pix as $vP) {
            $filename = basename( get_attached_file( $vP ));
            echo \'<div class="photo-upload-box">\';
            echo \'<img src="\' . wp_get_attachment_thumb_url($vP) . \'" alt=""/>\';
            echo \'<input type="hidden" class="pic_value" value="\' . $filename . \'" />\';
            echo \'<input type="hidden" name="\'.$vP.\'" class="orders" />\';
            echo \'</div>\';   
        }
    }
?>
</div>
我使用jquery对每个div进行排序,以便更改图像的显示顺序-example of how the sorting works

function updateIndexes() {
    $(\'#pic-con .orders\').each(function(index) {
        $(this).val(index + 1);
    });
}
使用订单号更新隐藏输入-

现在,我尝试使用订单号与图像一起保存,以便在页面加载或将值回显到$vid\\u pix元键等时始终按该顺序显示图像。

例如-$vid\\U pix键包含5个图像:file1, file2, file3, file4, file5及其相应的订单号-1, 2, 3, 4, 5

但如果我用前端的div重新排列顺序-

1- file5, 2- file4, 3- file2, 4- file1, 5- file3
我如何将其按此顺序保存到我的元密钥中?我遇到了php函数ksort,但我不太确定如何应用于我的情况。

EDIT

好的,通过在每个附件id中添加一个自定义字段,我似乎离我的最终目标越来越近。自定义字段将存储订单编号ie 1。

完整代码见我的另一个问题-here添加\\u操作(“init”,“my\\u save\\u vid\\u pix\\u data”);

function my_save_vid_pix_data() {
    if ( ! isset( $_POST[\'attachments\'], $_POST[\'v_Id\'] ) ) {
        return;
    }

    $atts = (array) $_POST[\'attachments\'];
    $post_id = absint( $_POST[\'v_Id\'] );
    $vid_pix = get_post_meta($post_id, \'vid_pix\', false);

    foreach ((array) $vid_pix as $vP) {
        if ( ! isset( $atts[ $vP ] ) || ! is_array( $atts[ $vP ] ) ) {
            continue;
        }

        update_post_meta($vP, \'photo_time\', $atts[ $vP ][\'photo_time\']);
        update_post_meta($vP, \'photo_order\', $atts[ $vP ][\'photo_order\']);
    }
}
所以现在我需要知道如何对输出进行排序(如果可能的话,还要对db进行排序)。类似于-

if (!empty($vid_pix)) {
foreach ($vid_pix as $vP) {
$filename = basename( get_attached_file( $vP ));
$Pt = get_post_meta($vP, \'photo_time\', true);
$Por = get_post_meta($vP, \'photo_order\', true);

// SOMETHING LIKE THIS
foreach ($vP SORT USING $Pt) {
echo \'IMAGES IN ORDER ACCORDINGLY\'
编辑2

usort()

我尝试使用usort函数,但现在它没有显示任何内容-

if (!empty($vid_pix)) {
foreach ($vid_pix as $vP1) {
$filename = basename( get_attached_file( $vP1 ));
$Pt = get_post_meta($vP1, \'photo_time\', true);
$Por = get_post_meta($vP1, \'photo_order\', true);

function cmp($a, $b)
{
    if ($a[\'photo_order\'] == $b[\'photo_order\']) {
        return 0;
    }
    return ($a[\'photo_order\'] < $b[\'photo_order\']) ? -1 : 1;
}
usort($vP1, "cmp");
foreach ($vP1 as $vP) {

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

回答第二版,很抱歉造成混淆。

以下是如何使用usort() 函数对图像进行排序(在div#pic-con 在前端):

<div id="pic-con">
<?php
    if (!empty($vid_pix)) {
        usort( $vid_pix, function( $a, $b ){
            $aPor = (int) get_post_meta( $a, \'photo_order\', true );
            $bPor = (int) get_post_meta( $b, \'photo_order\', true );

            if ( $aPor === $bPor ) {
                return 0;
            }

            return ( $aPor < $bPor ) ? -1 : 1;
        } );

        foreach ($vid_pix as $vP) {
            // echo `div.photo-upload-box` here
        }
    }
?>
</div>

结束