UPDATE_POST_META仅在Foreach的最后一个循环上更新

时间:2013-01-17 作者:Josh

我正在构建一种在前端上传多个文件以用于公告自定义帖子类型的方法。我的功能在此成功上传任意数量的文件,以便我可以在WordPress的“媒体”下查看它们。。。附在岗位上。

我需要能够将文件的url存储在自定义字段中。当我使用update_post_meta ... 它只更新下面我的foreach循环中最后一个循环/文件的值。我不明白为什么?

update_post_meta() 表示“如果meta不存在,则返回meta\\u id;否则,如果成功,则返回true;如果提交的值与数据库中已有的值相同,则返回false。”http://codex.wordpress.org/Function_Reference/update_post_meta

在代码中查看我的注释以了解发生的情况。

有什么想法吗?谢谢

akpsi_insert_attachment( $announcement_id, \'wpcf-announcement_attached_file\' );

function akpsi_insert_attachment( $post_id, $post_meta  ) {

        if ( $_FILES[\'announcement_upload\'] ) {
            $files = $_FILES[\'announcement_upload\'];
            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( "announcement_upload" => $file );

                    foreach ( $_FILES as $file_key => $array ) {

                            // check to make sure its a successful upload
                            if ($_FILES[$file_key] !== UPLOAD_ERR_OK) __return_false();

                            require_once( ABSPATH . "wp-admin" . \'/includes/image.php\' );
                            require_once( ABSPATH . "wp-admin" . \'/includes/file.php\' );
                            require_once( ABSPATH . "wp-admin" . \'/includes/media.php\' );

                            // successfully uploads any file on each loop
                            $attach_id = media_handle_upload( $file_key, $post_id );


                            // this is only updating post meta once, and only the last loop/file.       
                            $attach_url = wp_get_attachment_url( $attach_id );                          
                            $postmeta_updated = update_post_meta( $post_id, $post_meta, $attach_url ); 

                            // test to see what it gives me on each loop... 
                            // ex: gives me \'int(777)\' for first loop/file, \'bool(true)\' for second loop/file, \'bool(true)\' for third loop/file
                            var_dump( $postmeta_updated );

                    }
                }
            }
        }

}

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

update_post_meta() 如果提供的键在数据库中已经存在,则将更新该键的值,然后返回true,这是您在后续调用中看到的结果。它只在键之前不存在的情况下返回post meta的ID。如果要使用同一键存储多个值(行),请使用add_post_meta() 相反

结束

相关推荐

如何在unctions.php中设置全局变量

我想能够回显一篇文章的特色图片的URL,在网上查看了一些后,我发现以下内容在我的首页模板中循环时效果很好。<?php $thumbSmall = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), \'small\' ); $urlSmall = $thumbSmall[\'0\']; ?> <?php echo $urlSmall; ?> 然而,我希望在首页模板以外